SlideShare uma empresa Scribd logo
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/

Mais conteúdo relacionado

Mais procurados

Consul: Service Mesh for Microservices
Consul: Service Mesh for MicroservicesConsul: Service Mesh for Microservices
Consul: Service Mesh for Microservices
ArmonDadgar
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Rodrigo Cândido da Silva
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
Amazon Web Services
 
What is Spinnaker? Spinnaker tutorial
What is Spinnaker? Spinnaker tutorialWhat is Spinnaker? Spinnaker tutorial
What is Spinnaker? Spinnaker tutorial
jeetendra mandal
 
Introduction to Kubernetes with demo
Introduction to Kubernetes with demoIntroduction to Kubernetes with demo
Introduction to Kubernetes with demo
Opsta
 
API Management in Azure
API Management in AzureAPI Management in Azure
API Management in Azure
Tomasso Groenendijk
 
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
Opennaru, inc.
 
Microservices
MicroservicesMicroservices
Microservices
SmartBear
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
Amazon Web Services
 
Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...
Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...
Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...
SlideTeam
 
Docker in real life
Docker in real lifeDocker in real life
Docker in real life
Nguyen Van Vuong
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Araf Karsh Hamid
 
Scaling Microservices with Kubernetes
Scaling Microservices with KubernetesScaling Microservices with Kubernetes
Scaling Microservices with Kubernetes
Deivid Hahn Fração
 
containerd the universal container runtime
containerd the universal container runtimecontainerd the universal container runtime
containerd the universal container runtime
Docker, Inc.
 
Service Mesh - Observability
Service Mesh - ObservabilityService Mesh - Observability
Service Mesh - Observability
Araf Karsh Hamid
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
Araf Karsh Hamid
 
DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...
DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...
DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...
Simplilearn
 
Rabbit MQ introduction
Rabbit MQ introductionRabbit MQ introduction
Rabbit MQ introduction
Shirish Bari
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
abhishek chawla
 
Building a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istioBuilding a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istio
SAMIR BEHARA
 

Mais procurados (20)

Consul: Service Mesh for Microservices
Consul: Service Mesh for MicroservicesConsul: Service Mesh for Microservices
Consul: Service Mesh for Microservices
 
Workshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring BootWorkshop Microservices - Construindo APIs RESTful com Spring Boot
Workshop Microservices - Construindo APIs RESTful com Spring Boot
 
Architecture: Microservices
Architecture: MicroservicesArchitecture: Microservices
Architecture: Microservices
 
What is Spinnaker? Spinnaker tutorial
What is Spinnaker? Spinnaker tutorialWhat is Spinnaker? Spinnaker tutorial
What is Spinnaker? Spinnaker tutorial
 
Introduction to Kubernetes with demo
Introduction to Kubernetes with demoIntroduction to Kubernetes with demo
Introduction to Kubernetes with demo
 
API Management in Azure
API Management in AzureAPI Management in Azure
API Management in Azure
 
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
컨테이너 (PaaS) 환경으로의 애플리케이션 전환 방법과 고려사항
 
Microservices
MicroservicesMicroservices
Microservices
 
Introduction to Microservices
Introduction to MicroservicesIntroduction to Microservices
Introduction to Microservices
 
Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...
Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...
Kubernetes Docker Container Implementation Ppt PowerPoint Presentation Slide ...
 
Docker in real life
Docker in real lifeDocker in real life
Docker in real life
 
Microservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SREMicroservices Docker Kubernetes Istio Kanban DevOps SRE
Microservices Docker Kubernetes Istio Kanban DevOps SRE
 
Scaling Microservices with Kubernetes
Scaling Microservices with KubernetesScaling Microservices with Kubernetes
Scaling Microservices with Kubernetes
 
containerd the universal container runtime
containerd the universal container runtimecontainerd the universal container runtime
containerd the universal container runtime
 
Service Mesh - Observability
Service Mesh - ObservabilityService Mesh - Observability
Service Mesh - Observability
 
Docker Kubernetes Istio
Docker Kubernetes IstioDocker Kubernetes Istio
Docker Kubernetes Istio
 
DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...
DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...
DevOps Training | DevOps Training Video | DevOps Tools | DevOps Tutorial For ...
 
Rabbit MQ introduction
Rabbit MQ introductionRabbit MQ introduction
Rabbit MQ introduction
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
 
Building a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istioBuilding a scalable microservice architecture with envoy, kubernetes and istio
Building a scalable microservice architecture with envoy, kubernetes and istio
 

Semelhante a Workshop Microservices - Arquitetura Microservices

GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
Rodrigo Cândido da Silva
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
Leandro Silva
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
Renato Groff
 
Integrating Microservices
Integrating MicroservicesIntegrating Microservices
Integrating Microservices
Thiago Ramos
 
Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviços
Thiago Pereira
 
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Renato Groff
 
Microservices
MicroservicesMicroservices
Microservices
Renato Groff
 
Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015
Renato Groff
 
