Consolidar várias tarefas ou operações numa única unidade computacional. Este procedimento pode aumentar a utilização dos recursos de computação e reduzir os custos e os custos de gestão associados à realização do processamento de computação nas aplicações alojadas na cloud.
Contexto e problema
Muitas vezes, uma aplicação na cloud implementa uma variedade de operações. Em algumas soluções, faz sentido seguir o princípio de design de separação de preocupações inicialmente e dividir essas operações em unidades computacionais separadas que são hospedadas e implantadas individualmente (por exemplo, como aplicativos Web do Serviço de Aplicativo separados ou Máquinas Virtuais separadas). No entanto, apesar desta estratégia poder ajudar a simplificar a estrutura lógica da solução, a implementação de um grande número de unidades computacionais como parte da mesma aplicação pode aumentar os custos de alojamento de tempo de execução e tornar a gestão do sistema mais complexa.
Por exemplo, a figura mostra a estrutura simplificada de uma solução alojada na cloud implementada com mais do que uma unidade computacional. Cada unidade computacional executa o ambiente virtual dela. Cada função foi implementada como uma tarefa separada (identificada como Tarefa A à Tarefa E) em execução na própria unidade computacional.
Cada unidade computacional consome recursos faturáveis, mesmo quando está inativa ou é pouco usada. Por conseguinte, nem sempre é a solução mais económica.
No Azure, essa preocupação se aplica aos Serviços de Aplicativo, Aplicativos de Contêiner e Máquinas Virtuais. Esses itens são executados em seu próprio ambiente. Executar uma coleção de sites, microsserviços ou máquinas virtuais separados que são projetados para executar um conjunto de operações bem definidas, mas que precisam se comunicar e cooperar como parte de uma única solução, pode ser um uso ineficiente de recursos.
Solução
Para ajudar a reduzir os custos, aumentar a utilização, melhorar a velocidade de comunicação e reduzir a gestão, é possível consolidar várias tarefas ou operações numa única unidade computacional.
As tarefas podem ser agrupadas de acordo com os critérios com base nas funcionalidades fornecidas pelo ambiente e nos custos associados a estas funcionalidades. Uma abordagem comum consiste em procurar tarefas com um perfil semelhante em matéria de requisitos de escalabilidade, de duração e de processamento. O agrupamento destes elementos permite-lhes realizar um dimensionamento como uma unidade. A elasticidade fornecida por muitos ambientes na cloud permite que instâncias adicionais de uma unidade computacional sejam iniciadas e paradas, de acordo com a carga de trabalho. Por exemplo, o Azure fornece dimensionamento automático que você pode aplicar aos Serviços de Aplicativo e aos Conjuntos de Dimensionamento de Máquina Virtual. Para obter mais informações, veja Orientações de Dimensionamento Automático.
Como contra-exemplo para mostrar como a escalabilidade pode ser utilizada para determinar quais as operações que não devem ser agrupadas em conjunto, considere as duas tarefas seguintes:
- A Tarefa 1 consulta as mensagens pouco frequentes e não sensíveis ao tempo enviadas para uma fila.
- A Tarefa 2 processa os pico do tráfego de redes de volume elevado.
A segunda tarefa requer elasticidade que pode envolver iniciar e parar um grande número de instâncias da unidade computacional. A aplicação do mesmo dimensionamento à primeira tarefa simplesmente resultaria na atribuição de mais tarefas à escuta de mensagens pouco frequentes na mesma fila, o que se traduz numa perda de recursos.
Em muitos ambientes na cloud, é possível especificar os recursos disponíveis numa unidade computacional em termos de número de núcleos da CPU, de memória, de espaço em disco, entre outros. Geralmente, quanto mais recursos forem especificados, maior será o custo. Para poupar dinheiro, é importante maximizar o trabalho realizado por uma unidade computacional dispendiosa e não permitir que esta fique inativa durante um período prolongado.
Se existirem tarefas que exijam bastante poder da CPU em curtos picos, considere consolidá-las numa única unidade computacional que fornece a potência necessária. No entanto, é importante equilibrar esta necessidade para manter os recursos dispendiosos ocupados em relação à contenção que poderia ocorrer caso estes sejam submetidos a esforços excessivos. As tarefas de longa execução e intensivas em termos computação não devem partilhar a mesma unidade computacional, por exemplo.
Problemas e considerações
Ao implementar este padrão, considere os seguintes pontos:
Escalabilidade e elasticidade. Muitas soluções na cloud implementam a escalabilidade e elasticidade ao nível da unidade computacional ao iniciar e parar instâncias de unidades. Evite agrupar tarefas com requisitos de escalabilidade em conflito na mesma unidade computacional.
Duração. A infraestrutura na cloud recicla periodicamente o ambiente virtual que aloja uma unidade computacional. Quando existem muitas tarefas de longa execução numa unidade computacional, pode ser necessário configurar a unidade para impedir que esta seja reciclada até que estas tarefas sejam concluídas. Em alternativa, crie as tarefas com uma abordagem de pontos de verificação, a qual vai permitir parar corretamente e continuar a partir do ponto em que foram interrompidas quando a unidade computacional é reiniciada.
Cadência de lançamento. Se a implementação ou configuração de uma tarefa sofrer alterações frequentes, poderá ser necessário parar a unidade computacional que aloja o código atualizado, reconfigurar e reimplementar a unidade e, em seguida, reiniciá-la. Este processo também precisa que todas as outras tarefas na mesma unidade computacional sejam paradas, reimplementadas e reiniciadas.
Segurança. As tarefas na mesma unidade computacional podem partilhar o mesmo contexto de segurança e ter a capacidade para aceder aos mesmos recursos. Tem de haver um elevado grau de confiança entre as tarefas, assim como convicção que uma tarefa não vai danificar nem afetar negativamente outra. Além disso, o aumento do número de tarefas em execução numa unidade computacional aumenta a superfície de ataque da unidade. Cada tarefa está tão segura quanto aquela com as maiores vulnerabilidades.
Tolerância a falhas. Se uma tarefa numa unidade computacional falhar ou se se comportar de forma anormal, esta poderá afetar as outras tarefas em execução na mesma unidade. Por exemplo, se uma tarefa não iniciar corretamente, esta poderá fazer com que toda a lógica de arranque da unidade computacional falhe e impeça que outras tarefas na unidade sejam executadas.
Contenção. Evite a introdução de contenção entre tarefas a competir por recursos na mesma unidade computacional. Idealmente, as tarefas que partilham a mesma unidade computacional devem apresentar características de utilização de recursos diferentes. Por exemplo, duas tarefas intensas em termos de computação provavelmente não devem residir na mesma unidade computacional, assim como duas tarefas que consumam grandes quantidades de memória. No entanto, misturar uma tarefa de computação intensiva com uma tarefa que requer uma grande quantidade de memória é uma combinação viável.
Nota
Considere consolidar recursos de computação apenas para um sistema que esteja em produção há um período de tempo, para que operadores e desenvolvedores possam monitorar o sistema e criar um mapa de calor que identifique como cada tarefa usa recursos diferentes. Este mapa pode ser utilizado para determinar quais as tarefas que são boas candidatas para a partilha de recursos de computação.
Complexidade. A combinação de várias tarefas numa única unidade computacional adiciona complexidade ao código na unidade, tornando-a possivelmente mais difícil de testar, depurar e manter.
Arquitetura lógica estável. Crie e implemente o código em cada tarefa, para que este não precise de ser alterado, mesmo que o ambiente físico onde a tarefa é executada seja alterado.
Outras estratégias. A consolidação de recursos de computação é apenas uma forma de ajudar a reduzir os custos associados à execução simultânea de várias tarefas. Esta operação requer um planeamento e uma monitorização cuidadosos para garantir que permanece uma abordagem eficaz. Outras estratégias podem ser mais adequadas, dependendo da natureza do trabalho e da localização dos utilizadores a executar estas tarefas. Por exemplo, a decomposição funcional da carga de trabalho, conforme descrita nas Orientações sobre a Criação de Partições de Dados Computacionais, pode ser uma opção melhor.
Quando utilizar este padrão
Utilize este padrão para tarefas pouco rentáveis se forem executadas nas suas próprias unidades computacionais. Se uma tarefa permanecer grande parte do seu tempo inativa, a execução desta tarefa numa unidade dedicada poderá ser dispendiosa.
Este padrão pode não ser adequado para tarefas que executam operações críticas com tolerância a falhas ou tarefas que processam dados altamente confidenciais ou privados e requerem o seu próprio contexto de segurança. Estas tarefas devem ser executadas no seu próprio ambiente isolado, numa unidade computacional separada.
Design da carga de trabalho
Um arquiteto deve avaliar como o padrão de Consolidação de Recursos de Computação pode ser usado no design de sua carga de trabalho para abordar as metas e os princípios abordados nos pilares do Azure Well-Architected Framework. Por exemplo:
Pilar | Como esse padrão suporta os objetivos do pilar |
---|---|
A Otimização de Custos está focada em sustentar e melhorar o retorno do investimento da sua carga de trabalho. | Esse padrão maximiza a utilização de recursos de computação, evitando a capacidade provisionada não utilizada por meio da agregação de componentes ou até mesmo cargas de trabalho inteiras em uma infraestrutura agrupada. - CO:14 Consolidação |
A Excelência Operacional ajuda a fornecer qualidade de carga de trabalho por meio de processos padronizados e coesão da equipe. | A consolidação pode levar a uma plataforma de computação mais homogênea, que pode simplificar o gerenciamento e a observabilidade, reduzir abordagens díspares para tarefas operacionais e reduzir a quantidade de ferramentas necessárias. - OE:07 Sistema de monitorização - OE:10 Projeto de automação |
A Eficiência de Desempenho ajuda sua carga de trabalho a atender às demandas de forma eficiente por meio de otimizações em escala, dados e código. | A consolidação maximiza a utilização de recursos de computação usando a capacidade de nó sobressalente e reduzindo a necessidade de provisionamento excessivo. Instâncias de computação grandes (dimensionadas verticalmente) geralmente são usadas no pool de recursos dessas infraestruturas. - PE:02 Planeamento da capacidade - PE:03 Seleção de serviços |
Como em qualquer decisão de design, considere quaisquer compensações em relação aos objetivos dos outros pilares que possam ser introduzidos com esse padrão.
Opções de plataforma de aplicação
Esse padrão pode ser alcançado de diferentes maneiras, dependendo do serviço de computação que você usa. Veja os seguintes exemplos de serviços:
- Serviço de Aplicativo do Azure e Azure Functions: implante planos compartilhados do Serviço de Aplicativo, que representam a infraestrutura do servidor de hospedagem. Um ou mais aplicativos podem ser configurados para serem executados nos mesmos recursos de computação (ou no mesmo plano do Serviço de Aplicativo).
- Aplicativos de Contêiner do Azure: implante aplicativos de contêiner nos mesmos ambientes compartilhados, especialmente em situações em que você precisa gerenciar serviços relacionados ou implantar aplicativos diferentes na mesma rede virtual.
- Serviço Kubernetes do Azure (AKS): o AKS é uma infraestrutura de hospedagem baseada em contêiner na qual vários aplicativos ou componentes de aplicativos podem ser configurados para serem executados colocalizados nos mesmos recursos de computação (nós), agrupados por requisitos computacionais, como necessidades de CPU ou memória (pools de nós).
- Máquinas virtuais: implante um único conjunto de máquinas virtuais para todos os locatários usarem, dessa forma os custos de gerenciamento são compartilhados entre os locatários. Os Conjuntos de Dimensionamento de Máquinas Virtuais são um recurso que oferece suporte ao gerenciamento de recursos compartilhados, balanceamento de carga e dimensionamento horizontal de Máquinas Virtuais.
Recursos relacionados
Os padrões e orientações que se seguem também podem ser relevantes ao implementar este padrão:
Orientações de Dimensionamento Automático. O dimensionamento automático pode ser utilizado para iniciar e parar instâncias do serviço a alojar recursos computacionais, consoante a necessidade prevista de processamento.
Orientações sobre a Criação de Partições de Dados Computacionais. Descreve como alocar serviços e componentes na cloud de uma forma que ajuda a minimizar os custos de execução enquanto mantém a escalabilidade, o desempenho, a disponibilidade e a segurança do serviço.
Abordagens arquitetônicas para computação em soluções multilocatário. Fornece orientação sobre as considerações e os requisitos que são essenciais para arquitetos de soluções, quando eles estão planejando os serviços de computação de uma solução multilocatário.