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

Ao projetar arquiteturas de carga de trabalho, você deve usar padrões do setor que resolvam 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 reduzir os riscos provenientes de problemas específicos, o que pode afetar a segurança, o desempenho, o custo e as operações. Se não forem atenuados, esses riscos eventualmente causarão problemas de confiabilidade. Esses padrões são apoiados pela experiência do mundo real, são projetados para modelos operacionais e de escala de nuvem e são inerentemente independentes do fornecedor. Usar padrões conhecidos como uma forma de padronizar seu design de carga de trabalho é um componente de excelência operacional.

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

A tabela a seguir resume os padrões de design de arquitetura 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 para 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 forma diferente, você pode priorizar os esforços de confiabilidade com base nos padrões de acesso esperados do cliente.
Antepara Apresenta segmentação intencional e completa entre componentes para isolar o raio de explosão de maus funcionamentos. Essa estratégia de isolamento de falhas tenta conter falhas apenas no anteparo específico que está enfrentando o problema, evitando impacto em outros anteparos.
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 a 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á voltar ao armazenamento de dados de origem.
Disjuntor Evita solicitações contínuas para uma dependência indisponível ou com mau funcionamento. Ao fazer isso, esse padrão evita sobrecarregar uma dependência com falha. Você também pode usar esse padrão para acionar a degradação normal na carga de trabalho. Os disjuntores são frequentemente acoplados à recuperação automática para fornecer autopreservação e autorrecuperação.
Comprovante de Reivindicaçã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 desastres que muitas vezes 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 Compensatória 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 do sistema nativo 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 filas tratando os consumidores como réplicas, portanto, uma falha de instância não impede que outros consumidores processem mensagens de fila.
Configuração de Workload no Edge Gerencia a configuração de cargas de trabalho de borda distribuída tratando a nuvem como a fonte de verdade desejada, garantindo que a configuração permaneça disponível localmente durante interrupções de conectividade. Esse padrão melhora a confiabilidade dando suporte à reconciliação de configuração, detecção de descompasso e reversão para se recuperar de atualizações parciais ou configurações inválidas.
Fornecimento de eventos Trata alteração de estado como uma série de eventos, capturando-os em um registro imutável apenas de 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. Também facilita a reconstrução do estado se você precisar recuperar repositórios de estado.
Carimbos de implantação Isola locatários ou unidades de carga de trabalho em selos independentes que operam sem destino compartilhado. Uma falha em um selo contido nesse selo e não afeta locatários em outros selos. A implantação de selos entre regiões também oferece uma base para planejamento de redundância e recuperação.
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. Descarregar o gerenciamento e a 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 tratados 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ê mude o tratamento transitório de falhas de uma implementação distribuída entre clientes para uma implementação centralizada.
Descarregamento de gateway Descarga processamento de solicitação para um dispositivo gateway antes e depois de encaminhar a solicitação para um nó back-end. Transferir essa responsabilidade para um gateway reduz a complexidade do código do aplicativo nos 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-ativos em várias geografias. 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 o status de um sistema ao expor um endpoint projetado especificamente para essa finalidade. Você pode usar esse ponto de extremidade para gerenciar a integridade da carga de trabalho e para alertas e criação de painéis. Você também pode usá-lo como um sinal para autorrecuperação.
Consumidor idempotente Garante que o processamento da mesma mensagem mais de uma vez tenha o mesmo efeito que processá-la uma vez. Sistemas de mensagens que garantem a entrega pelo menos uma vez podem fornecer mensagens duplicadas, portanto, esse padrão permite que uma carga de trabalho use novas tentativas sem corromper dados.
Tabela de índice Otimiza a recuperação de dados em armazenamentos de dados distribuídos, permitindo que os clientes procurem 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 ao alcance de uma meta. Esse padrão atenua o efeito de mau funcionamento do nó redirecionando o trabalho de forma confiável. Ele também implementa o failover por meio de algoritmos de consenso quando um líder apresenta falhas.
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 misturados.
Fila de prioridade Garante que os itens de prioridade mais alta sejam processados e concluídos antes dos itens de prioridade mais baixa. A separação de itens com base na prioridade de negócios permite que você concentre os esforços de confiabilidade no trabalho mais crítico.
Publisher/Inscritor Desacopla componentes de uma arquitetura ao substituir a comunicação direta de cliente a serviço ou de cliente a serviços por comunicação via um agente intermediário de mensagens ou um barramento de eventos.
Nivelamento de Carga Baseada 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, desassociando a chegada de tarefas de seu processamento. Ele também pode isolar falhas no processamento da fila para que elas não afetem a entrada.
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 em caso de erro. 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 forma controlada. A mitigação de 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 ao decompor 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.
Supervisão do Agente de Agendamento Distribui e redistribui tarefas com eficiência em um sistema com base em fatores que são 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 as condições de corrida difíceis de resolver, o tratamento das mensagens contenciosas ou outras soluções alternativas para lidar com as mensagens ordenadas incorretamente que podem levar ao mau funcionamento.
Fragmentação Direciona a carga para um destino lógico específico para lidar com a solicitação específica, permitindo a colocação conjunta para otimização. Como os dados ou o processamento são isolados para o fragmento, um defeito em um fragmento permanece isolado nesse 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 quanto à taxa ou à taxa de transferência das solicitações de entrada a um recurso ou componente. Você pode projetar 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 graciosa.

Próximas etapas

Examine os padrões de design de arquitetura que dão suporte aos outros pilares da Estrutura Azure Well-Architected: