"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Principais padrões de design de microsserviços que você deve conhecer

Principais padrões de design de microsserviços que você deve conhecer

Publicado em 01/11/2024
Navegar:858

Top icroservices Design Patterns You Should Know

Construir sistemas escaláveis, sustentáveis ​​e resilientes requer uma consciência de padrões de design importantes, que estão se tornando cada vez mais predominantes com a arquitetura de microsserviços. Os microsserviços, ao contrário das arquiteturas monolíticas, dividem os grandes sistemas em serviços independentes e mais gerenciáveis ​​que se conectam entre si por meio de uma rede. No entanto, esta natureza distribuída introduz complexidade em áreas como comunicação, gestão de dados e coordenação de serviços.

A adoção de padrões de design de microsserviços bem conhecidos pode ajudar a mitigar esses problemas e melhorar significativamente a confiabilidade e a eficácia do seu sistema. Os 7 principais padrões de design de microsserviços que todo desenvolvedor de software deve conhecer são abordados neste artigo.

1. Padrão de gateway de API

O API Gateway atua como um ponto de entrada único para todas as solicitações do cliente aos microsserviços. Em vez de fazer com que os clientes interajam diretamente com vários serviços, o API Gateway consolida essas solicitações, encaminha-as para os microsserviços apropriados e agrega respostas. Ele simplifica a comunicação cliente-servidor e fornece uma maneira de gerenciar questões transversais, como autenticação, registro e limitação de taxa.

Benefícios:

✓ Controle centralizado sobre o tratamento de solicitações/respostas.

✓ Simplifica as interações do lado do cliente, abstraindo a complexidade interna dos microsserviços.

✓ Permite uma implementação mais fácil de segurança, cache e limitação.

Exemplo:

Usando Express.js em Node.js para construir um API Gateway básico:

import express from 'express';
import proxy from 'express-http-proxy';

const app = express();

// Forward requests to microservice A
app.use('/serviceA', proxy('http://serviceA-url'));

// Forward requests to microservice B
app.use('/serviceB', proxy('http://serviceB-url'));

app.listen(3000, () => {
  console.log('API Gateway running on port 3000');
});

2. Padrão de disjuntor

Em uma arquitetura de microsserviços, as falhas de serviço são inevitáveis. O Circuit Breaker Pattern ajuda a evitar falhas em cascata monitorando chamadas de serviço e interrompendo chamadas adicionais para um serviço com falha quando um determinado limite de falha é atingido. Assim que o serviço for recuperado, o disjuntor permitirá chamadas novamente. Isso melhora a resiliência do sistema e evita carga desnecessária em serviços que já apresentam dificuldades.

Benefícios:

✓ Protege contra falhas em todo o sistema.

✓ Fornece respostas alternativas ou alternativas durante falhas.

✓ Melhora a robustez da arquitetura de microsserviços.

Exemplo:

Usando a biblioteca gambá em Node.js para um disjuntor:

import CircuitBreaker from 'opossum';
import axios from 'axios';

const options = {
  timeout: 5000,
  errorThresholdPercentage: 50,
  resetTimeout: 30000,
};

const circuitBreaker = new CircuitBreaker(() => axios.get('http://serviceB-url'), options);

circuitBreaker.fire()
  .then(response => console.log(response.data))
  .catch(err => console.log('Service B is down. Circuit is open.'));

3. Banco de dados por padrão de serviço

Cada microsserviço deve ter seu próprio banco de dados dedicado, permitindo que as equipes trabalhem de forma independente e reduzindo o forte acoplamento entre os serviços. Esse padrão de design garante que os microsserviços possam evoluir de forma independente, sem serem afetados por alterações em um esquema de banco de dados compartilhado.

Benefícios:

✓ Reduz a dependência e a contenção entre serviços.

✓ Facilita o dimensionamento independente e a evolução do esquema.

✓ Isola a propriedade e a responsabilidade dos dados.

4. Padrão Saga

