![Page 1: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/1.jpg)
Sistemas Distribuídos Utilizando Microserviços e AWS
Jonas Silveira – [email protected] Campinas
08/07/2017
![Page 2: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/2.jpg)
Agenda
• Cloud
• Sistema monolítico
• Microserviços
• Sistemas distribuídos
• Refatoração
![Page 4: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/4.jpg)
![Page 5: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/5.jpg)
Por que Nuvem?
Con. 1
Con. 2
Datacenter Datacenter 2
![Page 6: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/6.jpg)
Abordagem Monolítica
Sistema
Banco de dados
Controle Usuários
Contas a Pagar
Contas a Receber
Emissão e Guarda da NFe
Cadastro Produtos
Cadastro Fornecedores
RelatóriosEnvio de
![Page 7: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/7.jpg)
Abordagem Monolítica
Prós
• Performático
• Fácil gerenciar
Contras• Preso a uma tecnologia• Alta curva de
aprendizado• Pouco reaproveitamento• Muitos programadores
“batem cabeça”• Falha em um
componente compromete o todo
• Dificuldades em escalar tudo: aplicação, equipe, base de dados, etc.
• Difícil escalar.
![Page 8: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/8.jpg)
Por que não fatiar o grande sistema em sistemas
menores?
![Page 9: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/9.jpg)
A internet é um grande
sistema distribuído
![Page 10: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/10.jpg)
Definição
Microserviços são serviços pequenos, autônomos, que trabalham juntos.
![Page 11: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/11.jpg)
Abordagem Microserviços
Controle Usuários
Contas a Pagar
Contas a Receber
Emissão e Guarda da NFe
Cadastro Produtos
Cadastro Fornecedores
RelatóriosEnvio de
![Page 12: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/12.jpg)
Tamanho
Tempo para ser reescrito: duas semanas.(Jon Eaves / RealEstate.com.au – Australia)
Equipes grandes o suficiente para serem alimentadas por duas pizzas grandes.
![Page 13: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/13.jpg)
Pontos importantes
• Serviços autônomos que trabalham juntos.
• Princípio da responsabilidade única.
• Comunicação através de chamadas de rede, para evitar forte acoplamento.
• Mudar um serviço e deployar sem mudar mais nada.
• KISS – keep it short and simple.
• DRY – Don’t repeat yourself não é um problema
![Page 14: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/14.jpg)
Benefícios
• Agnóstico à tecnologia (heterogeneidade).
• Resiliência - Problema não falha em cascada –isolamento.
• Escalabilidade – não precisa escalar tudo.
• Facilidade de deploy (monolito é tudo), risco reduzido.
• Gestão dos times.
• Reaproveitamento / Diferentes composições.
• Fácil substituição.
• Usar outros datacenteres.
![Page 15: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/15.jpg)
Deve-se definir padrões
• Monitoramento.
• Tipo de interface (HTTP/REST).
• Padrões de arquitetura (response codes 4xx, 5xx).
• Segurança.
![Page 16: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/16.jpg)
Exemplo de Arquitetura
![Page 17: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/17.jpg)
Exemplo de Arquitetura
Amazon EC2
Frontend
Classic Load Balancer
Auto Scaling
AmazonS3
Amazon API Gateway*
Amazon EC2
Auto Scaling
Lambda function
AmazonRDS
Backend
AmazonDynamoDB
Amazon CloudWatch
AmazonSNS
Internal Load Balancer
Amazon S3
bucket
![Page 18: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/18.jpg)
API Gateway
![Page 19: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/19.jpg)
API Gateway
• Facilita o gerenciamento do ciclo de vida das APIs.
• Pode ser usado com endpoint Lambda.
• Monitoramento via CloudWatch.
• Autorização AWS.
• Permite definir controles de threshold.
• Permite criar uma camada de cache integrada (cache de até 1 hora).
• Permite realizar modificações nas requisições e respostas.
Amazon API Gateway*
![Page 20: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/20.jpg)
Acoplamento
Sistema Monolítico
Controle Usuários
Contas a Pagar
Contas a Receber
Emissão e Guarda da NFe
Cadastro Produtos
Cadastro Fornecedores
RelatóriosEnvio de
Emissão e Guarda da NFe
Envio de e-mail
Contas a Receber
Forma como os diferentes componentes do sistema interagem.
![Page 21: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/21.jpg)
Acoplamento
• Quanto mais forte o acoplamento, pior.
• Se um componente falha, o processo quebra.
• Módulos do sistema (ou Microserviços) devem conversar entre si através da troca de mensagens.
• Desacoplamento favorece autonomia e escalabilidade.
![Page 22: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/22.jpg)
Filas
• Formas seguras de informar outro componente de que algo aconteceu e/ou precisa ser feito.
• Comunicação “assíncrona”.
• Cada fila pode ter um ou muitos “usuários”, favorecendo o paralelismo da aplicação.
• Reduz falhas do tipo “curto-circuito”.
• Permite “cadenciar” a execução.
![Page 23: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/23.jpg)
Filas – exemplo 1
1. Sistema emite a NFe
2. Sistema grava um item na fila de envio de e-mails
3. Sistema gera o contas a receber
Worker fica lendo a fila de envio de e-mails para realizar os disparos sempre que algum item for lançado lá.
Emissão e Guarda da NFe
Envio de e-mail
Contas a Receber
Worker
![Page 24: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/24.jpg)
SQS
• Pode ser FIFO ou randômica (best-effort).
• Garantia de entrega.
• Permite definir tempo de “invisibilidade” da mensagem.
• Até 256 Kb de texto por mensagem.
• Mensagens podem ser enviadas e lidas simultaneamente.
AmazonSQS
![Page 25: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/25.jpg)
Notificações
• Notificar um ou mais componentes de que algo aconteceu.
• Comunicação “assíncrona”.
• Modelo publicação / assinatura.
• Pode ser usado para notificar dispositivos móveis.
![Page 26: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/26.jpg)
Notificações - Exemplo
1. Sistema emite a NFe
2. Sistema emite a notificação “NFe emitida”
3. Assinantes da notificação são informados
Emissão e Guarda da NFe
Envio de e-mail
Contas a Receber
Autor principal (Emissão da NFe) não precisa saber quem são os assinantes da notificação.
![Page 27: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/27.jpg)
SNS
• Tipos de assinatura: Push móvel (dispositivos Apple, Google e Kindle Fire), HTTP/HTTPS, E-mail/E-mail-JSON, SMS, SQS, funções do AWS Lambda.
![Page 28: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/28.jpg)
Custos vs. Tipo de Instâncias
Jan Fev Mar Abr Mai Jun Jul Ago Set Out Nov Dez
Co
nsu
mo
Reserved
OnDemand
Spot
![Page 29: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/29.jpg)
Coesão
• Os módulos/componentes do sistema devem ser coerentes com o seu propósito.
• Um módulo não deve realizar papéis que deveriam ser exclusivos de outros módulos: ações, consultas, etc. deve-se solicitar o dado ou ação ao outro módulo.
• Se aplica também à camada de persistência de dados (banco de dados).
![Page 30: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/30.jpg)
Coesão - Exemplo
• Listagem de fornecedores: quem o cadastrou?
Sistema Monolítico
Banco de dados Monolítico
Controle Usuários
Contas a Pagar
Contas a Receber
Emissão e Guarda da NFe
Cadastro Produtos
Cadastro Fornecedores
RelatóriosEnvio de
![Page 31: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/31.jpg)
Segurança
• Uso o API Gateway para autenticar e os microserviços para autorizar.
• Não exponha todos os microserviços na web.
• Use um API gateway interno e um externo.
• Use APIs de composição para acessar APIs internas.
• Controle o threshold das requisições.
![Page 32: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/32.jpg)
Monitoramento
• Use o CloudWatch para monitorar as falhas.
• Importante monitorar o tempo de resposta.
![Page 33: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/33.jpg)
Versionamento
• MAJOR.MINOR.PATCH
Major Mudanças significativas que podem quebrar a aplicação.
MinorMudanças que não quebram a aplicação, normalmente são melhorias.
Patch Correções.
![Page 34: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/34.jpg)
Coexistência de Versões
![Page 35: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/35.jpg)
IAM RoleIAM
Role facilita concessãoae acessos aos recursos
AWS
Use sempre!
![Page 36: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/36.jpg)
Do monolito para microserviços
1. Construa uma estrutura básica: Autenticação, API Gateway, ferramentas de apoio (logs, etc.), automação e padrões de API.
2. Unificar mecanismos de autenticação: faça o velho usar o novo.
3. Identifique os componentes do sistema (aplicação e banco de dados).
4. Crie os novos microserviços e faça os componentes antigos do monolito usarem eles
5. Repita o item 4 até o monolito deixar de existir, restando apenas a interface do usuário.
Strangler
![Page 37: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/37.jpg)
Refatoração - Strangler
![Page 38: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/38.jpg)
Orientação a custo
Data Science
Transacional
![Page 39: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/39.jpg)
Resumo
• Aplicações distribuídas facilitam escalabilidade e são mais robustas, porém possui maior complexidade.
• Arquitetura é fator chave de sucesso.
• Ferramentas na AWS:• API Gateway• Cloudwatch• SNS• SQS• IAM• EC2 / ELB
![Page 40: Sistemas Distribuídos Utilizando Microserviços e AWS](https://reader031.vdocuments.com.br/reader031/viewer/2022030317/5a64ac767f8b9a8e568b50cf/html5/thumbnails/40.jpg)
Dúvidas?