Upload
brunoaalves
View
229
Download
1
Embed Size (px)
Citation preview
Erros que cometemos na arquitetura de microserviços e a
evolução para Containers
Especialistas em Retenção
BRUNO ANDRADE ALVES
“Empreender é saltar de paraquedas e costurá-lo durante a queda"
A Dito começou construindo aplicativos para Orkut e depois para o Facebook.
“Ingressos para o Rock in Rio se esgotam em menos de 15 minutos"
“Maior rede especializada em óculos escuros e acessórios da América latina"
“TIM, vice-líder do setor de telefonia com mais de 44 mihões de pessoas”
UM TIME DE FERAs
FAZEDOR
ÉTICA
RESULTADOS
ALEGRIA e APRENDER
F
E
R
A
VOLTANDO AO COMEÇO DE 2012
SERVIÇOS
Analytics Badge Ranking Login
GMEvent Share
Dashboard
Analytics Badge Ranking Login GM
MySQL Redis MySQLApenas o Analytics acessa o BANCO da plataforma
Apenas os módulos da plataforma acessam o Redis
O GM acessa seu
próprio BANCO
Todos os módulos da plataforma comunicam com o Analytics, e da mesma forma o
Analytics se comunica com todos os módulos da plataforma
Apenas o Social Share
Comunica com o GM
O GM se comunica
apenas com o Social Share
SERVIÇOS
Event Share
DashboardTodos os módulos da plataforma
comunicam com o Dashboard. O Dashboard também se comunica com os eles
ARQUITETURA NO AR
PROBLEMAS = 0
ARQUITETURA NO AR
PROBLEMÔMETRO
Usuários
Eventos
Analytics
Alto Acoplamento
1
Envia para indexação
Cria evento de login
Envia para indexação
Fluxo de criação de usuários
Usuários
Eventos
Analytics
Alto Acoplamento
2
Envia para indexação - Lentidão
Cria evento de loginLentidão
Envia para indexação Lentidão
Fluxo de criação de usuários Lentidão
Lentidão na comunicação entre módulos
Alto AcoplamentoLentidão na comunicação entre módulos
3
Usuários
Eventos
AnalyticsEnvia para indexação - Erro
Cria evento de login
Envia para indexação
Fluxo de criação de usuários
Dependência para criação de eventos
Criação de estados
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estados
4
Serviços com muitas regras de negócio
DASH Login
Event
Badge Ranking
GM Share
Notification Referal
5
Analytics
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócioMódulos morrem, código legado não
6
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
7
MySQL
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacional
Amigo, você sabe me dizer onde podemos salvar os dados desse
novo serviço?
Rapaz,
Salva no Redis Ipiranga!
8
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
9
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizados
10
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
11
Analytics Badge Ranking Login GM
MySQL Redis MySQLApenas o Analytics acessa o BANCO da plataforma
Apenas os módulos da plataforma acessam o Redis
O GM acessa seu
próprio BANCO
Todos os módulos da plataforma comunicam com o Analytics, e da mesma forma o Analytics se
comunica com todos os módulos da plataforma
Apenas o Social Share
Comunica com o GM
O GM se comunica apenas com o Social Share
Event Share
Dashboard
Todos os módulos da plataforma comunicam com o Dashboard. O Dashboard também se comunica
com os eles
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos Devs
12
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
13
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviços
14
Analytics
Usuários
MySQL Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
ARQUITETURA PERFEITA
"Applications built from microservices aim to be as decoupled and
as cohesive as possible"
Martin Fowler
ARQUITETURA PERFEITA
"Set of very small, granular, independent collaborating services."
Benjamin Wooton
Microservices - Not A Free Lunch
Fonte: http://highscalability.com/blog/2014/4/8/microservices-not-a-free-lunch.html
- Substantial DevOps Skills Required
- Distributed System Complexity
- It can be difficult to recreate environments in a consistent way for either manual or automated testing.
15
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
14
Containerização dos serviços
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
12
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
10
DASH Login
Search Apps
Analytics Badge
sAnalytics CC
GM Share
Referral AUTH
Event
API
Ranking
Hooks
Notification
Stats
Micro serviços
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
8
DASH Login
Search Apps
Analytics Badge
sAnalytics CC
GM Share
Referral AUTH
Event
API
Ranking
Hooks
Notification
Stats
Micro serviços
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow QueriesDificuldade de Onboarding de novos Devs
Equipe enxutaDificuldade de gerenciar diversos serviços
Desenvolvimento duplicadoQuebra de paradigmas
3
DASH Login
Search Apps
Analytics Badge
sAnalytics CC
GM Share
Referral AUTH
Event
API
Ranking
Hooks
Notification
Stats
Micro serviços
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócioMódulos morrem, código legado não
Difícil atualização de bibliotecasCrescimento sem fim do banco relacional
Elevado consumo de memóriaDifícil limpar dados não utilizados
Difícil identificar origem de Slow QueriesDificuldade de Onboarding de novos Devs
Equipe enxutaDificuldade de gerenciar diversos serviços
Desenvolvimento duplicadoQuebra de paradigmas
2
DASH Login
Analytics Badge
Event
Ranking
Micro serviços
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
2
Bibliotecas em 10 linguagens
C, C++, Java, Go, Node.js, Python, Ruby, Objective-C, PHP e C#.
Feita para ser o padrão do google
Alta performance Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
1
gRPC
Testes no Google Cloud Pub/Sub
0
30
60
90
120
0
7,5
15
22,5
30
gRPC HTTP1.1/JSON
Throughput 3x maior
Throughput (MB/s) per CPU
gRPC HTTP1.1/JSON
Throughput (MB/s)
Gasto de CPU 11x menor
JSON/HTTPVS
Fonte: https://cloud.google.com/blog/big-data/2016/03/announcing-grpc-alpha-for-google-cloud-pubsub
STEAM DE DADOS
PUB
Users Service
Events Service
Search Service
Certs Service
Monitoring Service
Analytics Service
Notification Service
Facebook service
Android Service
iOS Service
Email Service
SMS Service
SUB
Add-ons
Alto AcoplamentoLentidão na comunicação entre módulos
Criação de estadosServiços com muitas regras de negócio
Módulos morrem, código legado nãoDifícil atualização de bibliotecas
Crescimento sem fim do banco relacionalElevado consumo de memória
Difícil limpar dados não utilizadosDifícil identificar origem de Slow Queries
Dificuldade de Onboarding de novos DevsEquipe enxuta
Dificuldade de gerenciar diversos serviçosDesenvolvimento duplicado
Quebra de paradigmas
0
OBRIGADO!
Especialistas em Retenção
BRUNO ANDRADE ALVES [email protected]
www.dito.com.br facebook.com/ditointernet