40
Sistemas Distribuídos Utilizando Microserviços e AWS Jonas Silveira – [email protected] AWS Campinas 08/07/2017

Sistemas Distribuídos Utilizando Microserviços e AWS

Embed Size (px)

Citation preview

Page 1: Sistemas Distribuídos Utilizando Microserviços e AWS

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

Agenda

• Cloud

• Sistema monolítico

• Microserviços

• Sistemas distribuídos

• Refatoração

Page 3: Sistemas Distribuídos Utilizando Microserviços e AWS

O autor

Jonas Silveira

[email protected]

https://www.linkedin.com/in/jonassilveira

Page 4: Sistemas Distribuídos Utilizando Microserviços e AWS
Page 5: Sistemas Distribuídos Utilizando Microserviços e AWS

Por que Nuvem?

Con. 1

Con. 2

Datacenter Datacenter 2

Page 6: Sistemas Distribuídos Utilizando Microserviços e AWS

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

e-mail

Page 7: Sistemas Distribuídos Utilizando Microserviços e AWS

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

Por que não fatiar o grande sistema em sistemas

menores?

Page 9: Sistemas Distribuídos Utilizando Microserviços e AWS

A internet é um grande

sistema distribuído

Page 10: Sistemas Distribuídos Utilizando Microserviços e AWS

Definição

Microserviços são serviços pequenos, autônomos, que trabalham juntos.

Page 11: Sistemas Distribuídos Utilizando Microserviços e AWS

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

e-mail

Page 12: Sistemas Distribuídos Utilizando Microserviços e AWS

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

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

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

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

Exemplo de Arquitetura

Page 17: Sistemas Distribuídos Utilizando Microserviços e AWS

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

API Gateway

Page 19: Sistemas Distribuídos Utilizando Microserviços e AWS

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

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

e-mail

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

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

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

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

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

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

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

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

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

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

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

e-mail

Page 31: Sistemas Distribuídos Utilizando Microserviços e AWS

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

Monitoramento

• Use o CloudWatch para monitorar as falhas.

• Importante monitorar o tempo de resposta.

Page 33: Sistemas Distribuídos Utilizando Microserviços e AWS

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

Coexistência de Versões

Page 35: Sistemas Distribuídos Utilizando Microserviços e AWS

IAM RoleIAM

Role facilita concessãoae acessos aos recursos

AWS

Use sempre!

Page 36: Sistemas Distribuídos Utilizando Microserviços e AWS

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

Refatoração - Strangler

Page 38: Sistemas Distribuídos Utilizando Microserviços e AWS

Orientação a custo

Data Science

Transacional

Page 39: Sistemas Distribuídos Utilizando Microserviços e AWS

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

Dúvidas?