Cloud Patterns by Microsoft
https://docs.microsoft.com/pt-br/azure/architecture/patterns/
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.
Desafios de desenvolvimento em nuvem
DisponibilidadeA disponibilidade é a proporção de tempo que o sistema está funcionando, geralmente medido como uma porcentagem do tempo de atividade. Ele pode ser afetado por erros de sistema, problemas de infraestrutura, ataques maliciosos e carga do sistema. Os aplicativos de nuvem normalmente fornecem aos usuários um contrato de nível de serviço (SLA) e, portanto, os aplicativos devem ser criados para maximizar a disponibilidade. |
|
Gerenciamento de dadosO gerenciamento de dados é o elemento principal de aplicativos em nuvem e influencia a maioria dos atributos de qualidade. Os dados normalmente são hospedados em diferentes locais e em vários servidores por motivos como desempenho, escalabilidade ou a disponibilidade, e isso pode apresentar uma série de 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 fatores como 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 em outros cenários. As decisões tomadas durante a fase de design e implementação têm um grande impacto sobre a qualidade e o custo total de propriedade de aplicativos e serviços hospedados pela nuvem. |
|
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. |
|
Gerenciamento e MonitoramentoOs aplicativos em nuvem são executados em um data center remoto em que você não tem controle total da infraestrutura ou, em alguns casos, do sistema operacional. Isso pode tornar o gerenciamento e o monitoramento mais difíceis do que uma implantação local. Os aplicativos devem expor informações de tempo de execução que operadores e administradores podem usar para gerenciar e monitorar o sistema, bem como suporte para alteração requisitos de negócios e personalização sem a necessidade do aplicativo a ser interrompido ou reimplantado. |
|
Desempenho e EscalabilidadeO desempenho é uma indicação da capacidade de resposta de um sistema para executar qualquer ação dentro de um determinado intervalo, enquanto a escalabilidade é a capacidade de um sistema de lidar com o aumento de carga sem impacto no desempenho, fazendo com que os recursos disponíveis sejam prontamente aumentados. Aplicativos de nuvem normalmente encontram cargas de trabalho variável e picos na atividade. Prever esses picos, especialmente em um cenário de multilocatário, é quase impossível. Em vez disso, os aplicativos devem ser capazes de expansão dentro dos limites para atender aos picos de demanda, e de redução de recursos quando a demanda diminui. Os problemas de escalabilidade de computação atingem não apenas instâncias, mas outros elementos, como o armazenamento de dados, infraestrutura de mensagens e muito mais. |
|
ResiliênciaA resiliência é a capacidade de um sistema para tratar normalmente e se recuperar de falhas. A natureza da hospedagem em nuvem, em que os aplicativos costumam ser multilocatário, usam serviços de plataforma compartilhada, competem por recursos e largura de banda, comunicam-se pela Internet e são executados no hardware de mercadoria significa que há uma maior probabilidade de que ocorram falhas tanto transitórias quanto mais permanentes. A detecção de falhas e a recuperação rápida e eficaz são necessárias para manter a resiliência. |
|
SegurançaA segurança é a capacidade de um sistema impedir ações acidentais ou mal-intencionadas fora do uso projetado e evitar a divulgação ou a perda de informações. Os aplicativos de nuvem são expostos na Internet fora dos limites de locais confiáveis e geralmente são abertos ao público e podem atender a usuários não confiáveis. Os aplicativos devem ser criados e implantados de maneira que protejam contra ataques mal-intencionados, restrinjam o acesso a somente usuários aprovados e protejam dados confidenciais. |
Catálogo de padrões
Padrão | Resumo |
---|---|
Embaixador | Crie serviços auxiliares que enviam solicitações de rede em nome de um consumidor de serviço ou aplicativo. |
Camada anticorrupção | Implemente uma camada de fachada ou adaptador entre um aplicativo moderno e um sistema herdado. |
Back-ends para Front-ends | Crie serviços de back-end separados a serem consumidos por aplicativos de front-end específico ou interfaces. |
Bulkhead | Isole os elementos de um aplicativo em pools para que, se um falhar, os outros continuem a funcionar. |
Cache-Aside | Carregar dados sob demanda em um cache de um armazenamento de dados. |
Coreografia | Permita que cada serviço decida quando e como uma operação comercial será processada, em vez de depender de um orquestrador central. |
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. |
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. |
Transação de Compensação | Desfaça o trabalho executado por uma série de etapas, que juntas definem uma operação finalmente consistente. |
Consumidores Concorrentes | Habilite vários consumidores simultâneos processar as mensagens recebidas no mesmo canal de mensagens. |
Consolidação de Recursos de Computação | Consolidar várias tarefas ou operações em uma única unidade de computação |
CQRS | Separar as operações que leem dados de operações que atualizam dados usando interfaces separadas. |
Fornecimento de Evento | 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. |
Armazenamento de Configuração Externa | Mova as informações de configuração para fora do pacote de implantação de aplicativo para um local centralizado. |
Identidade Federada | Delegar autenticação a um provedor de identidade externa. |
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. |
Agregação de Gateway | Use um gateway para agregar várias solicitações individuais em uma única solicitação. |
Descarregamento de Gateway | Descarregue a funcionalidade de serviço especializado ou compartilhado para um proxy do gateway. |
Roteamento de Gateway | Faça o roteamento de solicitações para vários serviços usando um único ponto de extremidade. |
Monitoramento do ponto de extremidade de integridade | Implemente verificações funcionais dentro de um aplicativo que ferramentas externas podem acessar por meio de pontos de extremidade expostos em intervalos regulares. |
Tabela de Índice | Crie índices nos campos em armazenamentos de dados que são frequentemente referenciados por consultas. |
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 ao escolher uma instância como o líder que assume a responsabilidade de gerenciamento de outras instâncias. |
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. |
Pipes e Filtros | Dividir uma tarefa que executa processamento complexo em uma série de elementos separados que podem ser reutilizados. |
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. |
Publicador/Assinante | Permite a um aplicativo anunciar eventos para vários consumidores de seu interesse assincronamente, sem acoplar os remetentes aos destinatários. |
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. |
Tentar Novamente | 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. |
Supervisor de Agente do Agendador | Coordene um conjunto de ações em um conjunto distribuído de serviços e outros recursos remotos. |
Fragmentação | Divida um armazenamento de dados em um conjunto de partições horizontais ou fragmentos. |
Sidecar | Implante os componentes de um aplicativo em um processo ou contêiner separado para fornecer isolamento e encapsulamento. |
Hospedagem de Conteúdo Estático | Implante o conteúdo estático para um serviço de armazenamento baseado em nuvem que pode enviá-las diretamente para o cliente. |
Strangler | Migre incrementalmente um sistema herdado substituindo gradualmente partes específicas de funcionalidade por serviços e aplicativos novos. |
Limitação | Controle o consumo de recursos usados por uma instância de um aplicativo, um locatário individual ou todo o serviço. |
Valet Key | Use um token ou chave que fornece aos clientes acesso direto e restrito a um determinado recurso ou serviço. |