DESAFIOS,	
  APRENDIZADO	
  e	
  
RESULTADOS	
  
Vinicius	
  Gracia	
  (EasyTaxi	
  CTO)	
   Yuri	
  Teixeira	
  (Rocket	
  Lead	
  Developer)	
  
AGENDA
2
MONGODB:	
  O	
  QUE	
  MOTIVOU	
  NOSSA	
  ESCOLHA?	
  
PROBLEMAS	
  ENFRENTADOS	
  
APLICANDO	
  O	
  QUE	
  APRENDEMOS	
  
GANHOS	
  DE	
  PERFORMANCE	
  
CONCLUSÃO	
  
BREVE	
  HISTÓRIA	
  DA	
  EASYTAXI	
  (TIMELINE)	
  
A brilhante idéia
BREVE HISTÓRIA DA EASYTAXI - TIMELINE
•  Idealizada em Junho de 2011
•  Idéia Inicial: Tracking de transporte coletivo
(um dos sócios sempre perdia o horário do
ônibus…)
•  Até que uma idéia um “pouco” melhor apareceu:
“E se fosse com TAXIS?”
3
INÍCIO DAS OPERAÇÕES
BREVE HISTÓRIA DA EASYTAXI - TIMELINE
•  Presente apenas no Rio de Janeiro
•  “Quick and Dirty”: Soluções rápidas,
como toda startup gosta (e suas
óbvias consequências)
•  Base de usuários pequena naquele
momento, logo, “por enquanto, não
precisamos nos preocupar”
4
INÍCIO DAS OPERAÇÕES - TECNOLOGIA
BREVE HISTÓRIA DA EASYTAXI - TIMELINE
•  API SOAP (overhead desnecessário de
dados onde cada byte importa)
•  Chamadas SOAP mapeadas para um
único script PHP
•  Sem testes e nem build automatizados
•  Banco de dados relacional, schema
inflexível.
5
INTEGRANDO-SE À ROCKET: NOVOS E MAIORES DESAFIOS
BREVE HISTÓRIA DA EASYTAXI - TIMELINE
•  Expansão Nacional e em seguida, Global
•  Tecnologia mais eficiente para suportar o
presente e o futuro do projeto:
•  API RESTful: Menos é mais
•  Todos os endpoints testados
•  Build automatizado com tasks de QA
•  Deadline: 2 semanas
Mas e MongoDB nessa história?
AGENDA
7
MONGODB:	
  O	
  QUE	
  MOTIVOU	
  NOSSA	
  ESCOLHA?	
  
PROBLEMAS	
  ENFRENTADOS	
  
APLICANDO	
  O	
  QUE	
  APRENDEMOS	
  
GANHOS	
  DE	
  PERFORMANCE	
  
CONCLUSÃO	
  
BREVE	
  HISTÓRIA	
  DA	
  EASYTAXI	
  (TIMELINE)	
  
MONGODB: O QUE MOTIVOU NOSSA ESCOLHA?
8
CLIENTES	
   TAXISTAS	
  
§  Write Concerns + Bom desempenho nas leituras: API veloz
§  GIS facilitado: 2d Index + GeoNear
{ geoNear : ”taxi_drivers”, near :
[passenger_x, passenger_y], maxDistance:
maxKmToRadius, spherical: true }
§  $db->drivers->find: Object Mapper Feelings (mas sem o
overhead de um OM)
§  Múltiplas cidades ao redor do mundo, múltiplos schemas,
uma só coleção (Schema-free WINS)
§  FIM DAS MIGRATIONS!
AGENDA
9
MONGODB:	
  O	
  QUE	
  MOTIVOU	
  NOSSA	
  ESCOLHA?	
  
PROBLEMAS	
  ENFRENTADOS	
  
APLICANDO	
  O	
  QUE	
  APRENDEMOS	
  
GANHOS	
  DE	
  PERFORMANCE	
  
CONCLUSÃO	
  
BREVE	
  HISTÓRIA	
  DA	
  EASYTAXI	
  (TIMELINE)	
  
Heranças do Universo Relacional:
PROBLEMAS ENFRENTADOS
10
•  #FAIL 1: Arquitetando a persistência como
antigamente: mais consultas do que o necessário
•  #FAIL 2: Falta de atenção nos índices (que agora são
definidos no código, antes de serem usados).
•  #FAIL 3: Alta-disponibilidade no mongo: alguns
detalhes deixados para trás
EFEITOS: Lentidão no Backoffice, na extração de
relatórios, afetando o tempo de resposta da API.
AGENDA
11
MONGODB:	
  O	
  QUE	
  MOTIVOU	
  NOSSA	
  ESCOLHA?	
  
