Microsserviços com Spring Boot. Parte 1. Introdução

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://localhost:8000/currency-exchange/from/EUR/to/INR 

 { 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://localhost:8100/currency-converter/from/EUR/to/INR/quantity/10000 

 { 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.

Source: https://habr.com/ru/post/pt484130/


All Articles