Dimensionamento de contêineres e aplicativos sem servidor
Gorjeta
Este conteúdo é um excerto do eBook, Architecting Cloud Native .NET Applications for Azure, disponível no .NET Docs ou como um PDF transferível gratuito que pode ser lido offline.
Há duas maneiras de dimensionar um aplicativo: para cima ou para fora. O primeiro refere-se à adição de capacidade a um único recurso, enquanto o segundo se refere à adição de mais recursos para aumentar a capacidade.
A solução simples: aumentar a escala
A atualização de um servidor host existente com maior CPU, memória, velocidade de E/S de disco e velocidade de E/S de rede é conhecida como escalonamento. A expansão de um aplicativo nativo da nuvem envolve a escolha de recursos mais capazes do fornecedor de nuvem. Por exemplo, você pode criar um novo pool de nós com VMs maiores no cluster do Kubernetes. Em seguida, migre seus serviços em contêiner para o novo pool.
Os aplicativos sem servidor aumentam a escala escolhendo o plano premium do Functions ou os tamanhos de instância premium de um plano de serviço de aplicativo dedicado.
Dimensionamento de aplicativos nativos da nuvem
Os aplicativos nativos da nuvem geralmente experimentam grandes flutuações na demanda e exigem escala a qualquer momento. Eles são a favor da expansão. O dimensionamento é feito horizontalmente adicionando máquinas adicionais (chamadas nós) ou instâncias de aplicativos a um cluster existente. No Kubernetes, você pode dimensionar manualmente ajustando as definições de configuração para o aplicativo (por exemplo, dimensionando um pool de nós) ou por meio do dimensionamento automático.
Os clusters AKS podem ser dimensionados automaticamente de duas maneiras:
Primeiro, o Horizontal Pod Autoscaler monitora a demanda de recursos e dimensiona automaticamente suas réplicas POD para atendê-la. Quando o tráfego aumenta, réplicas adicionais são automaticamente provisionadas para expandir seus serviços. Da mesma forma, quando a demanda diminui, eles são removidos para escalar seus serviços. Você define a métrica na qual dimensionar, por exemplo, o uso da CPU. Você também pode especificar o número mínimo e máximo de réplicas a serem executadas. O AKS monitora essa métrica e dimensiona de acordo.
Em seguida, o recurso AKS Cluster Autoscaler permite dimensionar automaticamente nós de computação em um cluster Kubernetes para atender à demanda. Com ele, você pode adicionar automaticamente novas VMs ao Conjunto de Escala de Máquina Virtual do Azure subjacente sempre que for necessária mais capacidade de computação. Ele também remove nós quando não é mais necessário.
A Figura 3-11 mostra a relação entre esses dois serviços de escala.
Figura 3-11. Dimensionamento de um plano do Serviço de Aplicativo.
Trabalhando juntos, ambos garantem um número ideal de instâncias de contêiner e nós de computação para suportar a demanda flutuante. O autoscaler de pod horizontal otimiza o número de pods necessários. O autoscaler de cluster otimiza o número de nós necessários.
Dimensionamento do Azure Functions
O Azure Functions é dimensionado automaticamente sob demanda. Os recursos do servidor são alocados dinamicamente e removidos com base no número de eventos acionados. Você só é cobrado pelos recursos de computação consumidos quando suas funções são executadas. A faturação baseia-se no número de execuções, no tempo de execução e na memória utilizada.
Embora o plano de consumo padrão forneça uma solução econômica e escalável para a maioria dos aplicativos, a opção premium permite aos desenvolvedores flexibilidade para requisitos personalizados do Azure Functions. A atualização para o plano premium fornece controle sobre tamanhos de instâncias, instâncias pré-aquecidas (para evitar atrasos no arranque a frio) e VMs dedicadas.