PROBLEMAS	
  ENFRENTADOS	
  
APLICANDO	
  O	
  QUE	
  APRENDEMOS	
  
GANHOS	
  DE	
  PERFORMANCE	
  
CONCLUSÃO	
  
BREVE	
  HISTÓRIA	
  DA	
  EASYTAXI	
  (TIMELINE)	
  
APLICANDO O QUE APRENDEMOS
12
§  REMODELAGEM TOTAL DAS
COLLECTIONS
§  SERVER HIDDEN PARA RELATÓRIOS NO
REPLICA SET
§  ANÁLISE DE TODAS AS QUERIES E
INDEXES
AGENDA
13
MONGODB:	
  O	
  QUE	
  MOTIVOU	
  NOSSA	
  ESCOLHA?	
  
PROBLEMAS	
  ENFRENTADOS	
  
APLICANDO	
  O	
  QUE	
  APRENDEMOS	
  
GANHOS	
  DE	
  PERFORMANCE	
  
CONCLUSÃO	
  
BREVE	
  HISTÓRIA	
  DA	
  EASYTAXI	
  (TIMELINE)	
  
GANHOS DE PERFORMANCE
14
§  12 MIL ACESSOS POR MINUTO - CHEGANDO A 30 MIL
§  TEMPO DE RESPOSTA MENOR QUE 30 MILISEGUNDOS
§  QUERIES COM MENOS 10 MILESEGUNDOS EM MÉDIA
GANHOS DE PERFORMANCE
15
GANHOS DE PERFORMANCE
16
GANHOS DE PERFORMANCE
17
AGENDA
18
MONGODB:	
  O	
  QUE	
  MOTIVOU	
  NOSSA	
  ESCOLHA?	
  
PROBLEMAS	
  ENFRENTADOS	
  
APLICANDO	
  O	
  QUE	
  APRENDEMOS	
  
GANHOS	
  DE	
  PERFORMANCE	
  
CONCLUSÃO	
  
BREVE	
  HISTÓRIA	
  DA	
  EASYTAXI	
  (TIMELINE)	
  
OBRIGADO	
  PELA	
  PRESENÇA!	
  	
  
E	
  que	
  tal	
  voltar	
  de	
  EasyTaxi?!	
  	
  
#justsaying	
  
Vinicius	
  Gracia:	
  viniciusgracia@easytaxi.com.br	
   Yuri	
  Teixeira:	
  @yuriteixeira	
  

