O documento discute arquitetura de microserviços, comparando-a com arquitetura monolítica. Aborda definições, benefícios, desafios e padrões de projeto de microserviços, incluindo deployment e monitoramento.
Objetivos
Ao final destaunidade você irá:
• Compreender uma arquitetura utilizando Microservices
• Comparar uma arquitetura Monolítica vs Microservices
• Entender os principais benefícios e problemas
relacionados
• Compreender os desafios enfrentados por essa
arquitetura
• Entender alguns design patterns utilizados nessa
arquitetura
• Identificar as práticas necessárias para deployment
3.
Agenda
• Definição
• ArquiteturaMonolítica
• Arquitetura Microservices
• Principais Desafios
• Deployment e Monitoramento
• Design Patterns
Microservices
• O quesão Microservices?
• É apenas “hype” ?
• Estilo de arquitetura?
• Alternativa ao modelo “monolito" tradicional?
• Modelo de arquitetura SOA?
6.
Microservices
• Características
• Pequenos
•Deployment interdependentes
• Independente de tecnologia
• Independente de infra-estrutura
"Small independent component with well-
defined boundaries that’s doing one thing, but
doing it well"
7.
Definição
"Decomposição de umaúnica aplicação em um conjunto de
pequenos serviços…
(diferentemente de uma aplicação monolítica)
…cada um rodando como um processo independente…
(não meramente módulos, mas unidades de execução)
…intercomunicando-se via protocolos abertos…
(HTTP/REST, messaging, eventos)
…com possibilidade de separação de escrita, escalabilidade,
distribuição e manutenção…
(potencialmente em diferentes linguagens de programação)
… que podem ser independentemente substituídos e atualizados"
8.
Microservices
• O queNÃO são:
• A mesma coisa que SOA
• Arquitetura SOA realiza a integração de diferentes aplicações
enterprise
• Microservices são relacionados a decomposição de
aplicações monolíticas
• Finalmente a bala de prata
• Microservices envolve riscos e grandes desafios
• Novo modelo de arquitetura
• Você pode estar utilizando microservices hoje e não sabe
9.
Use Cases
• Twittermudou de Ruby/Rails monolítico para
Microservices
• Facebook mudou de PHP monolítico para
Microservices
• Netflix mudou de Java monolítico para
Microservices
10.
Monolito
• Único módulode aplicação
executável
• Deve ser escrito na mesma
linguagem de programação
• Java EE server + EAR
• Modularidade baseada na
linguagem ou plataforma
escolhida
• EJB, OSGi, CORBA, DCOM+
• Escalabilidade replicando o
monolito "inteiro"
Monolito
• Vantagens
• Facilidadede desenvolvimento
• Java EE server + EAR
• Facilidade para testabilidade
• Pode ser implementado end-to-end testing via UI (Selenium)
• Simplicidade de deployment
• Geralmente uma única cópia da aplicação empacotada no
server
• Facilidade para escalabilidade horizontal
• Topologia simplificada, usando um simples load balancer
• Gerenciamento simplificado
16.
Monolito
• Desvantagens
• Linguageme/ou framework lock
• Barreira para adoção de novas tecnologias
• Maior crescimento == maior complexidade
• Acoplamento generalizado
• Maior tempo ciclo “start / redeploy / stop”
• Redeployment da aplicação inteira à cada atualização
• Prática continuous deployment torna-se difícil
• Escalabilidade e resiliência fragilizada
• Efeito “dominó”, um memory leak pode afetar toda a
aplicação
Arquitetura Microservices
• Componentizaçãovia Serviços
• Serviços são pequenos, inter-dependentes e com deployment
independente
• Não bloqueia uso de uma única linguagem, ou mesmo
framework
• Utilização de interfaces claras e simples
• Princípio responsabilidade única
20.
Arquitetura Microservices
• Comunicaçãoheterogênea
• HTTP, TCP, UDP, Messaging, etc.
• Payloads: JSON, BSON, XML, Protocol Buffers, etc.
• Comunicação via APIs
21.
Arquitetura Microservices
• Gerenciamentoe manutenção
• Diferentes times responsáveis por diferentes serviços
• Atualização e substituição independente
• Menores unidades == maior facilidade de compreensão
22.
Arquitetura Microservices
• Persistênciapoliglota
• Cada serviço define seu próprio modelo de persistência
• Nem sempre RDBMS é o melhor para TUDO
• Alguns problemas relacionados
• Como suportar transação? Como trabalhar com FK?
23.
Microservices
• Benefícios
• Baixoacoplamento
• Maior resiliência e flexibilidade
• Aumenta escalabilidade
• Promove maior reusabilidade
• Independência de tecnologia e/ou framework
• Facilita compreensão e manutenção
• Foco em apenas pequenos módulos (serviços)
• Flexibiliza deployment
• Atualização pode ser realizada por serviço
24.
Arquitetura Microservices
• Comoquebrar o Monolito em Microservices?
• Consideração principal: funcionalidade de negócio
• Entidades de negócio (catálogo, cliente, produto)
• Verbos e regras de negócio (consulta, entrega, checkout)
• Princípio da responsabilidade única
• https://en.wikipedia.org/wiki/Single_responsibility_principle
• Bounded context (DDD)
• https://martinfowler.com/bliki/BoundedContext.html
25.
Atividade
• Modele umaarquitetura de Microservices
• Defina os possíveis serviços e suas dependências
• Defina o modelo de persistência necessário para cada serviço, se
necessário
• Defina a camada de user interface
• DICA: Utilize uma ferramenta UML para auxiliar
• Perguntas
• Quais os prós e contras no uso de uma arquitetura de
Microservices vs Monolítica?
• Quais os principais desafios à serem enfrentados?
26.
12 Factor Applications
1.Codebase
2. Dependencies
3. Config
4. Backend Services
5. Build, Release, Run
6. Processess
7. Port Binding
8. Concurrency
9. Disposability
10.Dev/Pro Parity
11.Logs
12.Admin
“Methodology for building SaaS apps that has clean contract with
underlying operating system, enable continuous integration, deployment
with maximum agility, significant scale up capability, and independent
of programming language and backend services"
27.
Microservices
• Quais osprincipais desafios?
• Gerenciamento de configuração
• Registro e descoberta dos serviços
• Roteamento
• Balanceamento de carga
• Tolerância à falhas
• Monitoramento
Demais Desafios
• Complexidadena camada de infra-estrutura
• Falácias da computação distribuída
• Serviços podem ficar indisponíveis
• Não acontece isso no universo monolítico
• Chamadas remotas “podem” ser custosas
• Contexto transacional não ACID
• Funcionalidades espalhadas em diversos serviços
• Gestão de dependências e versionamento dos
serviços
• Refactoring das fronteiras entre os serviços
35.
Falácias da ComputaçãoDistribuída
• A rede é 100% confiável
• Zero latência
• A largura de banda é infinita
• A rede é segura
• Topologia de rede não muda
• Existe um administrador
• Custo de transporte é zero
• Ambiente de rede é homogêneo
Messaging Pattern
• Comunicaçãoassíncrona entre os microservices
• Melhora a confiabilidade da arquitetura
• Promove o desacoplamento entre os serviços
38.
Access Token
• Modelostateless e essencialmente distribuído
• Centraliza o processo de autenticação e autorização
39.
Circuit Breaker
• Implementaçãode uma estratégia de fallback para caso o
serviço destino esteja indisponível
• Promove resiliência com tolerância à falhas
• Evita o caos generalizado na arquitetura
40.
Proxy
• Um únicoponto de entrada para a arquitetura distribuída
• Evita o problema de CORS
• Facilita o registro para utilização no frontend
41.
API Gateway
• Requisiçõespodem ser apenas repassadas, ou
modificadas
• Pode implementar uma camada de serviços assíncrona
“Single entry point for the service clients”
42.
Shared Data
• Algunsserviços necessitam compartilhar dados entre si
• Pode ser utilizado via cache distribuído
• Não deve ser utilizado como premissa, mas sim como
exceção
43.
CQRS
• Separa aaplicação em duas partes, command (write) e
query (read)
• Promove o compartilhamento e a junção de dados
• Bastante utilizado em sistemas com requisitos de
relatórios
44.
Log Aggregation
• Nserviços == N logs
• Agregação e padronização de todos os logs gerados afim
de uma visualização centralizada
45.
Distributed Tracing
• Ajudaa identificar aonde aconteceu o problema
• Service A > Service B > Service C
• Associa um request ID para toda a cadeia de execução
• Facilita o debugging e análise de performance do sistema
Atividade
• Revise suaarquitetura de Microservices
• É necessário a incorporação de algum outro serviço?
• Como implementar segurança?
• Como será realizado a estratégia de deployment?
• Será utilizada alguma ferramenta para agregação de logs e/ou tracing?
• Existe algum processo de negócio bloqueante e/ou com alto volume de
processamento?
• Como será endereçado o requisito de resiliência?
57.
Conclusões
• Microservices éum modelo de design de arquitetura
• Arquitetura de Microservices possui vantagens e
desvantagens comparadas ao Monolítico
• Existem grandes desafios na adoção de uma
arquitetura de Microservices
• Containers são uma ótima opção para deployment de
Microservices
• Elasticidade, orquestração, flexibilidade, monitoramento
são necessidades importantes aos Microservices
58.
Revisão
Nessa unidade vocêteve a oportunidade de:
• Compreender uma arquitetura utilizando Microservices
• Comparar uma arquitetura Monolítica vs Microservices
• Entender os principais benefícios e problemas
relacionados
• Compreender os desafios enfrentados por essa
arquitetura
• Entender alguns design patterns utilizados nessa
arquitetura
• Identificar as práticas necessárias para deployment