Padrões de design na nuvemCloud Design Patterns

Esses padrões de design são úteis para a criação de aplicativos confiáveis, dimensionáveis e seguros na nuvem.These design patterns are useful for building reliable, scalable, secure applications in the cloud.

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.Each pattern describes the problem that the pattern addresses, considerations for applying the pattern, and an example based on 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.Most of the patterns include code samples or snippets that show how to implement the pattern on Azure. No entanto, a maioria dos padrões é relevante para qualquer sistema distribuído, se hospedados no Azure ou em outras plataformas de nuvem.However, most of the patterns are relevant to any distributed system, whether hosted on Azure or on other cloud platforms.

Desafios de desenvolvimento em nuvemChallenges in cloud development

Availability

DisponibilidadeAvailability

A disponibilidade é a proporção de tempo que o sistema está funcionando, geralmente medido como uma porcentagem do tempo de atividade.Availability is the proportion of time that the system is functional and working, usually measured as a percentage of uptime. Ele pode ser afetado por erros de sistema, problemas de infraestrutura, ataques maliciosos e carga do sistema.It can be affected by system errors, infrastructure problems, malicious attacks, and system load. 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.Cloud applications typically provide users with a service level agreement (SLA), so applications must be designed to maximize availability.

Data Management

Gerenciamento de dadosData Management

O gerenciamento de dados é o elemento principal de aplicativos em nuvem e influencia a maioria dos atributos de qualidade.Data management is the key element of cloud applications, and influences most of the quality attributes. 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.Data is typically hosted in different locations and across multiple servers for reasons such as performance, scalability or availability, and this can present a range of challenges. Por exemplo, deve ser mantida a consistência dos dados e dados normalmente precisam ser sincronizados em diferentes locais.For example, data consistency must be maintained, and data will typically need to be synchronized across different locations.

Design and Implementation

Design e implementaçãoDesign and Implementation

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.Good design encompasses factors such as consistency and coherence in component design and deployment, maintainability to simplify administration and development, and reusability to allow components and subsystems to be used in other applications and in other scenarios. 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.Decisions made during the design and implementation phase have a huge impact on the quality and the total cost of ownership of cloud hosted applications and services.

Messaging

MensagensMessaging

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.The distributed nature of cloud applications requires a messaging infrastructure that connects the components and services, ideally in a loosely coupled manner in order to maximize scalability. 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.Asynchronous messaging is widely used, and provides many benefits, but also brings challenges such as the ordering of messages, poison message management, idempotency, and more.

Management and Monitoring

Gerenciamento e MonitoramentoManagement and Monitoring

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.Cloud applications run in a remote datacenter where you do not have full control of the infrastructure or, in some cases, the operating system. Isso pode tornar o gerenciamento e o monitoramento mais difíceis do que uma implantação local.This can make management and monitoring more difficult than an on-premises deployment. 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.Applications must expose runtime information that administrators and operators can use to manage and monitor the system, as well as supporting changing business requirements and customization without requiring the application to be stopped or redeployed.

Performance and Scalability

Desempenho e EscalabilidadePerformance and Scalability

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.Performance is an indication of the responsiveness of a system to execute any action within a given time interval, while scalability is ability of a system either to handle increases in load without impact on performance or for the available resources to be readily increased. Aplicativos de nuvem normalmente encontram cargas de trabalho variável e picos na atividade.Cloud applications typically encounter variable workloads and peaks in activity. Prever esses picos, especialmente em um cenário de multilocatário, é quase impossível.Predicting these, especially in a multitenant scenario, is almost impossible. 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.Instead, applications should be able to scale out within limits to meet peaks in demand, and scale in when demand decreases. 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.Scalability concerns not just compute instances, but other elements such as data storage, messaging infrastructure, and more.

Resiliency

ResiliênciaResiliency

A resiliência é a capacidade de um sistema para tratar normalmente e se recuperar de falhas.Resiliency is the ability of a system to gracefully handle and recover from failures. 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.The nature of cloud hosting, where applications are often multitenant, use shared platform services, compete for resources and bandwidth, communicate over the Internet, and run on commodity hardware means there is an increased likelihood that both transient and more permanent faults will arise. A detecção de falhas e a recuperação rápida e eficaz são necessárias para manter a resiliência.Detecting failures, and recovering quickly and efficiently, is necessary to maintain resiliency.

Security

SegurançaSecurity

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.Security is the capability of a system to prevent malicious or accidental actions outside of the designed usage, and to prevent disclosure or loss of information. 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.Cloud applications are exposed on the Internet outside trusted on-premises boundaries, are often open to the public, and may serve untrusted users. 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.Applications must be designed and deployed in a way that protects them from malicious attacks, restricts access to only approved users, and protects sensitive data.

Catálogo de padrõesCatalog of patterns

PadrãoPattern ResumoSummary
EmbaixadorAmbassador Crie serviços auxiliares que enviam solicitações de rede em nome de um consumidor de serviço ou aplicativo.Create helper services that send network requests on behalf of a consumer service or application.
Camada anticorrupçãoAnti-Corruption Layer Implemente uma camada de fachada ou adaptador entre um aplicativo moderno e um sistema herdado.Implement a façade or adapter layer between a modern application and a legacy system.
Back-ends para Front-endsBackends for Frontends Crie serviços de back-end separados a serem consumidos por aplicativos de front-end específico ou interfaces.Create separate backend services to be consumed by specific frontend applications or interfaces.
BulkheadBulkhead Isole os elementos de um aplicativo em pools para que, se um falhar, os outros continuem a funcionar.Isolate elements of an application into pools so that if one fails, the others will continue to function.
Cache-AsideCache-Aside Carregar dados sob demanda em um cache de um armazenamento de dados.Load data on demand into a cache from a data store
DisjuntorCircuit Breaker 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.Handle faults that might take a variable amount of time to fix when connecting to a remote service or resource.
Verificação de declaraçãoClaim Check Divida uma mensagem grande em uma verificação de declaração e uma carga para evitar sobrecarregar um barramento de mensagem.Split a large message into a claim check and a payload to avoid overwhelming a message bus.
Transação de CompensaçãoCompensating Transaction Desfaça o trabalho executado por uma série de etapas, que juntas definem uma operação finalmente consistente.Undo the work performed by a series of steps, which together define an eventually consistent operation.
Consumidores ConcorrentesCompeting Consumers Habilite vários consumidores simultâneos processar as mensagens recebidas no mesmo canal de mensagens.Enable multiple concurrent consumers to process messages received on the same messaging channel.
Consolidação de Recursos de ComputaçãoCompute Resource Consolidation Consolidar várias tarefas ou operações em uma única unidade de computaçãoConsolidate multiple tasks or operations into a single computational unit
CQRSCQRS Separar as operações que leem dados de operações que atualizam dados usando interfaces separadas.Segregate operations that read data from operations that update data by using separate interfaces.
Fornecimento de EventoEvent Sourcing 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.Use an append-only store to record the full series of events that describe actions taken on data in a domain.
Armazenamento de Configuração ExternaExternal Configuration Store Mova as informações de configuração para fora do pacote de implantação de aplicativo para um local centralizado.Move configuration information out of the application deployment package to a centralized location.
Identidade FederadaFederated Identity Delegar autenticação a um provedor de identidade externa.Delegate authentication to an external identity provider.
GatekeeperGatekeeper 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.Protect applications and services by using a dedicated host instance that acts as a broker between clients and the application or service, validates and sanitizes requests, and passes requests and data between them.
Agregação de GatewayGateway Aggregation Use um gateway para agregar várias solicitações individuais em uma única solicitação.Use a gateway to aggregate multiple individual requests into a single request.
Descarregamento de GatewayGateway Offloading Descarregue a funcionalidade de serviço especializado ou compartilhado para um proxy do gateway.Offload shared or specialized service functionality to a gateway proxy.
Roteamento de GatewayGateway Routing Faça o roteamento de solicitações para vários serviços usando um único ponto de extremidade.Route requests to multiple services using a single endpoint.
Monitoramento do ponto de extremidade de integridadeHealth Endpoint Monitoring Implemente verificações funcionais dentro de um aplicativo que ferramentas externas podem acessar por meio de pontos de extremidade expostos em intervalos regulares.Implement functional checks in an application that external tools can access through exposed endpoints at regular intervals.
Tabela de ÍndiceIndex Table Crie índices nos campos em armazenamentos de dados que são frequentemente referenciados por consultas.Create indexes over the fields in data stores that are frequently referenced by queries.
Eleição de LíderLeader Election 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.Coordinate the actions performed by a collection of collaborating task instances in a distributed application by electing one instance as the leader that assumes responsibility for managing the other instances.
Exibição MaterializadaMaterialized View 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.Generate prepopulated views over the data in one or more data stores when the data isn't ideally formatted for required query operations.
Pipes e FiltrosPipes and Filters Dividir uma tarefa que executa processamento complexo em uma série de elementos separados que podem ser reutilizados.Break down a task that performs complex processing into a series of separate elements that can be reused.
Fila de PrioridadePriority Queue 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.Prioritize requests sent to services so that requests with a higher priority are received and processed more quickly than those with a lower priority.
Publicador/AssinantePublisher/Subscriber Permite a um aplicativo anunciar eventos para vários consumidores de seu interesse assincronamente, sem acoplar os remetentes aos destinatários.Enable an application to announce events to multiple interested consumers asynchronously, without coupling the senders to the receivers.
Nivelamento de Carga Baseado em FilaQueue-Based Load Leveling Use uma fila que funcione como um buffer entre uma tarefa e um serviço que ela invoca para simplificar cargas pesadas intermitentes.Use a queue that acts as a buffer between a task and a service that it invokes in order to smooth intermittent heavy loads.
Tentar NovamenteRetry 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.Enable an application to handle anticipated, temporary failures when it tries to connect to a service or network resource by transparently retrying an operation that's previously failed.
Supervisor de Agente do AgendadorScheduler Agent Supervisor Coordene um conjunto de ações em um conjunto distribuído de serviços e outros recursos remotos.Coordinate a set of actions across a distributed set of services and other remote resources.
FragmentaçãoSharding Divida um armazenamento de dados em um conjunto de partições horizontais ou fragmentos.Divide a data store into a set of horizontal partitions or shards.
SidecarSidecar Implante os componentes de um aplicativo em um processo ou contêiner separado para fornecer isolamento e encapsulamento.Deploy components of an application into a separate process or container to provide isolation and encapsulation.
Hospedagem de Conteúdo EstáticoStatic Content Hosting Implante o conteúdo estático para um serviço de armazenamento baseado em nuvem que pode enviá-las diretamente para o cliente.Deploy static content to a cloud-based storage service that can deliver them directly to the client.
StranglerStrangler Migre incrementalmente um sistema herdado substituindo gradualmente partes específicas de funcionalidade por serviços e aplicativos novos.Incrementally migrate a legacy system by gradually replacing specific pieces of functionality with new applications and services.
LimitaçãoThrottling Controle o consumo de recursos usados por uma instância de um aplicativo, um locatário individual ou todo o serviço.Control the consumption of resources used by an instance of an application, an individual tenant, or an entire service.
Valet KeyValet Key Use um token ou chave que fornece aos clientes acesso direto e restrito a um determinado recurso ou serviço.Use a token or key that provides clients with restricted direct access to a specific resource or service.