Vantagens e desvantagens de uma arquitetura microservices
Vantagens e desvantagens de uma arquitetura microservicesVantagens e desvantagens de uma arquitetura microservices
Vantagens e desvantagens de uma arquitetura microservices
Fábio Rosato
 
Microservices - Canal .NET Dev Weekend
Microservices - Canal .NET Dev WeekendMicroservices - Canal .NET Dev Weekend
Microservices - Canal .NET Dev Weekend
Renato Groff
 
Microservices
MicroservicesMicroservices
Microservices
Rafael Sousa
 
Arquitetura de Micro Serviços
Arquitetura de Micro ServiçosArquitetura de Micro Serviços
Arquitetura de Micro Serviços
Fernando Ike
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Renato Groff
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
Rodrigo Cândido da Silva
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
Rodrigo Cândido da Silva
 
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Renato Groff
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
Natanael Fonseca
 
Do Monolítico aos Micro Serviços no Azure
Do Monolítico aos Micro Serviços no AzureDo Monolítico aos Micro Serviços no Azure
Do Monolítico aos Micro Serviços no Azure
balta.io - Develop your career
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Tiago Marchetti Dolphine
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluções
Guilherme Vierno
 

Semelhante a Workshop Microservices - Arquitetura Microservices (20)

GUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOpsGUJavaSC - Combinando Micro-serviços com Práticas DevOps
GUJavaSC - Combinando Micro-serviços com Práticas DevOps
 
DevTalk 08/2019
DevTalk 08/2019DevTalk 08/2019
DevTalk 08/2019
 
Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016Microserviços - Universidade Metodista - EETI 2016
Microserviços - Universidade Metodista - EETI 2016
 
Integrating Microservices
Integrating MicroservicesIntegrating Microservices
Integrating Microservices
 
Um método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviçosUm método para o desenvolvimento de software baseado em microsserviços
Um método para o desenvolvimento de software baseado em microsserviços
 
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
Arquitetura de Microserviços - Tecnologia na Prática - Julho/2017
 
Microservices
MicroservicesMicroservices
Microservices
 
Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015Microservices - ALM Roadshow 2015
Microservices - ALM Roadshow 2015
 
Vantagens e desvantagens de uma arquitetura microservices
Vantagens e desvantagens de uma arquitetura microservicesVantagens e desvantagens de uma arquitetura microservices
Vantagens e desvantagens de uma arquitetura microservices
 
Microservices - Canal .NET Dev Weekend
Microservices - Canal .NET Dev WeekendMicroservices - Canal .NET Dev Weekend
Microservices - Canal .NET Dev Weekend
 
Microservices
MicroservicesMicroservices
Microservices
 
Arquitetura de Micro Serviços
Arquitetura de Micro ServiçosArquitetura de Micro Serviços
Arquitetura de Micro Serviços
 
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
Arquitetura de Microserviços - Stone Tech Saturday - Março/2017
 
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring CloudTDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
TDC Floripa 2016 - Decolando seus micro-serviços na Spring Cloud
 
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
QCon SP 2016 - Construindo Microservices Auto-curáveis com Spring Cloud e Net...
 
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
Aplicações Distribuídas com Azure Service Bus + Azure Functions - Azure Tech ...
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Do Monolítico aos Micro Serviços no Azure
Do Monolítico aos Micro Serviços no AzureDo Monolítico aos Micro Serviços no Azure
Do Monolítico aos Micro Serviços no Azure
 
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
 
Microservices em Python: desafios e soluções
Microservices em Python: desafios e soluçõesMicroservices em Python: desafios e soluções
Microservices em Python: desafios e soluções
 

Mais de Rodrigo Cândido da Silva

Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
Rodrigo Cândido da Silva
 
Cloud Native Java EE
Cloud Native Java EECloud Native Java EE
Cloud Native Java EE
Rodrigo Cândido da Silva
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Rodrigo Cândido da Silva
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and Strategies
Rodrigo Cândido da Silva
 
As novidades da nova versão do Java 9
As novidades da nova versão do Java 9As novidades da nova versão do Java 9
As novidades da nova versão do Java 9
Rodrigo Cândido da Silva
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Rodrigo Cândido da Silva
 
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
Rodrigo Cândido da Silva
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaTDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com Java
Rodrigo Cândido da Silva
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com Java
Rodrigo Cândido da Silva
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
Rodrigo Cândido da Silva
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
Rodrigo Cândido da Silva
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
Rodrigo Cândido da Silva
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2Rodrigo Cândido da Silva
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EEConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
Rodrigo Cândido da Silva
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2
Rodrigo Cândido da Silva
 

Mais de Rodrigo Cândido da Silva (20)

Java 9, 10 e ... 11
Java 9, 10 e ... 11Java 9, 10 e ... 11
Java 9, 10 e ... 11
 
Cloud Native Java EE
Cloud Native Java EECloud Native Java EE
Cloud Native Java EE
 
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de ImplementaçãoProtegendo Microservices: Boas Práticas e Estratégias de Implementação
Protegendo Microservices: Boas Práticas e Estratégias de Implementação
 
Protecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and StrategiesProtecting Java Microservices: Best Practices and Strategies
Protecting Java Microservices: Best Practices and Strategies
 
As novidades da nova versão do Java 9
As novidades da nova versão do Java 9As novidades da nova versão do Java 9
As novidades da nova versão do Java 9
 
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e KubernetesWorkshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
Workshop Microservices - Distribuindo os Microservices com Docker e Kubernetes
 
GUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em JavaGUJavaSC - Protegendo Microservices em Java
GUJavaSC - Protegendo Microservices em Java
 
TDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com JavaTDC Floripa 2017 - Criando Microservices Reativos com Java
TDC Floripa 2017 - Criando Microservices Reativos com Java
 
GUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com JavaGUJavaSC - Criando Micro-serviços Reativos com Java
GUJavaSC - Criando Micro-serviços Reativos com Java
 
JavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EEJavaOne 2016 - Reactive Microservices with Java and Java EE
JavaOne 2016 - Reactive Microservices with Java and Java EE
 
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EEJavaOne LATAM 2016 - Combinando AngularJS com Java EE
JavaOne LATAM 2016 - Combinando AngularJS com Java EE
 
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data RESTJavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
JavaOne LATAM 2016 - RESTful Services Simplificado com Spring Data REST
 
GUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EEGUJavaSC - Combinando AngularJS com Java EE
GUJavaSC - Combinando AngularJS com Java EE
 
QCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EEQCon 2015 - Combinando AngularJS com Java EE
QCon 2015 - Combinando AngularJS com Java EE
 
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
JavaOne LATAM 2015 - Segurança em Recursos RESTful com OAuth2
 
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
JavaOne LATAM 2015 - Batch Processing: Processamento em Lotes no Mundo Corpor...
 
TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2TDC 2015 - Segurança em Recursos RESTful com OAuth2
TDC 2015 - Segurança em Recursos RESTful com OAuth2
 
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EEConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
ConFoo 2015 - Supporting Multi-tenancy Applications with Java EE
 
ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2ConFoo 2015 - Securing RESTful resources with OAuth2
ConFoo 2015 - Securing RESTful resources with OAuth2
 
GUJavaSC - Unit Testing com Java EE
GUJavaSC - Unit Testing com Java EEGUJavaSC - Unit Testing com Java EE
GUJavaSC - Unit Testing com Java EE
 

Workshop Microservices - Arquitetura Microservices

  • 1. Workshop Microservices Definindo uma Arquitetura com Microservices
  • 2. 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
  • 3. Agenda • Definição • Arquitetura Monolítica • Arquitetura Microservices • Principais Desafios • Deployment e Monitoramento • Design Patterns
  • 5. Microservices • O que sã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 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
  • 9. 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
  • 10. 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"
  • 11. Arquitetura Monolítica • Modelo de desenvolvimento em camadas MVC
  • 12. Arquitetura Monolítica • Divisão da aplicação em módulos internos, por meio de classes, pacotes, JAR’s, etc
  • 13. Arquitetura Monolítica • Novos clientes UI vão sendo adicionados e plugados diretamente nos módulos de negócio
  • 14. Arquitetura Monolítica • Novas integrações e novos modelos de persistência surgem e são incorporados sob-demanda
  • 15. 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
  • 16. 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
  • 19. 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
  • 20. Arquitetura Microservices • Comunicação heterogênea • HTTP, TCP, UDP, Messaging, etc. • Payloads: JSON, BSON, XML, Protocol Buffers, etc. • Comunicação via APIs
  • 21. 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
  • 22. 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?
  • 23. 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
  • 24. 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
  • 25. 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?
  • 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 os principais desafios? • Gerenciamento de configuração • Registro e descoberta dos serviços • Roteamento • Balanceamento de carga • Tolerância à falhas • Monitoramento
  • 29. Registro e Descoberta de Serviços
  • 34. 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
  • 35. 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
  • 37. Messaging Pattern • Comunicação assíncrona entre os microservices • Melhora a confiabilidade da arquitetura • Promove o desacoplamento entre os serviços
  • 38. Access Token • Modelo stateless e essencialmente distribuído • Centraliza o processo de autenticação e autorização
  • 39. 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
  • 40. Proxy • Um único ponto de entrada para a arquitetura distribuída • Evita o problema de CORS • Facilita o registro para utilização no frontend
  • 41. 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”
  • 42. 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
  • 43. 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
  • 44. Log Aggregation • N serviços == N logs • Agregação e padronização de todos os logs gerados afim de uma visualização centralizada
  • 45. 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
  • 50. Containers vs Virtualization Virtualization Container • Minutos para iniciar uma VM, e… segundos para iniciar um container
  • 52. Auto Scaling • Capacidade de aumentar e diminuir a escalabilidade automaticamente
  • 53. Orquestração • Gerenciamento da comunicação dos serviços em containers diferentes
  • 54. Deployment vs Environments • Múltiplos ambientes diferentes de execução
  • 56. 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?
  • 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/