Em uma arquitetura distribuída, lidar com transações que abrangem vários serviços pode ser um desafio. O Saga Pattern gerencia transações distribuídas usando uma série de transações locais que são coordenadas entre vários serviços. Cada serviço executa sua transação e aciona a próxima, com mecanismos de compensação para desfazer operações caso algo dê errado.

Benefícios:

✓ Permite transações distribuídas consistentes sem um gerenciador de transações centralizado.

✓ Suporta consistência eventual entre microsserviços.

✓ Permite a reversão de operações incompletas quando necessário.

Exemplo:

Em um sistema de comércio eletrônico, o serviço de pedidos pode criar um pedido, o serviço de pagamento processa o pagamento e o serviço de inventário atualiza os níveis de estoque. Se o pagamento falhar, as atualizações do pedido e do estoque precisarão ser revertidas, o que é feito por meio de transações de compensação.

5. Padrão de fornecimento de eventos

O Event Sourcing Pattern armazena o estado de um sistema como uma sequência de eventos. Em vez de salvar o estado atual em um banco de dados, os microsserviços armazenam eventos que representam mudanças de estado. Ao repetir esses eventos, o estado atual sempre pode ser reconstruído, o que fornece uma trilha de auditoria completa e permite mecanismos de recuperação sofisticados.

Benefícios:

✓ Fornece uma trilha de auditoria clara de todas as alterações.

✓ Permite a análise histórica reproduzindo eventos passados.

✓ Facilita a reconstrução do estado, se necessário.

Exemplo:

Em um sistema de contabilidade, eventos como "transação criada", "transação aprovada" e "transação concluída" são armazenados como eventos. O saldo atual pode ser recalculado reproduzindo todos os eventos de transação.

6. Padrão CQRS (segregação de responsabilidade de consulta de comando)

O padrão CQRS separa as operações de leitura e gravação em diferentes modelos. As operações de gravação são tratadas pelo modelo de comando e as operações de leitura são tratadas pelo modelo de consulta. Esse padrão é particularmente útil para aplicativos de alto desempenho onde as leituras são muito mais frequentes do que as gravações.

Benefícios:

✓ Otimiza o desempenho segregando preocupações de leitura/gravação.

✓ Suporta diferentes estratégias de escalabilidade para leituras e gravações.

✓ Permite modelos flexíveis adaptados a tarefas específicas.

7. Padrão de figo estrangulador

O Strangler Fig Pattern é uma estratégia de migração gradual que permite refatorar ou substituir partes de um monólito por microsserviços. À medida que novas funcionalidades são adicionadas, elas são criadas como um microsserviço. Com o tempo, o monólito é substituído, serviço por serviço, sem interromper todo o sistema de uma só vez.

Benefícios:

✓ Fornece um caminho sem interrupções para migrar de monólitos para microsserviços.

✓ Reduz o risco de reescritas completas do sistema.

✓ Permite melhoria e refatoração incrementais.

Exemplo:

Você pode começar extraindo o componente de autenticação do usuário de um aplicativo monolítico em um microsserviço independente, mantendo intactas outras partes do sistema. Com o tempo, mais componentes são movidos para microsserviços até que todo o sistema seja modularizado.

Conclusão

Existem muitas maneiras diferentes de resolver os problemas que surgem em sistemas distribuídos ao usar princípios de design de microsserviços. Construir uma arquitetura de microsserviços confiável e escalável requer uma compreensão desses padrões, independentemente de seus objetivos: gerenciar dados entre serviços, melhorar a comunicação entre serviços ou lidar com erros com elegância. Ao abordar requisitos e compensações específicos, cada um desses padrões contribui para a resiliência e o desempenho dos seus microsserviços.

Declaração de lançamento Este artigo está reproduzido em: https://dev.to/wallacefreitas/top-7-microservices-design-patterns-you-should-know-3c16?1 Se houver alguma violação, entre em contato com [email protected] para excluir isto
Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3