EasyTaxi e MongoDB - Showcase

  • 1.
    DESAFIOS,  APRENDIZADO  e   RESULTADOS   Vinicius  Gracia  (EasyTaxi  CTO)   Yuri  Teixeira  (Rocket  Lead  Developer)  
  • 2.
    AGENDA 2 MONGODB:  O  QUE  MOTIVOU  NOSSA  ESCOLHA?   PROBLEMAS  ENFRENTADOS   APLICANDO  O  QUE  APRENDEMOS   GANHOS  DE  PERFORMANCE   CONCLUSÃO   BREVE  HISTÓRIA  DA  EASYTAXI  (TIMELINE)  
  • 3.
    A brilhante idéia BREVEHISTÓRIA DA EASYTAXI - TIMELINE •  Idealizada em Junho de 2011 •  Idéia Inicial: Tracking de transporte coletivo (um dos sócios sempre perdia o horário do ônibus…) •  Até que uma idéia um “pouco” melhor apareceu: “E se fosse com TAXIS?” 3
  • 4.
    INÍCIO DAS OPERAÇÕES BREVEHISTÓRIA DA EASYTAXI - TIMELINE •  Presente apenas no Rio de Janeiro •  “Quick and Dirty”: Soluções rápidas, como toda startup gosta (e suas óbvias consequências) •  Base de usuários pequena naquele momento, logo, “por enquanto, não precisamos nos preocupar” 4
  • 5.
    INÍCIO DAS OPERAÇÕES- TECNOLOGIA BREVE HISTÓRIA DA EASYTAXI - TIMELINE •  API SOAP (overhead desnecessário de dados onde cada byte importa) •  Chamadas SOAP mapeadas para um único script PHP •  Sem testes e nem build automatizados •  Banco de dados relacional, schema inflexível. 5
  • 6.
    INTEGRANDO-SE À ROCKET:NOVOS E MAIORES DESAFIOS BREVE HISTÓRIA DA EASYTAXI - TIMELINE •  Expansão Nacional e em seguida, Global •  Tecnologia mais eficiente para suportar o presente e o futuro do projeto: •  API RESTful: Menos é mais •  Todos os endpoints testados •  Build automatizado com tasks de QA •  Deadline: 2 semanas Mas e MongoDB nessa história?
  • 7.
    AGENDA 7 MONGODB:  O  QUE  MOTIVOU  NOSSA  ESCOLHA?   PROBLEMAS  ENFRENTADOS   APLICANDO  O  QUE  APRENDEMOS   GANHOS  DE  PERFORMANCE   CONCLUSÃO   BREVE  HISTÓRIA  DA  EASYTAXI  (TIMELINE)  
  • 8.
    MONGODB: O QUEMOTIVOU NOSSA ESCOLHA? 8 CLIENTES   TAXISTAS   §  Write Concerns + Bom desempenho nas leituras: API veloz §  GIS facilitado: 2d Index + GeoNear { geoNear : ”taxi_drivers”, near : [passenger_x, passenger_y], maxDistance: maxKmToRadius, spherical: true } §  $db->drivers->find: Object Mapper Feelings (mas sem o overhead de um OM) §  Múltiplas cidades ao redor do mundo, múltiplos schemas, uma só coleção (Schema-free WINS) §  FIM DAS MIGRATIONS!
  • 9.
    AGENDA 9 MONGODB:  O  QUE  MOTIVOU  NOSSA  ESCOLHA?   PROBLEMAS  ENFRENTADOS   APLICANDO  O  QUE  APRENDEMOS   GANHOS  DE  PERFORMANCE   CONCLUSÃO   BREVE  HISTÓRIA  DA  EASYTAXI  (TIMELINE)  
  • 10.
    Heranças do UniversoRelacional: PROBLEMAS ENFRENTADOS 10 •  #FAIL 1: Arquitetando a persistência como antigamente: mais consultas do que o necessário •  #FAIL 2: Falta de atenção nos índices (que agora são definidos no código, antes de serem usados). •  #FAIL 3: Alta-disponibilidade no mongo: alguns detalhes deixados para trás EFEITOS: Lentidão no Backoffice, na extração de relatórios, afetando o tempo de resposta da API.
  • 11.
    AGENDA 11 MONGODB:  O  QUE  MOTIVOU  NOSSA  ESCOLHA?   PROBLEMAS  ENFRENTADOS   APLICANDO  O  QUE  APRENDEMOS   GANHOS  DE  PERFORMANCE   CONCLUSÃO   BREVE  HISTÓRIA  DA  EASYTAXI  (TIMELINE)  
  • 12.
    APLICANDO O QUEAPRENDEMOS 12 §  REMODELAGEM TOTAL DAS COLLECTIONS §  SERVER HIDDEN PARA RELATÓRIOS NO REPLICA SET §  ANÁLISE DE TODAS AS QUERIES E INDEXES
  • 13.
    AGENDA 13 MONGODB:  O  QUE  MOTIVOU  NOSSA  ESCOLHA?   PROBLEMAS  ENFRENTADOS   APLICANDO  O  QUE  APRENDEMOS   GANHOS  DE  PERFORMANCE   CONCLUSÃO   BREVE  HISTÓRIA  DA  EASYTAXI  (TIMELINE)  
  • 14.
    GANHOS DE PERFORMANCE 14 § 12 MIL ACESSOS POR MINUTO - CHEGANDO A 30 MIL §  TEMPO DE RESPOSTA MENOR QUE 30 MILISEGUNDOS §  QUERIES COM MENOS 10 MILESEGUNDOS EM MÉDIA
  • 15.
  • 16.
  • 17.
  • 18.
    AGENDA 18 MONGODB:  O  QUE  MOTIVOU  NOSSA  ESCOLHA?   PROBLEMAS  ENFRENTADOS   APLICANDO  O  QUE  APRENDEMOS   GANHOS  DE  PERFORMANCE   CONCLUSÃO   BREVE  HISTÓRIA  DA  EASYTAXI  (TIMELINE)  
  • 19.
    OBRIGADO  PELA  PRESENÇA!     E  que  tal  voltar  de  EasyTaxi?!     #justsaying   Vinicius  Gracia:  viniciusgracia@easytaxi.com.br   Yuri  Teixeira:  @yuriteixeira