Compartilhar via


Padrões de Design de Nuvem

Esses padrões de design são úteis para a criação de aplicativos confiáveis, dimensionáveis e seguros na nuvem.

Cada padrão descreve o problema ao qual o padrão se destina, as considerações para a aplicação do padrão e um exemplo com base no Microsoft Azure. A maioria dos padrões inclui exemplos de código ou snippets de código que mostram como implementar o padrão no Azure. No entanto, a maioria dos padrões é relevante para qualquer sistema distribuído, se hospedados no Azure ou em outras plataformas de nuvem.

As cargas de trabalho na nuvem são propensas às armadilhas da computação distribuída. Alguns exemplos de falácias de design de nuvem são:

  • A rede é confiável
  • A latência é zero
  • A largura de banda é infinita
  • A rede é segura
  • A topologia não muda
  • Há um administrador
  • O controle de versão de componentes é simples
  • A implementação da observabilidade pode ser atrasada

Os padrões de design não eliminam noções como essas, mas podem ajudar a conscientizar, compensar e mitigá-las. Cada padrão de nuvem tem suas próprias vantagens e desvantagens. Você precisa prestar mais atenção ao motivo pelo qual está escolhendo um determinado padrão do que à forma de implementá-lo.

Desafios de desenvolvimento em nuvem

Gerenciamento de dados

Gerenciamento de Dados

O gerenciamento de dados é o elemento principal de aplicativos em nuvem e influencia a maioria dos atributos de qualidade. Os dados geralmente são hospedados em locais diferentes e em vários servidores para fins de desempenho, escalabilidade ou disponibilidade. Isso pode apresentar vários desafios. Por exemplo, deve ser mantida a consistência dos dados e dados normalmente precisam ser sincronizados em diferentes locais.

Design e implementação

Design e implementação

Um bom design abrange a consistência e a coerência no design do componente e implantação, facilidade de manutenção para simplificar a administração e desenvolvimento e capacidade de reutilização para permitir que componentes e subsistemas possam ser usados em outros aplicativos e cenários. As decisões tomadas durante a fase de design e implementação impactam significativamente a qualidade e o custo total de propriedade de aplicativos e serviços hospedados na nuvem.

Ícone de mensagens

Sistema de mensagens

A natureza distribuída dos aplicativos de nuvem exige uma infraestrutura de mensagens que conecta os componentes e serviços, idealmente de uma maneira flexível para maximizar a escalabilidade. O sistema de mensagens assíncronas é amplamente usado e fornece muitos benefícios, mas também traz desafios, como a ordenação de mensagens, o gerenciamento de mensagens suspeitas, a idempotência e muito mais.

Catálogo de padrões

Padrão Resumo Categoria
Embaixador Crie serviços auxiliares que enviam solicitações de rede em nome de um consumidor de serviço ou aplicativo. Design e implementação,
Excelência operacional
Camada anticorrupção Implemente uma camada de fachada ou adaptador entre um aplicativo moderno e um sistema herdado. Design e implementação,
Excelência operacional
Solicitação/resposta assíncrona Desvincule o processamento de back-end de um host de front-end: quando o processamento de back-end precisa ser assíncrono, mas o front-end ainda precisa de uma resposta clara. Sistema de mensagens
Back-ends para Front-ends Crie serviços de back-end separados a serem consumidos por aplicativos de front-end específico ou interfaces. Design e implementação
Bulkhead Isole os elementos de um aplicativo em pools para que, se um falhar, os outros continuem a funcionar. Confiabilidade
Cache-Aside Carregar dados sob demanda em um cache de um armazenamento de dados. Gerenciamento de dados,
Eficiência de desempenho
Coreografia Permita que cada serviço decida quando e como uma operação comercial será processada, em vez de depender de um orquestrador central. Mensagens,
Eficiência de desempenho
Interruptor de Circuito Trate as falhas que possam consumir uma quantidade variável de tempo para serem corrigidas ao se conectar a um serviço ou recurso remoto. Confiabilidade
Verificação de declaração Divida uma mensagem grande em uma verificação de declaração e uma carga para evitar sobrecarregar um barramento de mensagem. Sistema de mensagens
Transação de Compensação Desfaça o trabalho executado por uma série de etapas que, juntas, definem uma operação que acabe sendo consistente. Confiabilidade
Consumidores Concorrentes Habilite vários consumidores simultâneos para processar as mensagens recebidas no mesmo canal de mensagens. Sistema de mensagens
Consolidação de Recursos de Computação Consolidar várias tarefas ou operações em uma única unidade de computação Design e implementação
CQRS Separar as operações que leem dados de operações que atualizam dados usando interfaces separadas. Gerenciamento de dados,
Design e implementação,
Eficiência de desempenho
Carimbos de implantação Implante várias cópias independentes de componentes de aplicativos, incluindo armazenamentos de dados. Confiabilidade
Eficiência de desempenho
Configuração de carga de trabalho de borda A grande variedade de sistemas e dispositivos na área de produção pode dificultar a configuração da carga de trabalho. Design e implementação
Fornecimento de Eventos Use um repositório somente de acréscimo para registrar a série inteira de eventos que descrevem as ações realizadas nos dados em um domínio. Gerenciamento de dados,
Eficiência de desempenho
Repositório de configuração externo Mova as informações de configuração para fora do pacote de implantação de aplicativo para um local centralizado. Design e implementação,
Excelência operacional
Identidade Federada Delegar autenticação a um provedor de identidade externa. Segurança
Gatekeeper Proteger aplicativos e serviços usando uma instância de host dedicado que atua como intermediário entre clientes e o aplicativo ou serviço, valida e corrige solicitações e passa solicitações e dados entre eles. Segurança
Agregação de Gateway Use um gateway para agregar várias solicitações individuais em uma única solicitação. Design e implementação,
Excelência operacional
Descarregamento de Gateway Descarregue a funcionalidade de serviço especializado ou compartilhado para um proxy do gateway. Design e implementação,
Excelência operacional
Roteamento de Gateway Faça o roteamento de solicitações para vários serviços usando um único ponto de extremidade. Design e implementação,
Excelência operacional
Nó geográfico Implante serviços de back-end em um conjunto de nós geográficos. Cada um deles pode atender solicitações de cliente em qualquer região. Confiabilidade
Excelência operacional
Monitoramento do Ponto de Extremidade de Integridade Implemente verificações funcionais dentro de um aplicativo cujas ferramentas externas podem acessar por meio de pontos de extremidade expostos em intervalos regulares. Confiabilidade
Excelência operacional
Tabela de Índice Crie índices nos campos em armazenamentos de dados que são frequentemente referenciados por consultas. Gerenciamento de dados,
Eficiência de desempenho
Eleição de Líder Coordene as ações executadas por uma coleção de instâncias de tarefa de colaboração em um aplicativo distribuído elegendo uma instância como a líder que assume a responsabilidade por gerenciar as demais instâncias. Design e implementação,
Confiabilidade
Exibição Materializada Gere exibições pré-preenchidas nos dados em um ou mais armazenamentos de dados quando os dados não estiverem formatados como o ideal para as operações de consulta necessárias. Gerenciamento de dados,
Excelência operacional,
Eficiência de desempenho
Pipes e Filtros Dividir uma tarefa que executa processamento complexo em uma série de elementos separados que podem ser reutilizados. Design e implementação,
Sistema de mensagens
Fila de Prioridade Priorize as solicitações enviadas a serviços para que as solicitações com uma prioridade mais alta sejam recebidas e processadas mais rapidamente do que aquelas com uma prioridade mais baixa. Mensagens,
Eficiência de desempenho
Publicador/Assinante Permite a um aplicativo anunciar eventos para vários consumidores de seu interesse assincronamente, sem acoplar os remetentes aos destinatários. Sistema de mensagens
Nivelamento de Carga Baseado em Fila Use uma fila que funcione como um buffer entre uma tarefa e um serviço que ela invoca para simplificar cargas pesadas intermitentes. Confiabilidade
Mensagens,
Resiliência,
Eficiência de desempenho
Padrão de limitação de taxa Padrão de limitação para evitar ou minimizar erros de limitação relacionados a esses limites e prever com mais precisão a taxa de transferência. Confiabilidade
Repetir Permita que um aplicativo trate falhas previstas e temporárias quando tentar se conectar a um serviço ou recurso de rede ao repetir de forma transparente uma operação que falhou anteriormente. Confiabilidade
Saga Gerencie a consistência de dados entre microsserviços em cenários de transações distribuídas. Uma saga é uma sequência de transações que atualiza cada serviço e publica uma mensagem ou evento para disparar a próxima etapa de transação. Sistema de mensagens
Supervisor de Agente do Agendador Coordene um conjunto de ações em um conjunto distribuído de serviços e outros recursos remotos. Mensagens,
Confiabilidade
Comboio Sequencial Processe um conjunto de mensagens relacionadas em uma ordem definida, sem bloquear o processamento de outros grupos de mensagens. Sistema de mensagens
Fragmentação Divida um armazenamento de dados em um conjunto de partições horizontais ou fragmentos. Gerenciamento de dados,
Eficiência de desempenho
Sidecar Implante os componentes de um aplicativo em um processo ou contêiner separado para fornecer isolamento e encapsulamento. Design e implementação,
Excelência operacional
Hospedagem de Conteúdo Estático Implante conteúdo estático em um serviço de armazenamento baseado em nuvem que pode enviá-lo diretamente para o cliente. Design e implementação,
Gerenciamento de dados,
Eficiência de desempenho
Estrangulador Fig Migre incrementalmente um sistema herdado substituindo gradualmente partes específicas de funcionalidade por serviços e aplicativos novos. Design e implementação,
Excelência operacional
Limitação Controle o consumo de recursos usados por uma instância de um aplicativo, um locatário individual ou todo o serviço. Confiabilidade
Eficiência de desempenho
Valet Key Use um token ou chave que fornece aos clientes acesso direto e restrito a um determinado recurso ou serviço. Gerenciamento de dados,
Segurança