Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
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 das cargas de trabalho e otimizar para o resultado desejado. Eles também podem ajudar a mitigar riscos originados de problemas específicos, que podem afetar a confiabilidade, a segurança, o custo e as operações. Se não forem mitigados, os riscos acabarão por conduzir a ineficiências de desempenho. 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 agnósticos ao fornecedor. Usar padrões bem conhecidos como forma de padronizar o design da carga de trabalho é um componente da excelência operacional.
Muitos padrões de design suportam diretamente um ou mais pilares de arquitetura. Os padrões de design que suportam o pilar Eficiência de Desempenho abordam a escalabilidade, o ajuste de desempenho, a priorização de tarefas e a remoção de gargalos.
A tabela a seguir resume os padrões de projeto de arquitetura que suportam as metas de eficiência de desempenho.
| Padrão | Resumo |
|---|---|
| Solicitação-resposta assíncrona | Melhora a capacidade de resposta e a escalabilidade dos sistemas, dissociando as fases de solicitação e resposta das 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 conforme a capacidade permitir. |
| Backends para Frontends | Individualiza a camada de serviço de uma carga de trabalho criando serviços separados que são exclusivos para uma interface de frontend específica. Essa separação permite otimizar de maneiras que podem não ser possíveis com uma camada de serviço compartilhado. Quando você lida com clientes individuais de forma diferente, pode otimizar o desempenho para as restrições e funcionalidades de um cliente específico. |
| Anteparas | Introduz segmentação entre componentes para isolar o raio de jateamento de avarias. Esse design permite que cada antepara seja individualmente escalável para atender às necessidades da tarefa encapsulada na antepara. |
| Cache-Aside | Otimiza o acesso a dados lidos com frequência introduzindo um cache que é preenchido sob demanda. O cache é então 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 obsoleto. O objetivo dessa implementação é fornecer um melhor desempenho no sistema em geral, descarregando esse tipo de dados para um cache, em vez de obtê-los 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 orientada a eventos. Esse padrão pode fornecer uma alternativa quando gargalos de desempenho ocorrem em uma topologia de orquestração centralizada. |
| Disjuntor | Impede solicitações contínuas para uma dependência com mau funcionamento ou indisponível. Uma abordagem de repetição ao 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 recuperar. |
| Verificação de sinistros | 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 do próprio barramento de mensagens quando o sistema lida com grandes cargas úteis de dados. Funciona diminuindo o tamanho das mensagens e garantindo que os consumidores recuperem dados de carga útil apenas se necessário e em tempo oportuno. |
| Consumidores concorrentes | Aplica processamento distribuído e simultâneo para lidar eficientemente com itens em uma fila. Esse modelo oferece suporte à distribuição de carga em todos os nós de consumidor e ao dimensionamento dinâmico baseado 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 provisionamento excessivo. Os orquestradores de contêineres são um exemplo comum. Instâncias de computação grandes (dimensionadas verticalmente) geralmente são usadas no pool de recursos dessas infraestruturas. |
| Segregação de responsabilidade de comando e consulta (CQRS) | Separa as operações de leitura e gravação do modelo de dados de um aplicativo. Essa separação permite otimizações direcionadas de desempenho e dimensionamento 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 Implementação | Fornece uma abordagem para lançar 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 a mesma versão ou versões diferentes serão implantadas simultaneamente. Esse padrão geralmente se alinha às unidades de escala definidas em sua carga de trabalho: como é necessária capacidade adicional além do que uma única unidade de escala fornece, um carimbo de implantação adicional é implantado para dimensionamento. |
| Fornecimento de Eventos | Trata a mudança de estado como uma série de eventos, capturando-os em um log imutável, somente acréscimo. Dependendo da sua carga de trabalho, esse padrão, geralmente combinado com CQRS, um design de domínio apropriado e snapshotting estratégico, pode melhorar o desempenho. As melhorias de desempenho devem-se às operações de acréscimo atômico e à prevenção do bloqueio do banco de dados para gravações e leituras. |
| Identidade federada | Delega confiança a 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 de usuários, você pode dedicar recursos do aplicativo a outras prioridades. |
| Gatekeeper | Descarrega o processamento de solicitações especificamente para aplicaçã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 da taxa entre todos os nós não é inerentemente eficiente. |
| 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 as chamadas para sistemas de back-end. |
| Descarregamento de gateway | Descarrega o processamento de solicitações 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. É provável que a funcionalidade fornecida pela plataforma descarregada já seja de alto desempenho. |
| Roteamento de gateway | Encaminha solicitações de rede de entrada para vários sistemas de back-end com base nas 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. |
| Geodo | Implanta sistemas que operam em modos de disponibilidade ativo-ativo em várias geografias. Esse padrão usa a replicação de dados para oferecer suporte ao ideal de que qualquer cliente possa se conectar a qualquer instância geográfica. Você pode usá-lo para servir seu aplicativo a partir de uma região mais próxima de sua base de usuários distribuídos. Isso reduz a latência, eliminando o tráfego de longa distância e porque você compartilha a infraestrutura apenas entre usuários que estão usando o mesmo geode. |
| Monitoramento de pontos finais de integridade | Fornece uma maneira de monitorar a integridade ou o status de um sistema expondo um ponto de extremidade projetado especificamente 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 disponível do nó. |
| 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 de armazenamento de dados. Os clientes são direcionados para seu fragmento, partição ou ponto de extremidade, que pode habilitar o particionamento dinâmico de dados para otimização de desempenho. |
| Vista Materializada | Usa exibições pré-computadas de dados para otimizar a recuperação de dados. As visualizações materializadas armazenam os resultados de cálculos ou consultas complexas sem exigir que o mecanismo de banco de dados ou o cliente recalcule 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. Separar os itens com base na prioridade do negócio permite que você concentre os esforços de desempenho no trabalho mais sensível ao tempo. |
| Editor/Subscritor | Desacopla componentes de uma arquitetura substituindo a comunicação direta cliente-a-serviço ou cliente-a-serviço pela comunicação por meio de um agente de mensagens intermediário ou barramento de eventos. A dissociação entre editores e consumidores permite otimizar a computação e o código especificamente para a tarefa que o consumidor precisa executar para a mensagem específica. |
| Queue-Based Nivelamento de carga | Controla o nível de solicitações ou tarefas de entrada armazenando-as em buffer em uma fila e permitindo que o processador de filas 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 estar correlacionada à taxa em que elas são processadas. |
| Supervisor de Agente Agendador | Distribui e redistribui tarefas de forma eficiente em um sistema com base em fatores observáveis no sistema. Esse padrão usa métricas de desempenho e capacidade para detetar a utilização atual e encaminhar tarefas para um agente com capacidade. Você também pode usá-lo para priorizar a execução de trabalhos de prioridade mais alta sobre trabalhos de prioridade mais baixa. |
| Partilha | Direciona a carga para um destino lógico específico para lidar com uma solicitação específica, permitindo o colocation para otimização. Quando você usa fragmentação em sua estratégia de dimensionamento, os dados ou o processamento são isolados em 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. |
| Carro lateral | Estende a funcionalidade de um aplicativo encapsulando tarefas não primárias ou transversais em um processo complementar que existe ao lado do aplicativo principal. Você pode mover tarefas transversais para um único processo que pode ser dimensionado em várias instâncias do processo principal, o que reduz a necessidade de implantar funcionalidade duplicada para cada instância do aplicativo. |
| Alojamento 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. Transferir a responsabilidade para um host externalizado ajuda a reduzir o congestionamento e permite que você use sua plataforma de aplicativos apenas para fornecer lógica de negócios. |
| Escalonamento | Impõe limites à taxa ou taxa de transferência de solicitações de entrada para um recurso ou componente. Quando o sistema está sob alta demanda, esse padrão ajuda a mitigar o congestionamento que pode levar a gargalos de desempenho. Você também pode usá-lo para evitar proativamente cenários vizinhos barulhentos. |
| Chave Valet | Concede acesso restrito de segurança a um recurso sem usar um recurso intermediário para proxy do acesso. Isso descarrega o processamento como uma relação exclusiva entre o cliente e o recurso sem a necessidade de um componente embaixador que precisa lidar com todas as solicitações do cliente de forma eficiente. O benefício de usar esse padrão é mais significativo quando o proxy não agrega valor à transação. |
Próximos passos
Analise os padrões de design de arquitetura que dão suporte aos outros pilares do Azure Well-Architected Framework: