Esta é a primeira parte de uma série de artigos sobre os conceitos básicos de arquiteturas de microsserviço.
Nele, você se familiarizará com o conceito de microsserviços e aprenderá a criar microsserviços usando o Spring Boot e o Spring Cloud.
Este guia o ajudará a aprender o básico de arquiteturas de microsserviço. Também começaremos a analisar a implementação básica de microsserviços com o Spring Boot.
Criaremos um par de microsserviços e os faremos se comunicar usando os servidores de nome Eureka (Eureka Naming Server) e Ribbon para equilibrar a carga no lado do cliente.
Este artigo é parte da série Spring Boot Microservices:
Você vai aprender
- O que é um monólito?
- O que é um microsserviço?
- Quais são os problemas com os microsserviços?
- Como o Spring Boot e o Spring Cloud facilitam o desenvolvimento de microsserviços?
- Como implementar o balanceamento de carga no lado do cliente usando o Ribbon?
- Como implementar um servidor de nomes (Eureka Naming Server)?
- Como conectar microsserviços com um servidor de nomes e a faixa de opções?
Visão geral dos recursos
Neste tutorial, criaremos um recurso para estudantes que fornece três serviços usando os URIs e métodos HTTP apropriados:
- Obtenha uma lista de todos os alunos - @GetMapping ("/ students")
- Obtenha informações sobre um aluno específico - @GetMapping ("/ students / {id}")
- Excluir informações do aluno - @DeleteMapping ("/ students / {id}")
- Crie uma nova entrada de aluno - @PostMapping ("/ students")
- Atualizar informações do aluno - @PutMapping ("/ students / {id}")
Visão geral dos microsserviços - o panorama geral
Nesta série de artigos, criaremos dois microsserviços:
- Serviço Forex - FS para breve
- Serviço de Conversão de Moeda - CCS, abreviado
Não se preocupe se algumas coisas não estiverem claras para você. A idéia é fornecer uma visão geral antes de iniciarmos o desenvolvimento e criarmos microsserviços passo a passo.
Serviço Forex
O serviço Forex (FS, Serviço Forex) é um provedor de serviços. Ele fornece taxas de câmbio para várias moedas. Vamos supor que ele se comunique com o Forex Exchange e forneça o valor atual da troca entre moedas. Um exemplo de solicitação e resposta é mostrado abaixo:
GET to http:
{ id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, port: 8000, }
A resposta à solicitação acima é a taxa de câmbio de Euro para INR. A resposta de ConversionMultiple é 75.
Falaremos sobre o campo port um pouco mais tarde.
Serviço de conversão de moeda
O Serviço de Conversão de Moeda (CCS) pode converter muitas moedas em outra moeda. Ele usa o serviço Forex para obter os valores atuais de troca de moeda. O CCS é um consumidor de serviços. Um exemplo de solicitação e resposta é mostrado abaixo:
GET to http:
{ id: 10002, from: "EUR", to: "INR", conversionMultiple: 75, quantity: 10000, totalCalculatedAmount: 750000, port: 8000, }
A solicitação acima permite determinar o valor de 10.000 euros em rúpias indianas.
TotalCalculatedAmount é 750.000 INR. O diagrama abaixo mostra o relacionamento entre o CCS e o FS.

Servidor e fita de nomeação Eureka
Dependendo da carga, podemos ter várias cópias do Serviço de Conversão de Moeda e do Serviço Forex.

E o número de instâncias para cada serviço pode mudar com o tempo. A figura abaixo mostra um exemplo específico em que são criadas 5 instâncias do serviço Forex.

O que deve acontecer na situação acima é que a carga deve ser distribuída igualmente entre essas 5 instâncias.

Nesta série de artigos, usaremos o Ribbon para balanceamento de carga e o servidor de nome Eureka para registrar todos os microsserviços.

