Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
-
Upload
tiago-marchetti-dolphine -
Category
Software
-
view
290 -
download
0
Transcript of Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)
![Page 1: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/1.jpg)
MicroservicesTiago Dolphine
![Page 3: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/3.jpg)
Agenda
• O que é ? como surgiu? Porque?
• Decompondo uma aplicação em microservices
• Comunicação e integração
• Estrutura básica
• Desafios (micro?)
• Case de arquitetura microservices
![Page 4: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/4.jpg)
Vamos imaginar que estamos desenvolvendo uma loja virtual ...
![Page 5: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/5.jpg)
Browser / Mobile App
App Server/Container (Tomcat/Jetty)
Framework (Spring/JavaEE)
LB
X Scaling
DB
Front EndFramework
Product Svc
Order Svc
Pricing Svc
Stock Svc
OR
M(H
iber
nat
e)
Aplicação Monolítica
![Page 6: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/6.jpg)
Simplicidade em:• Desenvolver• Testar• Deploy• Escalar
É natural pois é como aprendemos !
Aplicação Monolítica
![Page 7: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/7.jpg)
Porém...
• Crescimento do negócio
• Aumento da complexidade do negócio
![Page 8: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/8.jpg)
E para os desenvolvedores?
![Page 9: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/9.jpg)
E para os desenvolvedores?
![Page 10: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/10.jpg)
Enquanto isso em nossa loja virtual ...
Aumento de vendas
Serviço de Pedidos Gargalo
![Page 11: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/11.jpg)
Vamos escalar nossa aplicação !
![Page 12: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/12.jpg)
App Server/Container (Tomcat/Jetty)
Framework (Spring/JavaEE)
Front EndFramework
Product Svc
Order Svc
Pricing Svc
Stock Svc
OR
M(H
iber
nat
e)
App Server/Container (Tomcat/Jetty)
Framework (Spring/JavaEE)
Front EndFramework
Product Svc
Order Svc
Pricing Svc
Stock Svc
OR
M(H
iber
nat
e)
App Server/Container (Tomcat/Jetty)
Framework (Spring/JavaEE)
Front EndFramework
Product Svc
Order Svc
Pricing Svc
Stock Svc
OR
M(H
iber
nat
e)
App Server/Container (Tomcat/Jetty)
Framework (Spring/JavaEE)
Front EndFramework
Product Svc
Order Svc
Pricing Svc
Stock Svc
OR
M(H
iber
nat
e)
• Custos desnecessários (Cloud $$)
• Subaproveitamento de recurso computacional
Preciso escalar toda a aplicação !
![Page 13: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/13.jpg)
http://microservices.io/articles/scalecube.html
![Page 14: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/14.jpg)
Alguns pontos negativos
• Redeploy de toda a aplicação para pequenas mudanças
• Alto tempo de interrupções
• Risco de falhas
• Dificulta mudanças
• Updates menos frequentes
![Page 15: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/15.jpg)
A microservice architecture builds software as suites of collaborating services.
(Martin Fowler)
![Page 16: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/16.jpg)
O que é? Qual vantagem?
• Conjunto de pequenos serviços
• Foco em funcionalidade
• Independência
• Tecnologias heterogêneas e poliglotas
• Escalabilidade em gargalos
• DRY Reuso de funcionalidades
• Deploy independente (favorece CI/CD)
• Equipes menores e focadas
![Page 17: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/17.jpg)
Como definir um bom microservice?
• Funcionalidades relacionados devem ficar juntas
• Baixo acoplamento / Alta coesão
• Estudar e delimitar o escopo do serviço
• Modelar pensando em funcionalidades, não nos dados
• Bounded Contexts (modelo interno e modelo exposto)
• Módulos (app monólítica) candidatos a microservices
O menor possível, porém grande o suficiente para representar o seu domínio
![Page 18: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/18.jpg)
Como ficaria nossa loja virtual?
![Page 19: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/19.jpg)
Browser / Mobile App
LB
Y Scaling
DB
Micro container framework
Order Svc
DB
Stock Svc
Front End
DB
Product Svc
DB
Pricing Svc
![Page 20: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/20.jpg)
http://microservices.io/articles/scalecube.html
![Page 21: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/21.jpg)
Integração e comunicação
• Como um serviço se comunica com outro?
Chamada à funções Chamadas à APIs remotas
• Síncrono: request/response
• Assíncrono: request/callback
![Page 22: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/22.jpg)
Orquestração vs coreografia
Vamos pensar no processo de criação de um novo cliente
Um serviço gerencia quando tomar ações Cada serviço sabe quando tomar ações diante de um evento
![Page 23: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/23.jpg)
REST
• Mecanismo síncrono
• Recurso É o foco do serviço
• Desacoplamento do exposto para o armazenado
• HTTP• Semântica e verbos (ex: GET, POST, PUT, DELETE)
• Caching proxies
• Load balancers
• Ferramentas de monitoramento
• Métodos de segurança
![Page 24: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/24.jpg)
API Gateway
APIGW
Web App
Mobile App
Customer
Product
Stock
Pricing
• Ponto único de entrada• Agregação de dados• API otimizada para diferentes
clientes• Evita exposição de dados
desnecessários• Tradução de protocolo• Cross domain e Same-origin policy
![Page 25: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/25.jpg)
Mensageria
• Mecanismo assíncrono (baseado em eventos)
• Publish/Subscribe
• Incentiva a coreografia e baixo acoplamento
• Padrões para mensagens (AMQP, JMS...)
• Message Broker (RabbitMQ, ActiveMQ, HornetQ...)
• Aumenta complexidade
![Page 26: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/26.jpg)
Híbrido
Stock
Pricing
TopicOrderFrontEnd
Product
CustomerDB
REST/HTTP
Vamos pensar num fluxo de compra
![Page 27: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/27.jpg)
Falhas são inevitáveis
• Estar preparado para falhas
• Assumir que as chamadas e serviços podem falhar
• Rede é instável
• Recuperação à falhas
• Adotar este pensamento em tudo que for desenvolvido
![Page 28: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/28.jpg)
Estrutura básica de um Microservice
Recursos
Serviço
Modelodo Domínio
Repositórios
ORM / Framework Dados
Gat
eway
Rec
urs
os
Serv
iço
Mo
del
od
o D
om
ínio
Rep
osi
tóri
os
OR
M /
Fra
mew
ork
D
ado
s
Gateway
![Page 29: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/29.jpg)
Deploy
• Instância• Serviços isolados
• Sem conflito de recursos
• Aloca todo recurso disponível
• Virtual Machine• Facilidade de escalar add mais VMs
• Controle de CPU e memória
• VM lenta de buildar e startar
• Container• Rápido para buildar e startar
• Não necessita startar todo SO, apenas o processo do serviço
![Page 30: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/30.jpg)
E como ficam os times de desenvolvimento?
![Page 31: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/31.jpg)
"Qualquer empresa que projeta um sistema, inevitavelmente produz um projeto cuja estrutura é uma cópia da estrutura de comunicação da organização“...
![Page 32: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/32.jpg)
• Times multidisciplinares
• Paraleliza mais facilmente o desenvolvimento• Cada time é responsável (dono) por cada microservice
![Page 33: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/33.jpg)
Microservices no ifood...
![Page 34: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/34.jpg)
![Page 35: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/35.jpg)
Vamos a um exemplo de código... com Spring boot
https://github.com/tiagodolphine/microservices
![Page 36: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/36.jpg)
Concluindo...
• Maior complexidade!
• Preciso de microservices para o meu problema?
• Estar sempre ciente dos desafios que terei que enfrentar!• Descoberta de serviços
• Operações transacionais
• Testes
• Monitoramento
• Teorema CAP (consistency, availability, partition tolerance)
• Dia a dia do desenvolvedor mais agitado e divertido
![Page 37: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/37.jpg)
Algumas referências
• Microservices (Martin Fowler e James Lewis)
• microservices.io (Chris Richardson)
• Building "Bootiful" Microservices with Spring Boot (Josh Long)
• Testing Strategies in a Microservice Architecture (Toby Clemson)
• Building MicroservicesDesigning Fine Grained Systems (Sam Newman) fev/2015
![Page 39: Microservices: uma abordagem para arquitetura de aplicações (Devcamp 2015)](https://reader033.fdocument.pub/reader033/viewer/2022051113/55b85c70bb61eb6e378b46b4/html5/thumbnails/39.jpg)
Algumas idéias de tecnologias
• Micro container: Spring Boot, Play, DropWizard
• Comunicação:
• REST : Spring MVC, JAX-RS
• Mensageria: Spring AMQP com RabbitMQ
• Deploy: Container com Docker
• Monitoramento: Logstash, Kibana, NewRelic, Consul
• Service Discovery: Consul