1) O documento discute a arquitetura de microserviços, como decompor uma aplicação monolítica em serviços independentes e como eles se comunicam.
2) Apresenta os benefícios da arquitetura de microserviços como escalabilidade independente, deploy autônomo e equipes focadas, mas também desafios como integração e falhas.
3) Exemplifica a decomposição de uma loja virtual em microserviços como pedidos, produtos, preços e estoque que se comunicam via REST ou mensageria.
3. 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
5. Browser /
Mobile App
App Server/Container (Tomcat/Jetty)
Framework (Spring/JavaEE)
LB
X Scaling
DB
Front End
Framework
Product Svc
Order Svc
Pricing Svc
Stock Svc
ORM
(Hibernate)
Aplicação Monolítica
14. 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
16. 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
17. 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
21. 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
22. 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
23. 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
27. 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
28. Estrutura básica de um Microservice
Recursos
Serviço
Modelo
do Domínio
Repositórios
ORM / Framework Dados
Gateway
Recursos
Serviço
Modelo
doDomínio
Repositórios
ORM/Framework
Dados
Gateway
29. 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
31. "Qualquer empresa que projeta um
sistema, inevitavelmente produz um
projeto cuja estrutura é uma cópia
da estrutura de comunicação da
organização“...
32. • Times multidisciplinares
• Paraleliza mais facilmente o desenvolvimento
• Cada time é responsável (dono) por cada microservice
35. Vamos a um exemplo de código
... com Spring boot
https://github.com/tiagodolphine/microservices
36. 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
37. 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 Microservices
Designing Fine Grained Systems (Sam Newman) fev/2015
39. 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