O que é uma aplicação monolítica?
Você já trabalhou em um projeto ...
- Que é produzido (colocado em produção) uma vez a cada poucos meses
- Que possui uma ampla variedade de recursos e capacidades.
- Na qual uma equipe de mais de 50 pessoas trabalha
- Onde problemas de depuração são um grande problema
- Onde a introdução de novas tecnologias e novos processos é quase impossível
Essas são características típicas de aplicações monolíticas.
Aplicações monolíticas são geralmente enormes - mais de 100.000 linhas de código. Em alguns casos, mais de um milhão de linhas de código.
Os monólitos são caracterizados pelo seguinte:
- Grande tamanho de aplicativo
- Ciclos de liberação longos
- Grandes equipes
Os problemas típicos incluem:
- Problemas de escalabilidade
- Adoção de novas tecnologias
- Novos processos - Agile?
- Difícil de automatizar testes
- É difícil se adaptar às práticas atuais de desenvolvimento
- É difícil se adaptar ao rápido crescimento de um projeto
Microsserviços
As arquiteturas de microsserviço evoluíram para enfrentar os desafios de escalabilidade e inovação com arquiteturas monolíticas. Há várias definições sugeridas para microsserviços.
Serviços pequenos e independentes que trabalham juntos - Sam Newman
Desenvolvimento de um aplicativo separado na forma de um conjunto de pequenos serviços, cada um dos quais funciona em seu próprio processo e interage com mecanismos leves, geralmente a API de recursos HTTP. Esses serviços são criados com base em oportunidades de negócios e podem ser implantados independentemente, usando um mecanismo de implantação totalmente automatizado. Há um nível mínimo de gerenciamento centralizado desses serviços, que pode ser escrito em diferentes linguagens de programação e usar diferentes tecnologias de armazenamento - James Lewis e Martin Fowler
Embora não exista uma definição única aceita para microsserviços, há várias características importantes:
- REST - criado com base nos recursos RESTful. A comunicação entre serviços pode ser baseada em eventos ou no protocolo HTTP.
- Pequenos blocos implantáveis bem selecionados - contexto limitado
- Recursos de nuvem - Dimensionamento dinâmico
Como é a arquitetura de microsserviço?
É assim que o monólito será. Um aplicativo para tudo.

Isso parecerá com o mesmo aplicativo ao desenvolver o uso da arquitetura de microsserviços.

As arquiteturas de microsserviço incluem vários componentes de mensagens pequenos e bem projetados.

