Padrões de design de nuvem que dão suporte à confiabilidade

Ao projetar arquiteturas de carga de trabalho, você deve usar padrões do setor que abordam desafios comuns. Os padrões podem ajudá-lo a fazer compensações intencionais dentro de cargas de trabalho e otimizar para o resultado desejado. Eles também podem ajudar a atenuar os riscos originados de problemas específicos, o que pode afetar a segurança, o desempenho, o custo e as operações. Se não forem mitigados, esses riscos eventualmente causarão problemas de confiabilidade. Esses padrões são apoiados pela experiência do mundo real, são projetados para escala de nuvem e modelos operacionais e são inerentemente independentes do fornecedor. Usar padrões conhecidos como uma maneira de padronizar seu design de carga de trabalho é um componente de excelência operacional.

Muitos padrões de design dão suporte direto a um ou mais pilares de arquitetura. Padrões de design que dão suporte ao pilar confiabilidade priorizam a disponibilidade da carga de trabalho, autopreservação, recuperação, integridade de dados e processamento e contenção de defeitos.

Padrões de design para confiabilidade

A tabela a seguir resume os padrões de design de nuvem que dão suporte às metas de confiabilidade.

Padrão Resumo
Embaixador Encapsula e gerencia as comunicações de rede descarregando tarefas transversais relacionadas à comunicação de rede. Os serviços auxiliares resultantes iniciam a comunicação em nome do cliente. Esse ponto de mediação oferece uma oportunidade de adicionar padrões de confiabilidade à comunicação de rede, como repetição ou buffer.
Back-ends para Front-ends Individualiza a camada de serviço de uma carga de trabalho criando serviços separados que são exclusivos de uma interface de front-end específica. Devido a essa separação, um mau funcionamento na camada de serviço que dá suporte a um cliente pode não afetar a disponibilidade do acesso de outro cliente. Ao tratar vários clientes de maneira diferente, você pode priorizar os esforços de confiabilidade com base nos padrões de acesso esperados do cliente.
Bulkhead Apresenta a segmentação intencional e completa entre componentes para isolar o raio de explosão de defeitos. Essa estratégia de isolamento de falha tenta conter falhas apenas no bulkhead que está enfrentando o problema, impedindo o impacto em outros bulkheads.
Cache-Aside Otimiza o acesso a dados de leitura frequente introduzindo um cache preenchido sob demanda. Em seguida, o cache é usado em solicitações subsequentes para os mesmos dados. O cache cria replicação de dados e, de maneiras limitadas, pode ser usado para preservar a disponibilidade de dados acessados com frequência se o armazenamento de dados de origem estiver temporariamente indisponível. Além disso, se houver um mau funcionamento no cache, a carga de trabalho poderá retornar ao armazenamento de dados de origem.
Interruptor de Circuito Impede solicitações contínuas para uma dependência com defeito ou indisponível. Ao fazer isso, esse padrão impede a sobrecarga de uma dependência com falha. Você também pode usar esse padrão para disparar degradação normal na carga de trabalho. Os disjuntores geralmente são acoplados à recuperação automática para fornecer autopreservação e autorrecuperação.
Verificação de declaração Separa os dados do fluxo de mensagens, fornecendo uma maneira de recuperar separadamente os dados relacionados a uma mensagem. Os barramentos de mensagens não fornecem a mesma confiabilidade e recuperação de desastre que geralmente estão presentes em armazenamentos de dados dedicados, portanto, separar os dados da mensagem pode fornecer maior confiabilidade para os dados subjacentes. Essa separação também permite uma abordagem de recuperação de fila de mensagens após um desastre.
Transação de Compensação Fornece um mecanismo para se recuperar de falhas revertendo os efeitos das ações aplicadas anteriormente. Esse padrão resolve falhas em caminhos de carga de trabalho críticos usando ações de compensação, que podem envolver processos como reverter diretamente as alterações de dados, quebrar bloqueios de transação ou até mesmo executar o comportamento nativo do sistema para reverter o efeito.
Consumidores Concorrentes Aplica o processamento distribuído e simultâneo para lidar com itens com eficiência em uma fila. Esse modelo cria redundância no processamento de fila tratando os consumidores como réplicas, de modo que uma falha de instância não impede que outros consumidores processem mensagens de fila.
Fornecimento de Evento Trata a alteração de estado como uma série de eventos, capturando-os em um log imutável e somente acréscimo. Você pode usar esse padrão quando um histórico confiável de alterações é crucial em um processo de negócios complexo. Ele também facilita a reconstrução do estado se você precisar recuperar repositórios de estado.
Identidade Federada Os delegados confiam em um provedor de identidade externo à carga de trabalho para gerenciar usuários e fornecer autenticação para seu aplicativo. O descarregamento do gerenciamento e da autenticação do usuário desloca a confiabilidade desses componentes para o provedor de identidade, que geralmente tem um SLA alto. Além disso, durante a recuperação de desastre de carga de trabalho, os componentes de autenticação provavelmente não precisam ser abordados como parte do plano de recuperação de carga de trabalho.
Agregação de Gateway Simplifica as interações do cliente com sua carga de trabalho agregando chamadas para vários serviços de back-end em uma única solicitação. Essa topologia permite que você alterne o tratamento de falhas transitórias de uma implementação distribuída entre clientes para uma implementação centralizada.
Descarregamento de Gateway Descarrega o processamento de solicitação para um dispositivo de gateway antes e depois de encaminhar a solicitação para um nó de back-end. Descarregar essa responsabilidade para um gateway reduz a complexidade do código do aplicativo em nós de back-end. Em alguns casos, o descarregamento substitui completamente a funcionalidade por um recurso confiável fornecido pela plataforma.
Roteamento de Gateway Roteia solicitações de rede de entrada para vários sistemas de back-end com base em intenções de solicitação, lógica de negócios e disponibilidade de back-end. O roteamento de gateway permite rotear o tráfego apenas para nós íntegros em seu sistema.
Geode Implanta sistemas que operam em modos de disponibilidade ativo-ativo em várias regiões geográficas. Esse padrão usa a replicação de dados para dar suporte ao ideal de que qualquer cliente possa se conectar a qualquer instância geográfica. Ele pode ajudar sua carga de trabalho a suportar uma ou mais interrupções regionais.
Monitoramento do Ponto de Extremidade de Integridade Fornece uma maneira de monitorar a integridade ou status de um sistema expondo um ponto de extremidade projetado especificamente para essa finalidade. Você pode usar esse ponto de extremidade para gerenciar a integridade da carga de trabalho e para alertas e painéis. Você também pode usá-lo como um sinal para correção de autorrecuperação.
Tabela de Índice Otimiza a recuperação de dados em armazenamentos de dados distribuídos, permitindo que os clientes pesquisem metadados para que os dados possam ser recuperados diretamente, evitando a necessidade de fazer verificações completas do armazenamento de dados. Como os clientes são apontados para seu fragmento, partição ou ponto de extremidade por meio de um processo de pesquisa, você pode usar esse padrão para facilitar uma abordagem de failover para acesso a dados.
Eleição de Líder Estabelece um líder de instâncias de um aplicativo distribuído. O líder coordena as responsabilidades relacionadas à realização de uma meta. Esse padrão atenua o efeito de falhas de nó redirecionando o trabalho de forma confiável. Ele também implementa o failover por meio de algoritmos de consenso quando um líder falha.
Pipes e Filtros Divide o processamento de dados complexos em uma série de estágios independentes para obter um resultado específico. A responsabilidade única de cada estágio permite atenção focada e evita a distração do processamento de dados combinados.
Fila de Prioridade Garante que os itens de prioridade mais alta sejam processados e concluídos antes dos itens de prioridade mais baixa. Separar itens com base na prioridade de negócios permite que você concentre os esforços de confiabilidade no trabalho mais crítico.
Publicador/Assinante Separa os componentes de uma arquitetura substituindo a comunicação direta cliente a serviço ou cliente para serviços por meio de um agente de mensagens intermediário ou barramento de eventos.
Nivelamento de Carga Baseado em Fila Controla o nível de solicitações ou tarefas de entrada armazenando-as em buffer em uma fila e permitindo que o processador de fila as manipule em um ritmo controlado. Essa abordagem pode fornecer resiliência contra picos repentinos na demanda, desacoplando a chegada de tarefas de seu processamento. Ele também pode isolar defeitos no processamento de fila para que eles não afetem a ingestão.
Limitação de taxa Controla a taxa de solicitações de cliente para reduzir erros de limitação e evitar cenários de repetição de erro não associados. Essa tática protege o cliente reconhecendo as limitações e os custos de comunicação com um serviço quando o serviço é projetado para evitar atingir os limites especificados. Ele funciona controlando o número e/ou o tamanho das operações que são enviadas ao serviço durante um período de tempo específico.
Tentar Novamente Resolve falhas que podem ser transitórias ou intermitentes repetindo determinadas operações, de maneira controlada. Atenuar falhas transitórias em um sistema distribuído é uma técnica fundamental para melhorar a resiliência de uma carga de trabalho.
Transações distribuídas do saga Coordena transações longas e potencialmente complexas decompondo o trabalho em sequências de transações menores e independentes. Cada transação também deve ter ações de compensação para reverter falhas na execução e manter a integridade. Como transações monolíticas em vários sistemas distribuídos geralmente são impossíveis, esse padrão fornece consistência e confiabilidade implementando atomicidade e compensação.
Supervisor de Agente do Agendador Distribui e redistribui tarefas com eficiência em um sistema com base em fatores observáveis no sistema. Esse padrão usa métricas de integridade para detectar falhas e redirecionar tarefas para um agente íntegro, a fim de atenuar os efeitos de um mau funcionamento.
Comboio Sequencial Mantém a entrada simultânea de mensagens, ao mesmo tempo em que dá suporte ao processamento em uma ordem definida. Esse padrão pode eliminar condições de corrida difíceis de solucionar problemas, tratamento de mensagens controversas ou outras soluções alternativas para lidar com mensagens ordenadas incorretamente que podem levar a falhas.
Fragmentação Direciona o carregamento para um destino lógico específico para lidar com a solicitação específica, permitindo a colocação para otimização. Como os dados ou o processamento são isolados para o fragmento, um mau funcionamento em um fragmento permanece isolado para esse fragmento.
Estrangulador Fig Fornece uma abordagem para substituir sistematicamente os componentes de um sistema em execução por novos componentes, geralmente durante uma migração ou modernização do sistema. A abordagem incremental desse padrão pode ajudar a reduzir os riscos durante uma transição.
Limitação Impõe limites à taxa ou à taxa de transferência de solicitações de entrada para um recurso ou componente. Você pode criar os limites para ajudar a evitar o esgotamento de recursos que podem levar a falhas. Você também pode usar esse padrão como um mecanismo de controle em um plano de degradação normal.

Próximas etapas

Examine os padrões de design de nuvem que dão suporte a outros pilares do Azure Well-Architected Framework: