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 DadosO 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çãoUm 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. |
|
Sistema de mensagensA 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 |