Padrões de design de nuvem que dão suporte à eficiência de desempenho

Ao criar 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 mitigar os riscos originados de problemas específicos, o que pode afetar a confiabilidade, a segurança, o custo e as operações. Se não for mitigado, os riscos eventualmente levarão a ineficiências de desempenho. 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 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. Os padrões de design que dão suporte ao pilar de Eficiência de Desempenho abordam a escalabilidade, o ajuste de desempenho, a priorização da tarefa e a remoção de gargalos.

Padrões de design para eficiência de desempenho

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

Padrão Resumo
Solicitação/resposta assíncrona Melhora a capacidade de resposta e a escalabilidade dos sistemas desacoplando as fases de solicitação e resposta de interações para processos que não precisam de respostas imediatas. Usando um padrão assíncrono, você pode maximizar a simultaneidade no lado do servidor. Você pode usar esse padrão para agendar o trabalho a ser concluído como a capacidade permite.
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. Essa separação permite otimizar de maneiras que podem não ser possíveis com uma camada de serviço compartilhado. Ao lidar com clientes individuais de forma diferente, você pode otimizar o desempenho para restrições e funcionalidades de um cliente específico.
Bulkhead Introduz a segmentação entre componentes para isolar o raio de explosão de mau funcionamento. Esse design permite que cada bulkhead seja escalonável individualmente para atender às necessidades da tarefa encapsulada no bulkhead.
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. Esse padrão é especialmente útil com dados de leitura pesada que não mudam com frequência e podem tolerar uma certa quantidade de desatualização. A meta dessa implementação é fornecer melhor desempenho no sistema em geral descarregando esse tipo de dados para um cache em vez de sourcing-lo de seu armazenamento de dados.
Coreografia Coordena o comportamento de componentes distribuídos autônomos em uma carga de trabalho usando comunicação descentralizada e controlada por eventos. Esse padrão pode fornecer uma alternativa quando ocorrem gargalos de desempenho em uma topologia de orquestração centralizada.
Interruptor de Circuito Impede solicitações contínuas para uma dependência incorreta ou indisponível. Uma abordagem de repetição de erro pode levar à utilização excessiva de recursos durante a recuperação de dependência e também pode sobrecarregar o desempenho em uma dependência que está tentando a recuperaçã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. Esse padrão melhora a eficiência e o desempenho de editores de mensagens, assinantes e o próprio barramento de mensagens quando o sistema lida com grandes cargas de dados. Ele funciona diminuindo o tamanho das mensagens e garantindo que os consumidores recuperem dados de carga somente se necessário e em um momento oportuno.
Consumidores Concorrentes Aplica o processamento distribuído e simultâneo para lidar com itens com eficiência em uma fila. Esse modelo dá suporte à distribuição de carga em todos os nós de consumidor e ao dimensionamento dinâmico com base na profundidade da fila.
Consolidação de Recursos de Computação Otimiza e consolida recursos de computação aumentando a densidade. Esse padrão combina vários aplicativos ou componentes de uma carga de trabalho em uma infraestrutura compartilhada. Essa consolidação maximiza a utilização de recursos de computação usando a capacidade de nó sobressalente para reduzir o excesso de provisionamento. Orquestradores de contêiner são um exemplo comum. Instâncias de computação grandes (verticalmente dimensionadas) geralmente são usadas no pool de recursos para essas infraestruturas.
Comando e segregação de responsabilidade de consulta (CQRS) Separa as operações de leitura e gravação do modelo de dados de um aplicativo. Essa separação permite otimizações de desempenho e dimensionamento direcionadas para a finalidade específica de cada operação. Esse design é mais útil em aplicativos que têm uma alta taxa de leitura para gravação.
Carimbos de implantação Fornece uma abordagem para liberar uma versão específica de um aplicativo e sua infraestrutura como uma unidade controlada de implantação, com base na suposição de que as mesmas ou diferentes versões serão implantadas simultaneamente. Esse padrão geralmente se alinha às unidades de escala definidas em sua carga de trabalho: como a capacidade adicional é necessária além do que uma única unidade de escala fornece, um selo de implantação adicional é implantado para escalar horizontalmente.
Fornecimento de Evento Trata a alteração de estado como uma série de eventos, capturando-os em um log imutável somente acréscimo. Dependendo da carga de trabalho, esse padrão, geralmente combinado com CQRS, um design de domínio apropriado e instantâneo estratégico, pode melhorar o desempenho. As melhorias de desempenho ocorrem devido às operações somente acréscimos atômicas e à prevenção do bloqueio de banco de dados para gravações e leituras.
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. Ao descarregar o gerenciamento e a autenticação do usuário, você pode dedicar recursos de aplicativo a outras prioridades.
Gatekeeper Descarrega o processamento de solicitação especificamente para a imposição de segurança e controle de acesso antes e depois de encaminhar a solicitação para um nó de back-end. Esse padrão geralmente é usado para implementar a limitação em um nível de gateway em vez de implementar verificações de taxa no nível do nó. A coordenação do estado de taxa entre todos os nós não é inerentemente eficaz.
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. Esse design pode incorrer em menos latência do que um design no qual o cliente estabelece várias conexões. O cache também é comum em implementações de agregação porque minimiza chamadas para sistemas de back-end.
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. Adicionar um gateway de descarregamento ao processo de solicitação permite que você use menos recursos por nó porque a funcionalidade é centralizada no gateway. Você pode otimizar a implementação da funcionalidade descarregada independentemente do código do aplicativo. A funcionalidade fornecida pela plataforma descarregada já é provável que seja de alto desempenho.
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 distribuir o tráfego entre nós em seu sistema para equilibrar a carga.
Geode Implanta sistemas que operam em modos de disponibilidade ativo-ativos 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. Você pode usá-lo para atender seu aplicativo de uma região mais próxima da sua base de usuários distribuída. Isso reduz a latência eliminando o tráfego de longa distância e porque você compartilha a infraestrutura apenas entre os usuários que atualmente estão usando o mesmo geode.
Monitoramento do Ponto de Extremidade de Integridade Fornece uma maneira de monitorar a integridade ou status de um sistema expondo um ponto de extremidade especificamente projetado para essa finalidade. Você pode usar esses pontos de extremidade para melhorar o balanceamento de carga roteando o tráfego apenas para nós que são verificados como íntegros. Com a configuração adicional, você também pode obter métricas sobre a capacidade do nó disponível.
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. Os clientes são apontados para seu fragmento, partição ou ponto de extremidade, o que pode habilitar o particionamento dinâmico de dados para otimização de desempenho.
Exibição Materializada Usa exibições pré-compiladas de dados para otimizar a recuperação de dados. As exibições materializadas armazenam os resultados de computações ou consultas complexas sem exigir que o mecanismo de banco de dados ou o cliente recomputem para cada solicitação. Esse design reduz o consumo geral de recursos.
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 desempenho no trabalho mais sensível ao tempo.
Publicador/Assinante Separa os componentes de uma arquitetura substituindo a comunicação direta cliente a serviço ou cliente para serviços por comunicação por meio de um agente de mensagens intermediário ou barramento de eventos. A desacoplamento de editores de consumidores permite otimizar a computação e o código especificamente para a tarefa que o consumidor precisa executar para a mensagem específica.
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 permite o design intencional no desempenho da taxa de transferência porque a entrada de solicitações não precisa se correlacionar à taxa na qual são processadas.
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 desempenho e capacidade para detectar a utilização atual e rotear tarefas para um agente que tem capacidade. Você também pode usá-lo para priorizar a execução do trabalho de prioridade mais alta em relação ao trabalho de prioridade mais baixa.
Fragmentação Direciona o carregamento para um destino lógico específico para lidar com uma solicitação específica, habilitando a colocação para otimização. Quando você usa fragmentação em sua estratégia de dimensionamento, os dados ou o processamento são isolados para um fragmento, portanto, ele compete por recursos apenas com outras solicitações direcionadas a esse fragmento. Você também pode usar a fragmentação para otimizar com base na geografia.
Sidecar Estende a funcionalidade de um aplicativo encapsulando tarefas não primárias ou de corte cruzado em um processo complementar que existe junto com o aplicativo main. Você pode mover tarefas de corte cruzado para um único processo que pode ser dimensionado em várias instâncias do processo de main, o que reduz a necessidade de implantar funcionalidade duplicada para cada instância do aplicativo.
Hospedagem de Conteúdo Estático Otimiza a entrega de conteúdo estático para clientes de carga de trabalho usando uma plataforma de hospedagem projetada para essa finalidade. Descarregar a responsabilidade para um host externalizado ajuda a reduzir o congestionamento e permite que você use sua plataforma de aplicativo apenas para fornecer lógica de negócios.
Limitação Impõe limites à taxa ou taxa de transferência de solicitações de entrada a um recurso ou componente. Quando o sistema está sob alta demanda, esse padrão ajuda a atenuar o congestionamento que pode levar a gargalos de desempenho. Você também pode usá-lo para evitar proativamente cenários de vizinhos barulhentos.
Valet Key Concede acesso restrito à segurança a um recurso sem usar um recurso intermediário para fazer proxy do acesso. Isso descarrega o processamento como uma relação exclusiva entre o cliente e o recurso sem exigir um componente embaixador que precise lidar com todas as solicitações de cliente de maneira eficaz. O benefício de usar esse padrão é mais significativo quando o proxy não adiciona valor à transação.

Próximas etapas

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