Conceitos e dinâmica de funcionamento da Arquitetura de Microsserviços
Dinâmica de funcionamento
Representação
Fundamentos
Envolve desde conceitos técnicos, financeiras e gerenciais moldados principalmente sobre a necessidade do negócio.
A mudança de paradigma para microsserviços requer também uma mudança equivalente na estrutura da organização. Não só uma questão técnica, é também cultural e organizacional.
É um subconjunto dos conceitos de sistemas distribuídos modernos.
Conceitos
Sincronia de dados em sistemas distribuídos
Não há como garantir alta disponibilidade com consistência forte ao mesmo tempo em uma arquitetura de microsserviços com dados distribuídos.
Consistência de dados é a capacidade de garantir a integridade dos dados, sem divergência e nem ambiguidade de dados dentro da aplicação:
Disponibilidade VS Consistência forte
Baseado no teorema CAP.
Para garantir a alta disponibilidade em sistemas distribuídos com dados compartilhados é necessário a sincronia de dados de forma assíncrona e não bloqueante, gerando uma inconsistência eventual.
Inconsistência eventual: os dados podem estar momentaneamente desatualizados ou não replicados ao serem consultados
UUIDs
Os UUIDs
são um meio de criar dados com identificadores únicos afim de evitar conflitos/ambiguidades entre eles.
São identificadores temporais universalmente exclusivos e essenciais para a sincronia de dados distribuídos.
Vantagens dos UUIDs:
-
Geração simples
-
Fácil replicação de dados
-
Garantia de uma maior manutenibilidade
-
Únicos em qualquer base de dados
OBS: no contexto de microsserviços, identificados sequenciais não é considerado uma boa abordagem:
Acoplamento
Não existe desacoplamento absoluto entre os microsserviços, entretanto é possível ter um baixo acoplamento.
Disponibilidade
Não existe 100% de disponibilidade, pois sempre existe alguma dependência entre os serviços da aplicação.
Distribuição das bases de dados
É possível ter compartilhamento de bancos de dado entre serviços.
É comum essa prática no início do processo de migração de monolito para microsserviço.
Padrões de microsserviços
É fundamental durante a elaboração de uma aplicação de microsserviços.
Database per Service Pattern
Esse padrão consiste ter 1 banco de dados por serviço
Vantagens:
- Baixo acoplamento
Desvantagens:
-
É necessário saber lidar corretamente com os dados distribuídos (sincronização de dados e com a consistência eventual)
-
Dados distribuídos requerem uma comunicação entre microsserviços
Shared Database Pattern
Compartilhamento de banco de dados entre serviços.
Muito comum na migração de um aplicações monolíticas para microsserviços.
Communication Patterns
-
Comunicação síncrona (synchronous communication)
-
Request <-> Response
-
Geralmente feita via REST API
Comunicação utilizando o protocolo HTTP/HTTPS.
-
-
Asynchronous communication (comunicação assíncrona)
Services Registry e Service Discovery
Monitoramento dos endereços/instâncias de cada serviço registrado nele, afim de fornecer essas informações para os serviços que necessitam disso. Além disso, o Service Registry faz o balanceamento de carga entre as instâncias de cada serviço, com o objetivo de buscar instância do serviço mais adequado para processar essa requisição.
OBS: esse padrão é uma “preocupação transversal” na arquitetura de microsserviços.
Preocupação transversal: são pontos envolvendo vários serviços dentro da arquitetura. Exemplos: Service Registry, configurações externas e segurança
Circuit Beaker
Prevenir falhas em cascatas na arquitetura.
Falhas em cascatas: caso um serviço esteja fora do ar (sem o uso de circuit beaker) as próximas requisições falharão e o mecanismo de retentativa reenviará essas requisições, dessa forma, sobrecarregando o servidor.
Possui a responsabilidade de garantir a resiliência e uma tratativa eficiente.
Também atua na política de retentativa, mais para isso é necessário implementar o método de fallback
(no caso do Spring).
Os 3 estados no circuit breaker:
-
Fechado: quando o circuit breaker nota um serviço fora do ar (serviço com falhas)
-
Meio aberto: quando o circuit breaker nota uma possível retomada/recuperação do serviço.Nesse cenário, o circuit breaker envia algumas “requisições testes” para verificar o status de funcionamento desse serviço.
-
Aberto: quando o circuit breaker nota um serviço no ar
API Gateway Pattern
Centraliza as entradas externas, afim de evitar a exposição desnecessário de serviços.
Realiza os roteamentos (redirecionamento) e filtros.
É responsável pelo balanceamento de carga, por estar conectado com o Service Registry.
OBS: a API Gateway é um cliente do Service Registry por estar registrado nele