Quem sou eu?
• Mais de 12 anos na área de Software;
• Eterno estudante de Tecnologia;
• Javeiro das Antigas;
• Amante do NodeJS;
• Trabalhando como Arquiteto de Soluções Digitais na Everis
• Envolvido em projetos de chatboots;
Onde tudo começou?
•Aplicações de diversas tecnologias se comunicando;
•Integração por arquivo;
•Integração por XML;
•Integração por Socket TCP/IP;
•Integração com o que tem, no prazo que der!
Arquitetura Macarrônica
Arquitetura Orientada a Serviços
ESB como peça fundamental
•Um protocolo comum: SOAP;
•Um bus que concentra todas as integrações;
•Criação de um catálogo de serviços;
•Produtos consolidados no mercado;
•Escalabilidade do bus como um todo;
•Muitas empresas usaram com ITIL;
•Foco na arquitetura monolítica;
Arquitetura Monolítica
O Famoso Pacotão
•Diferentes requisitos de negócio no mesmo pacote.
•Múltiplas equipes trabalham no mesmo projeto.
•Existe apenas um pipeline de entrega.
•Muito merge.
•Dificuldade em atender diferentes áreas de negócio
•Entregas são lentas
Monolito com CI e CD
É possível alcançar uma certa
agilidade neste tipo de arquitetura,
colocando ferramentas como:
Jenkins / Artifactory
Problemas a resolver
O desenvolvimento de software está cada vez mais ágil
● Clientes querem entregas cada vez mais rápidas;
● Precisamos olhar para cada cenário e escolher a melhor
tecnologia que atende;
● A complexidade dos softwares cresce cada vez mais;
● Melhorar a escalabilidade da aplicação;
● Áreas de negócio diferentes não querem depender suas
entregas uma das outras.
Afinal, o que são microserviços?
“ the microservice architectural style is an approach to developing a single application as a
suite of small services, each running in its own process and communicating with lightweight
mechanisms, often an HTTP resource API”
-Martin Fowler
https://martinfowler.com/articles/microservices.html
Alguns pilares
Os serviços desacoplados podem ser facilmente
distribuídos horizontalmente em vários
servidores, possibilitando dimensionar os
recursos / serviços adequadamente
As falhas podem ser localizadas em uma pequena parte
do aplicativo e contidas antes que o aplicativo inteiro
sofra uma interrupção. Isso também permite que os
aplicativos sejam descartados normalmente em caso de
erro irrecuperável
Quanto menor a unidade de código com a qual está
trabalhando, menos complicado é alterar o código e
menos tempo leva para testar a implantação do código
Refatorando o Monolito
● Fronteiras bem definidas;
● Um banco de dados por MS;
● Um servidor de aplicação por
microserviço.
● Um pipeline de CI/CD por MS;
● Um repositório de código fonte
por MS;
● Um banco de dados por MS.
Granularidade do Microservice
Como eu garanto que realmente meus microserviços estão
fazendo apenas o necessário.
“Bounded Context”
https://martinfowler.com/bliki/BoundedContext.html
Aprendendo com os outros
O caso Netflix
https://www.youtube.com/watch?v=CZ3wIuvmHeM
Josh Evans é diretor de engenharia de operações da Netflix,
com experiência em e-commerce, ferramentas, testes e operações.
Nos últimos três anos, ele liderou uma organização que cria, integra
e evangeliza soluções e práticas técnicas comprovadas, como
entrega contínua, percepção operacional em tempo real e
engenharia do caos para alcançar a excelência operacional em
escala.
Netflix Open Source Software
E tem muito mais além desses:
https://netflix.github.io/
Spring Boot
O Spring Boot é a principal tecnologia usada em Java para implementação de Microserviços. O
Spring Boot simplifica muito o desenvolvimento de Microsserviços, simplificando as principais tarefas
de construir microsserviços baseados em REST. O Spring Boot também simplifica bastante o
mapeamento de verbos no estilo HTTP (GET, PUT, POST e DELETE) para URLs e a serialização
do protocolo JSON para e de objetos Java, bem como o mapeamento de exceções Java de volta
para códigos de erro HTTP padrão.
Spring Cloud
Implementar todos os padrões de microservices do zero seria muito trabalhoso.
Felizmente para nós, a equipe da Spring integrou um grande número de projetos
de código aberto testados no dia a dia, em um subprojeto Spring conhecido
coletivamente como Spring Cloud. (http://projects.spring.io/spring-cloud/).
A Spring Cloud possui a participação de empresas que possuem projetos open-
source como a Pivotal, HashiCorp e Netflix padrões.
Pensando nas Configurações
Spring Cloud Config cuida do gerenciamento de dados de configuração de aplicativos por
meio de um serviço centralizado, de forma que os dados de configuração do aplicativo
sejam separados de forma clara do microsserviço implantado. Isso garante que,
independentemente da quantidade de instâncias de microsserviço estejam rodando, elas
sempre terão a mesma configuração.
O Spring Cloud Config possui seu próprio repositório de gerenciamento de propriedade,
mas também se integra a projetos de software livre, como os seguintes:
Git - O Spring Cloud Config pode se integrar a um repositório com suporte do Git e ler os
dados de configuração do aplicativo fora do repositório.
Consul - O Consul também inclui banco de dados baseado em armazenamento de valor-
chave que pode ser usado pelo Spring Cloud Config para armazenar dados de
configuração do aplicativo.
Eureka - O Eureka também tem um banco de dados de valor-chave que pode ser usado
com o Spring Cloud Config.
Muitos Containers, Muitos IPs
Com o Spring Cloud Service Discovery, você pode abstrair o local físico (IP e / ou nome do servidor)
de onde seus servidores são implantados a partir dos clientes que consomem o serviço. Os
consumidores de serviço invocam lógica de negócios para os servidores por meio de um nome lógico
em vez de um local físico.
O Spring Cloud Service Discovery também lida com o registro e o cancelamento do registro de
instâncias de serviços quando eles são iniciados e desativados.
A descoberta de serviços do Spring Cloud pode ser implementada usando:
● Consul (https://www.consul.io/)
● Eureka (https://github.com/Netflix/eureka)
Resiliência
O Spring Cloud se integra fortemente aos projetos de código aberto da Netflix. Para os padrões
de resiliência do cliente de microsserviço, o Spring Cloud utiliza as bibliotecas:
● Netflix Hystrix (https://github.com/Netflix/Hystrix)
● Ribbon (https://github.com/Netflix/Ribbon)
Usando as bibliotecas Netstrix Hystrix, você pode implementar rapidamente os padrões de
resiliência do cliente de serviço, como os padrões circuit breaker e bulkhead.
Embora o projeto do Netflix Ribbon simplifique a integração com agentes de detecção de
serviço, como o Eureka, ele também fornece o balanceamento de carga do cliente de
chamadas de serviço de um consumidor de serviço. Isso possibilita que um cliente continue
fazendo chamadas de serviço, mesmo se o agente de detecção de serviço estiver
temporariamente indisponível
Definindo uma porta de entrada
A Spring Cloud usa o projeto Netflix Zuul (https://github.com/Netflix/zuul) para fornecer recursos
de roteamento de serviços para seu aplicativo de microsserviço. O Zuul é um gateway de serviço
que faz o proxy das solicitações de serviço e garante que todas as chamadas para seus
microsserviços sejam executadas por uma única “porta da frente” antes que o serviço de destino
seja chamado. Com essa centralização de chamadas de serviço, você pode impor políticas de
serviço como:
● Forçar padrões de segurança baseado em tokens;
● Filtragem de conteúdo;
● Regras de roteamento.
Spring Cloud Stream
O Spring Cloud Stream (https://cloud.spring.io/spring-cloud-stream/) é uma tecnologia que
permite integrar facilmente o processamento de mensagens leves ao seu microsserviço. Usando
o Spring Cloud Stream, você pode criar microsserviços inteligentes que podem usar eventos
assíncronos conforme eles ocorrem.
Com o Spring Cloud Stream, você pode integrar rapidamente seus microsserviços a agentes de
mensagens, como:
● RabbitMQ (https://www.rabbitmq.com/)
● Kafka (http://kafka.apache.org/)
Spring Cloud Sleuth
O Spring Cloud Sleuth (https://cloud.spring.io/spring-cloud-sleuth/) permite que você integre
identificadores de rastreamento exclusivos nas chamadas HTTP e nos canais de mensagens
(RabbitMQ, Apache Kafka) que estão sendo usados em seu aplicativo.
Esses números de rastreamento, às vezes chamados de “Correlation IDs”, permitem rastrear uma
transação conforme ela flui pelos diferentes serviços em seu aplicativo. Com o Spring Cloud Sleuth,
esses IDs de rastreio são automaticamente adicionados a qualquer declaração de log que você fizer no
seu microsserviço.
Integrando
A verdadeira beleza do Spring Cloud Sleuth é vista quando combinada com ferramentas de
tecnologia de agregação de registros, como:
● Papertrail (http://papertrailapp.com)
● Zipkin (http://zipkin.io).
Papertrail é uma plataforma de registro em nuvem usada para agregar logs em tempo real de
diferentes microsserviços em um banco de dados consultavel.
O Open Zipkin coleta dados produzidos pelo Spring Cloud Sleuth e permite que você visualize o fluxo
de suas chamadas de serviço envolvidas em uma única transação.