Workshop Microservices
Definindo uma Arquitetura com
Microservices
Objetivos
Ao final desta unidade 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
Agenda
• Definição
• Arquitetura Monolítica
• Arquitetura Microservices
• Principais Desafios
• Deployment e Monitoramento
• Design Patterns
Evolução Arquitetural
Microservices
• O que são Microservices?
• É apenas “hype” ?
• Estilo de arquitetura?
• Alternativa ao modelo “monolito" tradicional?
• Modelo de arquitetura SOA?
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"
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"
Microservices
• O que NÃ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
Use Cases
• Twitter mudou de Ruby/Rails monolítico para
Microservices
• Facebook mudou de PHP monolítico para
Microservices
• Netflix mudou de Java monolítico para
Microservices
Monolito
• Único módulo de 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"
Arquitetura Monolítica
• Modelo de desenvolvimento em camadas MVC
Arquitetura Monolítica
• Divisão da aplicação em módulos internos, por meio de
classes, pacotes, JAR’s, etc
Arquitetura Monolítica
• Novos clientes UI vão sendo adicionados e plugados
diretamente nos módulos de negócio
Arquitetura Monolítica
• Novas integrações e novos modelos de persistência
surgem e são incorporados sob-demanda
Monolito
• Vantagens
• Facilidade de 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
Monolito
• Desvantagens
• Linguagem e/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
Monolito vs Microservices
Arquitetura Microservices
Arquitetura Microservices
• Componentização via 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
Arquitetura Microservices
• Comunicação heterogênea
• HTTP, TCP, UDP, Messaging, etc.
• Payloads: JSON, BSON, XML, Protocol Buffers, etc.
• Comunicação via APIs
Arquitetura Microservices
• Gerenciamento e manutenção
• Diferentes times responsáveis por diferentes serviços
• Atualização e substituição independente
• Menores unidades == maior facilidade de compreensão
Arquitetura Microservices
• Persistência poliglota
• 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?
Microservices
• Benefícios
• Baixo acoplamento
• 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
Arquitetura Microservices
• Como quebrar 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
Atividade
• Modele uma arquitetura 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?
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"
Microservices
• Quais os principais desafios?
• Gerenciamento de configuração
• Registro e descoberta dos serviços
• Roteamento
• Balanceamento de carga
• Tolerância à falhas
• Monitoramento
Gerenciamento de Configuração
Registro e Descoberta de Serviços
Balanceamento de Carga
Tolerância à Falhas
Roteamento
Segurança
Closed ClosedOpen
Autenticação Autorização
Demais Desafios
• Complexidade na 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
Falácias da Computação Distribuí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
Microservices Design Patterns
Messaging Pattern
• Comunicação assíncrona entre os microservices
• Melhora a confiabilidade da arquitetura
• Promove o desacoplamento entre os serviços
Access Token
• Modelo stateless e essencialmente distribuído
• Centraliza o processo de autenticação e autorização
Circuit Breaker
• Implementação de 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
Proxy
• Um único ponto de entrada para a arquitetura distribuída
• Evita o problema de CORS
• Facilita o registro para utilização no frontend
API Gateway
• Requisições podem ser apenas repassadas, ou
modificadas
• Pode implementar uma camada de serviços assíncrona
“Single entry point for the service clients”
Shared Data
• Alguns serviç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
CQRS
• Separa a aplicaçã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
Log Aggregation
• N serviços == N logs
• Agregação e padronização de todos os logs gerados afim
de uma visualização centralizada
Distributed Tracing
• Ajuda a 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
Deployment
Deployment
• Multiple services per host
Deployment
• Service instances per VM
Deployment
• Service instances per Container
Containers vs Virtualization
Virtualization Container
• Minutos para iniciar uma VM, e… segundos para iniciar um
container
Deployment
Monolito Microservice
Auto Scaling
• Capacidade de aumentar e diminuir a escalabilidade
automaticamente
Orquestração
• Gerenciamento da comunicação dos serviços em containers
diferentes
Deployment vs Environments
• Múltiplos ambientes diferentes de execução
Ferramentas
AWS ECS
Atividade
• Revise sua arquitetura 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?
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
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
Referências
• https://en.wikipedia.org/wiki/Monolithic_application
• http://microservices.io/patterns/monolithic.html
• https://martinfowler.com/articles/microservices.html
• http://microservices.io/patterns/microservices.html
• https://martinfowler.com/bliki/MonolithFirst.html
• https://martinfowler.com/articles/microservice-trade-offs.html
• http://cloudacademy.com/blog/microservices-architecture-
challenge-advantage-drawback/
• https://blog.risingstack.com/how-enterprises-benefit-from-
microservices-architectures/
• https://www.nginx.com/blog/deploying-microservices/
• https://12factor.net/

Workshop Microservices - Arquitetura Microservices

  • 1.
    Workshop Microservices Definindo umaArquitetura com Microservices
  • 2.
    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
  • 4.
  • 5.
    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"
  • 11.
    Arquitetura Monolítica • Modelode desenvolvimento em camadas MVC
  • 12.
    Arquitetura Monolítica • Divisãoda aplicação em módulos internos, por meio de classes, pacotes, JAR’s, etc
  • 13.
    Arquitetura Monolítica • Novosclientes UI vão sendo adicionados e plugados diretamente nos módulos de negócio
  • 14.
    Arquitetura Monolítica • Novasintegrações e novos modelos de persistência surgem e são incorporados sob-demanda
  • 15.
    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
  • 17.
  • 18.
  • 19.
    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
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
    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
  • 36.
  • 37.
    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
  • 46.
  • 47.
  • 48.
  • 49.
  • 50.
    Containers vs Virtualization VirtualizationContainer • Minutos para iniciar uma VM, e… segundos para iniciar um container
  • 51.
  • 52.
    Auto Scaling • Capacidadede aumentar e diminuir a escalabilidade automaticamente
  • 53.
    Orquestração • Gerenciamento dacomunicação dos serviços em containers diferentes
  • 54.
    Deployment vs Environments •Múltiplos ambientes diferentes de execução
  • 55.
  • 56.
    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
  • 59.
    Referências • https://en.wikipedia.org/wiki/Monolithic_application • http://microservices.io/patterns/monolithic.html •https://martinfowler.com/articles/microservices.html • http://microservices.io/patterns/microservices.html • https://martinfowler.com/bliki/MonolithFirst.html • https://martinfowler.com/articles/microservice-trade-offs.html • http://cloudacademy.com/blog/microservices-architecture- challenge-advantage-drawback/ • https://blog.risingstack.com/how-enterprises-benefit-from- microservices-architectures/ • https://www.nginx.com/blog/deploying-microservices/ • https://12factor.net/