REL04-BP02 Implemente dependências fracamente acopladas - AWS Estrutura Well-Architected

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

REL04-BP02 Implemente dependências fracamente acopladas

As dependências, como sistemas de enfileiramento, sistemas de streaming, fluxos de trabalho e balanceadores de carga, têm acoplamento fraco. O acoplamento fraco ajuda a isolar o comportamento de um componente de outros componentes que dependem dele, aumentando a resiliência e a agilidade.

Dependências de desacoplamento, como sistemas de filas, sistemas de streaming e fluxos de trabalho, ajudam a minimizar o impacto de alterações ou falhas em um sistema. Essa separação impede o comportamento de um componente de afetar outros que dependem dele, melhorando a resiliência e a agilidade.

Em sistemas fortemente acoplados, alterações em um componente podem exigir mudanças em outros componentes que dependem dele, o que resulta em performance degradada em todos eles. O acoplamento fraco interrompe essa dependência para que os componentes dependentes só precisem saber a interface versionada e publicada. A implementação de um acoplamento fraco entre dependências isola uma falha em uma dependência para não afetar a outra.

O acoplamento fraco permite modificar o código ou adicionar recursos a um componente, minimizando o risco para outros componentes que dependem dele. Ele também permite resiliência granular em nível de componente, caso em que é possível aumentar a escala horizontalmente ou até mesmo alterar a implementação subjacente da dependência.

Para melhorar ainda mais a resiliência por meio do acoplamento fraco, torne as interações de componentes assíncronas sempre que possível. Esse modelo é adequado para qualquer interação que não precise de uma resposta imediata e em que uma confirmação de que uma solicitação foi registrada será suficiente. Envolve um componente que gera eventos e outro que os consome. Os dois componentes não se integram por meio de point-to-point interação direta, mas geralmente por meio de uma camada intermediária de armazenamento durável, como uma SQS fila da Amazon, uma plataforma de dados de streaming, como o Amazon Kinesis, ou. AWS Step Functions

Diagrama que mostra que dependências como sistemas de enfileiramento e balanceadores de carga têm acoplamento fraco

Figura 4: Dependências como sistemas de enfileiramento e balanceadores de carga têm acoplamento fraco

A Amazon SQS faz filas e AWS Step Functions são apenas duas maneiras de adicionar uma camada intermediária para um acoplamento solto. Arquiteturas orientadas a eventos também podem ser construídas usando a Nuvem AWS Amazon EventBridge, que pode abstrair clientes (produtores de eventos) dos serviços dos quais eles confiam (consumidores de eventos). O Amazon Simple Notification Service (AmazonSNS) é uma solução eficaz quando você precisa de mensagens de alto rendimento baseadas em push. many-to-many Usando SNS tópicos da Amazon, seus sistemas de editores podem distribuir mensagens para um grande número de endpoints de assinantes para processamento paralelo.

Embora as filas ofereçam várias vantagens, na maioria dos sistemas complexos em tempo real, as solicitações mais antigas do que um tempo limite (geralmente segundos) devem ser consideradas obsoletas (o cliente desistiu e não está mais esperando por uma resposta) e não devem ser processadas. Dessa forma, as solicitações mais recentes (e provavelmente ainda válidas) podem ser processadas.

Resultado desejado: a implementação de dependências com acoplamento fraco permite minimizar a área de superfície de falha em um nível de componente, o que ajuda a diagnosticar e resolver problemas. Ela também simplifica os ciclos de desenvolvimento, permitindo que as equipes implementem mudanças em um nível modular sem impactar a performance de outros componentes que dependem delas. Essa abordagem fornece a capacidade de aumentar a escala horizontalmente em nível de componente com base nas necessidades dos recursos, bem como na utilização de um componente que contribui para a redução de custos.

Práticas comuns que devem ser evitadas:

  • Implantar uma workload monolítica.

  • Invocação direta APIs entre níveis de carga de trabalho sem capacidade de failover ou processamento assíncrono da solicitação.

  • Acoplamento forte usando dados compartilhados. Sistemas com acoplamento fraco devem evitar o compartilhamento de dados por meio de bancos de dados compartilhados ou outras formas de armazenamento de dados com acoplamento forte, o que pode reintroduzir o acoplamento forte e impedir a escalabilidade.

  • Ignorar a pressão contrária. A workload deve ter a capacidade de diminuir ou interromper a entrada de dados quando um componente não puder processá-los na mesma velocidade.

Benefícios de implementar esta prática recomendada: o acoplamento fraco ajuda a isolar o comportamento de um componente de outros componentes que dependem dele, aumentando a resiliência e a agilidade. Uma falha em um componente é isolada dos demais.

Nível de risco exposto se esta prática recomendada não for estabelecida: Alto

Orientação para implementação

Implemente dependências com acoplamento fraco. Existem várias soluções que permitem criar aplicações com acoplamento fraco. Isso inclui serviços para implementar filas totalmente gerenciadas, fluxos de trabalho automatizados, reação a eventos e, APIs entre outros, que podem ajudar a isolar o comportamento dos componentes de outros componentes e, como tal, aumentar a resiliência e a agilidade.

Etapas de implementação

Recursos

Documentos relacionados:

Vídeos relacionados: