arquitetura

Cloud Patterns

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

Availability

Disponibilidade

A 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.

Data Management

Gerenciamento de dados

O 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 and Implementation

Design e implementação

Um 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.

Messaging

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.

Management and Monitoring

Gerenciamento e Monitoramento

Os 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.

Performance and Scalability

Desempenho e Escalabilidade

O 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.

Resiliency

Resiliência

A 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.

Security

Segurança

A 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ãoResumo
EmbaixadorCrie serviços auxiliares que enviam solicitações de rede em nome de um consumidor de serviço ou aplicativo.
Camada anticorrupçãoImplemente uma camada de fachada ou adaptador entre um aplicativo moderno e um sistema herdado.
Back-ends para Front-endsCrie serviços de back-end separados a serem consumidos por aplicativos de front-end específico ou interfaces.
BulkheadIsole os elementos de um aplicativo em pools para que, se um falhar, os outros continuem a funcionar.
Cache-AsideCarregar dados sob demanda em um cache de um armazenamento de dados.
CoreografiaPermita que cada serviço decida quando e como uma operação comercial será processada, em vez de depender de um orquestrador central.
Interruptor de CircuitoTrate 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çãoDivida uma mensagem grande em uma verificação de declaração e uma carga para evitar sobrecarregar um barramento de mensagem.
Transação de CompensaçãoDesfaça o trabalho executado por uma série de etapas, que juntas definem uma operação finalmente consistente.
Consumidores ConcorrentesHabilite vários consumidores simultâneos processar as mensagens recebidas no mesmo canal de mensagens.
Consolidação de Recursos de ComputaçãoConsolidar várias tarefas ou operações em uma única unidade de computação
CQRSSeparar as operações que leem dados de operações que atualizam dados usando interfaces separadas.
Fornecimento de EventoUse 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 ExternaMova as informações de configuração para fora do pacote de implantação de aplicativo para um local centralizado.
Identidade FederadaDelegar autenticação a um provedor de identidade externa.
GatekeeperProteger 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 GatewayUse um gateway para agregar várias solicitações individuais em uma única solicitação.
Descarregamento de GatewayDescarregue a funcionalidade de serviço especializado ou compartilhado para um proxy do gateway.
Roteamento de GatewayFaça o roteamento de solicitações para vários serviços usando um único ponto de extremidade.
Monitoramento do ponto de extremidade de integridadeImplemente verificações funcionais dentro de um aplicativo que ferramentas externas podem acessar por meio de pontos de extremidade expostos em intervalos regulares.
Tabela de ÍndiceCrie índices nos campos em armazenamentos de dados que são frequentemente referenciados por consultas.
Eleição de LíderCoordene 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 MaterializadaGere 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 FiltrosDividir uma tarefa que executa processamento complexo em uma série de elementos separados que podem ser reutilizados.
Fila de PrioridadePriorize 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/AssinantePermite 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 FilaUse uma fila que funcione como um buffer entre uma tarefa e um serviço que ela invoca para simplificar cargas pesadas intermitentes.
Tentar NovamentePermita 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 AgendadorCoordene um conjunto de ações em um conjunto distribuído de serviços e outros recursos remotos.
FragmentaçãoDivida um armazenamento de dados em um conjunto de partições horizontais ou fragmentos.
SidecarImplante os componentes de um aplicativo em um processo ou contêiner separado para fornecer isolamento e encapsulamento.
Hospedagem de Conteúdo EstáticoImplante o conteúdo estático para um serviço de armazenamento baseado em nuvem que pode enviá-las diretamente para o cliente.
StranglerMigre incrementalmente um sistema herdado substituindo gradualmente partes específicas de funcionalidade por serviços e aplicativos novos.
LimitaçãoControle o consumo de recursos usados por uma instância de um aplicativo, um locatário individual ou todo o serviço.
Valet KeyUse um token ou chave que fornece aos clientes acesso direto e restrito a um determinado recurso ou serviço.