Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

50
Erros que cometemos na arquitetura de microserviços e a evolução para Containers Especialistas em Retenção BRUNO ANDRADE ALVES

Transcript of Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

Page 1: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

Erros que cometemos na arquitetura de microserviços e a

evolução para Containers

Especialistas em Retenção

BRUNO ANDRADE ALVES

Page 2: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

“Empreender é saltar de paraquedas e costurá-lo durante a queda"

Page 3: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

A Dito começou construindo aplicativos para Orkut e depois para o Facebook.

Page 4: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 5: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

“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”

Page 6: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 7: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 8: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 9: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 10: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

UM TIME DE FERAs

FAZEDOR

ÉTICA

RESULTADOS

ALEGRIA e APRENDER

F

E

R

A

Page 11: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 12: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

VOLTANDO AO COMEÇO DE 2012

Page 13: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

SERVIÇOS

Analytics Badge Ranking Login

GMEvent Share

Dashboard

Page 14: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 15: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

ARQUITETURA NO AR

Page 16: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

PROBLEMAS = 0

Page 17: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

ARQUITETURA NO AR

Page 18: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

PROBLEMÔMETRO

Page 19: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 20: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 21: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 22: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

Alto AcoplamentoLentidão na comunicação entre módulos

Criação de estados

4

Serviços com muitas regras de negócio

Page 23: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 24: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 25: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 26: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

Amigo, você sabe me dizer onde podemos salvar os dados desse

novo serviço?

Rapaz,

Salva no Redis Ipiranga!

Page 27: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 28: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 29: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 30: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 31: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 32: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 33: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 34: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

ARQUITETURA PERFEITA

"Applications built from microservices aim to be as decoupled and

as cohesive as possible"

Martin Fowler

Page 35: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

ARQUITETURA PERFEITA

"Set of very small, granular, independent collaborating services."

Benjamin Wooton

Page 36: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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.

Page 37: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 38: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 39: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 40: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 41: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 42: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 43: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 44: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 45: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 46: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 47: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 48: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

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

Page 49: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers
Page 50: Erros que cometemos na arquitetura de micro-serviços e a evolução para Containers

OBRIGADO!

Especialistas em Retenção

BRUNO ANDRADE ALVES [email protected]

www.dito.com.br facebook.com/ditointernet