O documento descreve a jornada da EasyTaxi com MongoDB, incluindo os desafios iniciais de adoção, como problemas de desempenho devido a falta de atenção aos índices e consultas desnecessárias. Após remodelar as coleções, adicionar índices e analisar queries, a EasyTaxi obteve ganhos significativos de performance, como 12 mil acessos por minuto e redução do tempo de resposta para menos de 30 milisegundos.
TDC Floripa (2017) - MicroServiços para Não StartUps
MongoDB at EasyTaxi: Challenges, Learning and Performance Gains
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
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
4. 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
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 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!
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 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.
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 QUE APRENDEMOS
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
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