© 2016, Amazon Web Services, Inc. or its Affiliates. All rights reserved.
Luiz Coutinho, Professional Services
Max Miorim, Nubank
Junho 2017
Deep Dive em Microserviços
e Docker
What to Expect from the Session
• Arquitetura de microserviços
• Alocação de tarefas
• Amazon ECS
• Aplicação do Twelve-Factor App com Amazon ECS
• Case Nubank --- Max Miorim
O que esperar da Sessão:
Arquitetura de microserviços
O que são microserviços?
“Um estilo de arquitetura de software onde aplicações
complexas são divididadas em partes pequenas e
independentes, comunicando-se entre si usando APIs de
linguagem agnóstica. Esses serviços são pequenos,
altamente desacoplados e focados em executar tarefas
pequenas, facilitando uma aproximação modular na
construção do sistema.” – Martin Fowler
O que são microserviços – Aproximação prática
Separação das preocupações
Modularidade, encapsulamento
Escalabilidade
Escalabilidade horizontal
Separação de tipos de tarefas
Virtualização e Elasticidade
Operação automatizada
Provisionamento on-demand
Propriedades da Arquitetura de Microserviços
Faz uma
coisa bem
Independente
Descentralizada
Caixa preta
Poliglota
Você fez, você cuida
Monolítico vs. Microserviços
webserver
.package
Interface
Ordem
Serviço Ordem
Serviço
Inventário
Serviço
Entrega
Interface
Ordem
Serviço
Inventário
Serviço
Ordem
Serviço
Entrega
Comunicação entre serviços
• Latência de rede
• Congestionamento ou falha em algum serviço
• Erro na lógica ou processo de escalabilidade
Erro em cascata
Diagrama Arquitetura de microserviços
Orquestração de Serviços
https://github.com/Netflix/Hystrix
• Media Encoding Experimentation
• Digital Watermarking
Netflix
Orquestração de Tarefas
https://netflix.github.io/conductor
Porquê Amazon ECS
• Serviço elástico totalmente gerenciado – Você
não precisa executar nada e sua arquitetura
escala conforme seus microserviços aumentam
• Estado compartilhado e distribuição otimista
• Integração com o CloudWatch para
monitoramento e log
• Integração com os serviços Code* para
integração e entrega contínua (CI/CD)
Distribuição de tarefas no ECS – Escolha do Agendador
Execução em lotes
(tarefas)
ECS task scheduler
Executa tarefas uma vez
Tarefas em lote
RunTask (random)
StartTask (placed)
Aplicações persistentes
(serviços)
ECS service scheduler
Health check
Scale-up e scale-down
Distribuição por AZ
Agrupamento de containers
Amazon ECS: Under the Hood
ALB ALB
AZ 1 AZ 2
user / scheduler
Exemplo de distribuição de tarefas
g2.2xlarge t2.small t2.micro t2.medium
t2.medium t2.small g2.2xlarge t2.small
us-east-1aus-east-1d
g2.2xlarge t2.medium
t2.micro t2.small
us-east-1c
Distribuição: Espalhamento nas AZs
g2.2xlarge t2.small g2.2xlarge g2.2xlarge
Distribuição: Por tipo de instância
g2.2xlarge t2.small t2.micro t2.medium
t2.medium t2.small g2.2xlarge
t2.small
t2.small t2.medium
us-east-1aus-east-1d
Distribuição: Tipo e AZ das instâncias base
Definição de grupos de afinidade
g2.2xlarge t2.small t2.micro t2.medium
t2.medium t2.small g2.2xlarge t2.small
us-east-1aus-east-1d
g2.2xlarge t2.medium
t2.micro t2.small
us-east-1c
Distribuição: Afinidade e anti-afinidade
t2.medium t2.small t2.small
us-east-1aus-east-1d
t2.medium t2.micro t2.small
us-east-1c
Distribuição: Multiplos serviços em um Cluster
t2.medium g2.2xlarge t2.micro t2.small
t2.small t2.small g2.2xlarge t2.small
t2.small t2.small
g2.2xlarge t2.small
Distribuição: Serviços – Instâncias Distintas
Aplicação do Twelve-Factor App
com Amazon ECS
Arquiteturas de Referência
The Twelve-Factor App
1. Base de código
2. Dependências
3. Configuração
4. Serviços de Backup
5. Build, Release, Run
6. Processos
7. Mapeamento de
Portas
8. Concorrência
9. Descartabilidade
10. Paridade Dev/Prod
11. Logs
12. Processos admin
https://12factor.net/
Arquiteturas de Referência
Exemplo: Arquitetura de Microserviços com ECS
Amazon
ECR
Amazon
RDS
Application Load
Balancer
ECS Cluster
ECS Cluster
IAM
Amazon API
Gateway*
Amazon
Route 53
Amazon CloudWatch
Escalabilidade Automática
Publish metrics
Auto Scaling ECS service
Availability
Zone A
Availability
Zone B
TASK A
Add/Remove ECS
tasks
TASK C
TASK BScaling Policies
Amazon
CloudWatch
Amazon ECS
Application
Load Balancer
IAM Roles para Tarefas
ECS Cluster
EC2 Instance EC2 Instance
TASK A
TASK B
TASK B
Amazon
DynamoDB
Amazon
S3
Deployment Contínuo
AWS
CodeCommit AWS
CodePipeline
AWS
CodeBuild
Amazon
ECR
Amazon
ECS
instance
Spot
Instance
AWS
CloudFormation
1. Commit
Code
2. Trigger
Pipeline
3.Build
Artifact
5.Update
Stack
6. Update Service
4. Push Image
Blue-Green Deployments
TaskTask
Route 53
record set
with
weighted
routing
policy
0%
100%
Gerenciamento de chaves privadas
•prod.app1.db-pass
•general.license-code
•prod.app2.user-name
ECS Cluster
EC2 Instance EC2 Instance
TASK A
TASK B
TASK B
EC2 System Manager –
Parameter Store
Service Discovery com Route 53 e Application
Load Balancers (ALB)
Application Load
Balancer
i-aaa i-bbb i-ccc
i-aaa i-bbb i-ccc
oAuth Target Group
8080 8081
Portal Target Group
Weather Target Group
8000 8001 8002
8080
Amazon
Route 53
ECS Cluster
mydomain.com
mydomain.com mydomain.com/weather
mydomain.com/auth
Consumindo eventos para Service Discovery
app1-tst  10.1.0.11
db1-tst  10.1.0.14
app2  10.1.0.16
db2  10.1.0.18
my-app  10.1.0.20
websrv1 10.1.0.1
websrv2 10.1.0.2
websrv3 10.1.0.4
app-dev1 10.1.0.9
app-dev2 10.1.0.5
app-dev3 10.1.0.8
db-dev 10.1.0.19
Governança: AWS Service Catalog
Organizations Developers
Control
Standardization
Governance
Agility
Self-service
Time to market
Creates portfolio
Adds constraints and grant access
1
4
5
Administrator
Portfolio
Users
Browse Products
6Launch Products
Creates
product3Authors template2
Product
X
Product
Y
Product
Z
7
Deploys
stacks
Notifications
Notifications
8
8
Governança: AWS Service Catalog
Construa Aprenda
Experimente!
Implemente
Obrigado!
Max Miorim
Microserviços e
Docker no Nubank
Infraestrutura dos serviços
Infraestrutura dos serviços
45
Infraestrutura dos serviços: visão geral
• Arquitetura típica de serviços na AWS:
•ELBs, ASGs, SGs, IAM Roles, etc
• Usamos o CloudFormation sempre que possível
Infraestrutura dos serviços
46
Infraestrutura dos serviços: containers
• Todos os serviços rodam em containers
• Apenas um container de um serviço por instância
• Todas instâncias rodam CoreOS Stable
Infraestrutura dos serviços
47
Infraestrutura Imutável
• Toda a nossa infraestrutura é imutável
• Detalhes em https://sou.nu/infraestrutura-imutavel
Build e deploy
Build e deploy
49
Nosso CI faz todo o trabalho
• Usamos o GoCD, detalhes em https://gocd.io
• Cada serviço tem uma pipeline, que faz o build, testa,
coloca tags e manda para o quay.io
• Assim que publicadas no registry, as imagens são
enviadas para um ambiente de teste end-to-end (e2e)
Build e deploy
50
Blue-green deployments
• Infraestrutura idêntica para blue e green
• Ambas versões rodam em paralelo
• Se a versão nova está OK, desliga a anterior
• Senão, desliga a versão nova e falha a pipeline
Configuração
Configuração
52
Variável de ambiente
•Usamos apenas uma variável, valor é JSON
•É a principal fonte de configurações
•Geramos no CloudFormation (UserData)
Configuração
53
Configuração dinâmica
•Alguns serviços precisam de configuração dinâmica
•Chave/valor no DynamoDB ou arquivo no S3
•Carregados pelo próprio serviço periodicamente ou
na inicialização
Configuração
54
Senhas, chaves e dados sensíveis
•São obtidos pela instância quando o serviço inicia
•Um serviço não pode acessar secrets de outro
•Valores são persistidos em memória apenas
Debugging e operações
Debugging e operações
56
Logs
•Logs de aplicação são enviados para o Splunk
•Logs de inicialização de um serviço são enviados
para o STDOUT (motivos históricos)
•Usamos o journalctl para ler, quando necessário
•Também mandamos exceções para o sentry.io
Debugging e operações
57
SSH
• Em horários de pico (de dias normais), temos cerca
de 1000 instâncias rodando
•Ferramentas internas facilitam coisas como ssh
•Nomes/endereços são previsíveis; automação fácil
Ah, estamos contratando! https://sou.nu/vagasnu
Obrigado!
Ainda não tem o App oficial do
AWS Summit São Paulo?
http://amzn.to/2rOcsVy
Não deixe de avaliar as sessões no app!

Deep dive com Microserviços e Docker