escalando a 99taxis§ão qcon...apresentação renato freitas engenharia poli - usp...

27
Escalando a 99Taxis Lados obscuros de uma arquitetura distribuída

Upload: others

Post on 13-Jun-2020

1 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Escalando a 99Taxis Lados obscuros de uma arquitetura distribuída

Page 2: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Agenda● O que é 99Taxis● História da arquitetura● Arquitetura distribuida● O lado obscuro (problemas, erros)● Futuro● Q&A

Page 3: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Apresentação● Renato Freitas

○ Engenharia POLI - USP○ Empreendedorismo○ Ebah○ 99Taxis

● Giuliano Caliari○ Mestrado em engenharia de software POLI - USP○ Ciências da computação IME - USP○ 99Taxis

Page 4: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Contexto● 99Taxis● O que é● Como funciona

Page 5: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Contexto● Qual o tamanho da 99Taxis?

○ 300+ cidades○ 100k+ taxistas○ 3M+ usuários○ 1.5M+ corridas por mês

Page 6: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Principais requisitos● Tracking dos taxistas● Selecionar taxistas por localização● Mostrar infos

○ do taxista pro passageiro○ do passageiro pro taxista

Page 7: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Primeira versão● One man army● Monolito● Java● MySQL

Page 8: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Primeiras alterações● Primeira separação:

○ Oferta■ taxistas online

○ Demanda■ passageiros chamando táxi

○ Admin■ relatórios, tabelas, edição, etc

Page 9: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

"Segundas" Alterações● Paralelização● Mover fila do banco● Memória compartilhada

○ Memcached○ Redis

Page 10: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Novos requisitos● Pagamento eletrônico● Sistema corporativo● Promoções e parcerias

Page 11: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Desafios Tecnicos● Eleger o melhor taxista para um passageiro

○ Analisar dados realtime○ Redes 3G○ Serviços externos

● Horários / eventos de pico (é chuva?)● Eventos desordenados

Page 12: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Arquitetura antiga

APIAPIAPI

MySQL

APIAPIDrivers Admin

Page 13: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Banco de dados compartilhado

● Alterações no banco são perigosas● Duplicação de código● Dev pains● Admin afetando performance da API

○ banco de réplica => preocupação de lag● Muita escrita no banco (pos, calls)

○ Solução: redis, escrita em batch

Page 14: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Serviços

● Problema do monolito. Dividir e conquistar.● Pagamentos e Corporativo. Pq SOA?

○ Testar a idéia com MVPs○ Testar isoladamente○ Introduzir Scala (exp, java, funcional, so sexy)

● Consequencias○ Solução foi melhor que o esperado○ Mini-monolitos distribuidos

Page 15: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Serviços○ Preocupações de rede: latência, falha

■ 2.4Mb de resposta, 1.9s timeout■ Implementações gzip

○ Novos endpoints para informações novas○ Ninguém mais quer trabalhar no sistema antigo

● Futuro○ Separar tipos de acessos Web/API/Bg○ Separar serviços

Page 16: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Arquitetura

MySQL

Drivers

AdminAPI

Corporativo

PostgreSQL

Redis

Redis

PostgreSQL

Pagamentos

Core

Page 17: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Duplicação de informações

● Como arquitetar informações?● Corridas propagadas para novos sistemas● Motivações

○ Isolamento dos sistemas: proteger API○ Falta de monitoramento: quanto afetaria API○ API delicada: fazer o mínimo de alterações ○ Modelagem anterior complexa

Page 18: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Duplicação de informações

● Consequencias○ Alterações precisavam ser replicadas○ Inconsistência nos dados

■ Manipulações / Interpretações diferentes● Cada um resolve o seu

■ Relatórios não batiam■ Falta de confiança nos dados

Page 19: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Duplicação de informações

● Solução?○ Mapa da informação com abordagem de micro-

serviço○ Agregador de dados imutáveis ○ Testando para 1 unidade de informação

Page 20: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Deploys ainda complexos

● Melhor mas preocupações existem○ Cuidado com deploy com versões incompatíveis

■ Rollback muito mais complexo■ Solução: deploys passo-a-passo

○ Ordem dos sistemas pode ser relevante○ Garantir versão igual○ Evitar deploy com mais de 1 feature

● Alguns ainda quase manual (legado)

Page 21: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Debug e Monitoramento● Como monitorar as diversas máquinas?

○ Máquina fantasma● O que monitorar / logar?

○ Tempo em filas => Configuração do SQS

Page 22: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Debug e Monitoramento● New Relic e Splunk

○ Monitoramento/Logs individuais○ Rastrear em diversos sistemas○ Informações e formatação diferentes

● Splunk agregando todos os sistemas○ Mesma formatação e info nos logs

Page 23: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Diversos

● Temos sistemas mais simples mas com iteração complexa ○ "When we break up big things into small pieces we invariably push the

complexity to their interaction"- Michael Feathers

● Sistemas sem responsável● "Estilo" de código não padronizado

Page 24: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Diversos

● Ambiente de teste/staging complexos● Difícil testar entre serviços● Script para rolling deploy

● Conclusão: estamos em transição, ainda temos mini-monolitos

Page 25: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Arquitetura Atual

MySQL

Drivers

AdminAPICorporativo

PostgreSQL

Redis

Redis

PostgreSQL

PostgreSQL

PostgreSQL PostgreSQL

Pagamentos

Promoções

Financeiro Corridas

Core

Page 26: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Perguntas?Perguntas?

Page 27: Escalando a 99Taxis§ão QCon...Apresentação Renato Freitas Engenharia POLI - USP Empreendedorismo Ebah 99Taxis Giuliano Caliari ... Ambiente de teste/staging complexos Difícil

Trabalhe na [email protected]