Benefícios dos microsserviços
Vantagens:
- O uso de novas tecnologias e processos de adaptação fica mais fácil. Você pode experimentar novas tecnologias com os novos microsserviços que criaremos.
- Ciclos de liberação mais rápida
- Escalonamento de nuvens
Problemas de arquitetura de microsserviço
Embora o desenvolvimento de alguns componentes pequenos possa parecer fácil, há várias dificuldades inerentes às arquiteturas de microsserviço.
Vejamos alguns dos problemas:
- É necessária uma configuração rápida : você não pode passar um mês configurando cada microsserviço. Você deve poder criar rapidamente microsserviços.
- Automação : como, em vez do monólito, existem vários componentes menores, você precisa automatizar tudo - montagens, implantação, monitoramento etc.
- Visibilidade : agora você tem vários componentes pequenos para implantação e manutenção. Talvez 100 ou 1000 componentes. Você deve poder rastrear e identificar problemas automaticamente. Você precisa de uma excelente visibilidade em torno de todos os componentes.
- Contexto limitado : definir os limites de um microsserviço não é uma tarefa fácil. O contexto limitado do design de domínio é um bom ponto de partida. Sua compreensão do domínio se desenvolve ao longo de um período de tempo. Você precisa garantir que os limites do microsserviço estejam evoluindo.
- Gerenciamento de configuração : você precisa manter configurações para centenas de componentes em diferentes ambientes. Você precisará de uma solução de gerenciamento de configuração
- Aumento e diminuição dinâmicos : os benefícios dos microsserviços serão realizados apenas se seus aplicativos puderem escalar facilmente na nuvem.
- Baralho de cartas : se o microsserviço na parte inferior da cadeia de chamadas falhar, poderá afetar todos os outros microsserviços. Os microsserviços devem ser tolerantes a falhas.
- Depuração : quando surgir um problema que precise ser resolvido, talvez você precise examinar vários serviços em componentes diferentes. Logs e painéis centralizados são necessários para facilitar os problemas de depuração.
- Consistência : você não pode ter uma ampla gama de ferramentas que resolvem o mesmo problema. Embora seja importante impulsionar a inovação, também é importante ter um gerenciamento descentralizado dos idiomas, plataformas, tecnologias e ferramentas usadas para implementar / implantar / monitorar microsserviços.
Soluções de arquitetura de microsserviço
Bota de mola
O Spring Boot permite criar rapidamente aplicativos prontos e fornece os seguintes recursos não funcionais:
- servidores incorporados (facilidade de implantação usando contêineres)
- monitoramento de métricas
- monitoramento de saúde
- configuração externa
Nuvem de primavera
O Spring Cloud fornece soluções de ativação em nuvem para seus microsserviços. Ele usa e se baseia em algumas das soluções em nuvem criadas pela Netflix (Netflix OSS).
Módulos importantes do Spring Cloud
- Escala dinâmica para cima e para baixo. Usando uma combinação de:
- Servidores de nome Eureka
- Faixa de opções (balanceamento de carga no lado do cliente)
- Fingir (simplifica o desenvolvimento de clientes REST)
- Visibilidade e monitoramento com:
- Rastreamento Zipkin distribuído
- Gateway da API da Netflix
- Gerenciamento de configuração com o Spring Cloud Config Server
- Tolerância a falhas com Hystrix
Nesta série de artigos, criaremos dois microsserviços:
Nota perev. O autor ainda repete parcialmente o que foi dito. Edição original salva (sem excluir replays)
- Serviço Forex - FS para breve
- Serviço de Conversão de Moeda - CCS, abreviado
O diagrama abaixo mostra o relacionamento entre o CCS e o FS. Estabeleceremos uma conexão entre esses dois componentes.

Gostaríamos de poder aumentar e diminuir dinamicamente o número de instâncias de cada um desses serviços.

E o número de instâncias para cada serviço pode mudar com o tempo. A figura abaixo mostra um exemplo específico em que são criadas 5 instâncias do serviço Forex.

A implementação de uma solução para aumentar e diminuir dinamicamente exige responder a duas perguntas:
- Como o Serviço de Conversão de Moeda (CCS) descobre quantas instâncias do Serviço de Forex (FS) estão ativas?
- Como o Serviço de Conversão de Moeda (CCS) distribui a carga entre instâncias ativas?
Como queremos que isso seja dinâmico, não podemos codificar os URLs nos serviços FS para o CCS. É por isso que estamos introduzindo um servidor de nomes.
Todas as instâncias de componentes (CCS e FS) são registradas no servidor de nomes Eureka. Quando o FS precisar chamar o CCS, ele solicitará ao Eureka Naming Server sobre instâncias ativas. Usaremos o Ribbon para equilibrar a carga no lado do cliente entre diferentes instâncias do FS.
Abaixo está um diagrama de seqüência de alto nível do que acontecerá ao solicitar do CCS para o FS.

Mais adiante nesta série de artigos:
- Criando um microsserviço Forex. Criaremos um serviço REST simples baseado no Spring Boot Starter Web e no Spring Boot Started JPA. Usaremos o Hibernate para implementar o JPA e conectar-se ao banco de dados H2.
- Criação do serviço de conversão de moeda CCS. Criaremos um serviço REST simples usando o Feign para chamar o microsserviço Forex.
- Use Faixa de opções para balanceamento de carga.
- Implemente o Serviço de Nomenclatura Eureka e conecte o FS e o CCS através do Eureka.