Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O dimensionamento automático é o processo de alocar recursos dinamicamente para atender aos requisitos de desempenho. À medida que o volume de trabalho aumenta, um aplicativo pode precisar de recursos adicionais para manter os níveis de desempenho desejados e atender aos SLAs (Contrato de Nível de Serviço). À medida que a demanda diminui e os recursos extras não são mais necessários, eles podem ser desalocados para minimizar os custos.
O dimensionamento automático aproveita a elasticidade de ambientes hospedados na nuvem e ainda alivia a sobrecarga no gerenciamento. Ele reduz a necessidade de um operador monitorar constantemente o desempenho de um sistema e toma decisões sobre a adição ou remoção de recursos.
Há duas maneiras principais de um aplicativo ser dimensionado:
O dimensionamento vertical, também chamado de escala vertical para cima e para baixo, significa alterar a capacidade de um recurso. Por exemplo, você pode mover um aplicativo para um tamanho maior de máquina virtual. O dimensionamento vertical geralmente requer tornar o sistema temporariamente indisponível enquanto ele está sendo reimplantado. Portanto, é menos comum automatizar o dimensionamento vertical.
O dimensionamento horizontal, também chamado de escalar para fora e para dentro, significa adicionar ou remover instâncias de um recurso. O aplicativo continua em execução sem interrupções conforme os novos recursos são provisionados. Quando o processo de provisionamento for concluído, a solução será implantada nesses recursos adicionais. Se a demanda cair, os recursos extras poderão ser desligados de forma limpa e desalocadas.
Muitos sistemas baseados em nuvem, incluindo o Microsoft Azure, dão suporte ao dimensionamento horizontal automático. O restante deste artigo se concentra no dimensionamento horizontal.
Observação
O dimensionamento automático se aplica principalmente aos recursos de computação. Embora seja possível dimensionar horizontalmente um banco de dados ou fila de mensagens, esse processo geralmente envolve o particionamento de dados, que geralmente não é automatizado.
Componentes do dimensionamento automático
Uma estratégia de dimensionamento automático normalmente envolve os seguintes componentes:
Sistemas de instrumentação e monitoramento nos níveis de aplicativo, serviço e infraestrutura. Esses sistemas capturam as principais métricas, como tempos de resposta, comprimentos de fila, utilização da CPU e uso de memória.
A lógica de tomada de decisão avalia essas métricas de uso dinâmico em relação a limites ou agendamentos predefinidos e decide se deseja dimensionar.
Componentes e mecanismos executam a ação de dimensionamento. O ideal é que esses componentes e mecanismos sejam separados do próprio código de carga de trabalho e gerenciados como um processo externo. O código ocioso ou sobrecarregado não deve ser responsável pelo dimensionamento em si.
Recursos de teste, monitoramento e ajuste para a estratégia de dimensionamento automático para garantir que ela funcione conforme o esperado.
O Azure fornece mecanismos internos de dimensionamento automático que abordam cenários comuns. Se um serviço ou tecnologia específico não tiver funcionalidade de dimensionamento automático interna ou se você tiver requisitos de dimensionamento automático específicos além de seus recursos, considere uma implementação personalizada. Uma implementação personalizada coleta métricas operacionais e do sistema, analisa as métricas e dimensiona os recursos adequadamente.
Configurar o dimensionamento automático para uma solução do Azure
O Azure fornece dimensionamento automático interno para a maioria das opções de computação.
As máquinas virtuais do Azure dimensionam automaticamente por meio de conjuntos de dimensionamento de máquinas virtuais, que gerenciam um conjunto de máquinas virtuais como um grupo. Para obter mais informações, consulte Usar dimensionamento automático e conjuntos de dimensionamento de máquinas virtuais.
O Azure Service Fabric dá suporte ao dimensionamento automático por meio de conjuntos de dimensionamento de máquinas virtuais. Cada tipo de nó em um cluster do Service Fabric é configurado como um conjunto de dimensionamento de máquinas virtuais separado. Cada tipo de nó pode ser dimensionado para mais ou para menos de forma independente. Para obter mais informações, consulte Dimensionar um cluster do Service Fabric dentro ou fora usando regras de dimensionamento automático.
O Serviço de Aplicativo do Azure tem dimensionamento automático interno. As configurações de dimensionamento automático se aplicam a todos os aplicativos em um serviço de aplicativo. Para obter mais informações, consulte Dimensionar o número de instâncias manualmente ou automaticamente e dimensionar um aplicativo no Serviço de Aplicativo.
Todas essas opções de computação usam o recurso de dimensionamento automático do Azure Monitor para fornecer um conjunto comum de funcionalidades de dimensionamento automático.
- O Azure Functions difere das opções de computação anteriores porque você não precisa configurar nenhuma regra de dimensionamento automático. Em vez disso, o Azure Functions aloca automaticamente a potência da computação quando o código é executado. O Azure Functions escalona conforme necessário para gerenciar a carga. Para obter mais informações, consulte Escolher o plano de hospedagem correto para o Azure Functions.
Às vezes, uma solução de dimensionamento automático personalizada pode ser útil. Por exemplo, você pode usar o Diagnóstico do Azure e as métricas baseadas em aplicativo, juntamente com o código personalizado para monitorar e exportar as métricas do aplicativo. Em seguida, você pode definir regras personalizadas com base nessas métricas e usar AS APIs REST do Azure Resource Manager para disparar o dimensionamento automático. No entanto, uma solução personalizada não é simples de implementar e deve ser considerada somente se nenhuma das abordagens anteriores puder atender aos seus requisitos.
Use os recursos internos de dimensionamento automático da plataforma se eles atenderem às suas necessidades. Caso contrário, considere cuidadosamente se você precisa de recursos de dimensionamento mais complexos. Exemplos de outros requisitos podem incluir mais granularidade de controle, diferentes maneiras de detectar eventos de gatilho para dimensionamento, dimensionamento entre assinaturas e dimensionamento de outros tipos de recursos.
Usar o recurso de dimensionamento automático do Azure Monitor
O recurso de dimensionamento automático do Azure Monitor fornece um conjunto comum de funcionalidades de dimensionamento automático para conjuntos de dimensionamento de máquinas virtuais, Serviço de Aplicativo e Serviços de Nuvem do Azure. O dimensionamento pode ser executado em um agendamento ou com base em uma métrica de runtime, como uso de CPU ou memória.
Considere os seguintes exemplos:
Expanda para 10 instâncias de segunda a sexta-feira e reduza para quatro instâncias no sábado e no domingo.
Escalar horizontalmente uma instância se o uso médio da CPU está acima de 70%, e reduzir uma instância se o uso de CPU cai abaixo de 50%.
Escalar horizontalmente uma instância se o número de mensagens em uma fila exceder um determinado limite.
Expanda os recursos quando a carga aumentar para garantir a disponibilidade. Em momentos de baixo uso, diminua para otimizar os custos. Use sempre uma combinação de regras de expansão e redução horizontal. Caso contrário, o dimensionamento automático ocorrerá apenas em uma direção até atingir o limite (contagens máximas ou mínimas de instância) definido no perfil.
Selecione uma contagem de instâncias padrão que seja segura para sua carga de trabalho. O recurso é dimensionado com base nesse valor se as contagens máximas ou mínimas de instância não estiverem definidas.
Para obter uma lista de métricas internas, consulte as métricas comuns de dimensionamento automático do Azure Monitor. Você também pode implementar métricas personalizadas usando o Application Insights.
Você pode configurar o dimensionamento automático usando o PowerShell, a CLI do Azure, um modelo do Azure Resource Manager ou o portal do Azure. Para obter um controle mais detalhado, use a API REST do Resource Manager. A Biblioteca de Gerenciamento de Monitoramento do Azure e a Biblioteca do Microsoft Insights (em versão prévia) são SDKs que permitem coletar métricas de diferentes recursos e executar o dimensionamento automático usando as APIs REST. Para recursos em que o suporte do Resource Manager não está disponível ou se você usa os Serviços de Nuvem do Azure, a API REST do Gerenciamento de Serviços pode ser usada para dimensionamento automático. Em todos os outros casos, use o Resource Manager.
Considere os seguintes pontos ao usar o dimensionamento automático:
Considere se você pode prever a carga no aplicativo com precisão suficiente para usar o dimensionamento automático agendado, adicionando e removendo instâncias para atender aos picos previstos na demanda. Se não for possível, use o dimensionamento automático reativo com base nas métricas de tempo de execução para lidar com alterações imprevisíveis na demanda. Normalmente, você pode combinar essas abordagens.
Por exemplo, crie uma estratégia que adicione recursos com base em uma agenda dos horários em que você sabe que o aplicativo está mais ocupado. Recursos extras ajudam a garantir que a capacidade esteja disponível quando necessário, sem qualquer atraso no início de novas instâncias. Para cada regra agendada, defina métricas que permitem o dimensionamento automático reativo durante esse período para garantir que o aplicativo possa lidar com picos sustentados, mas imprevisíveis, na demanda.
Geralmente, é difícil entender a relação entre métricas e requisitos de capacidade, especialmente quando um aplicativo é implantado inicialmente. Configure um pouco de capacidade extra no início e, em seguida, monitore e ajuste as regras de dimensionamento automático para aproximar a capacidade da carga real.
Configure as regras de dimensionamento automático e monitore o desempenho do aplicativo ao longo do tempo. Use os resultados desse monitoramento para ajustar a maneira como o sistema é dimensionado, se necessário. No entanto, tenha em mente que o dimensionamento automático não é um processo instantâneo. Leva tempo para reagir a uma métrica, como a utilização média da CPU excedendo ou caindo abaixo de um limite especificado.
As regras de dimensionamento automático que usam um mecanismo de detecção com base em um atributo de gatilho medido usam um valor agregado ao longo do tempo, em vez de valores instantâneos, para disparar uma ação de dimensionamento automático. Os atributos de gatilho incluem o uso da CPU ou o comprimento da fila. Por padrão, a agregação é uma média dos valores. Essa abordagem impede que o sistema reaja muito rapidamente ou cause oscilação rápida. Ele também permite tempo para novas instâncias que são automaticamente iniciadas para se estabilizarem no modo de execução. Outras ações de dimensionamento automático não podem ocorrer enquanto as novas instâncias estão sendo iniciadas. Para os Serviços de Nuvem do Azure e as Máquinas Virtuais do Azure, o período padrão para a agregação é de 45 minutos. Portanto, pode levar até esse período de tempo para que a métrica dispare o dimensionamento automático em resposta a picos de demanda. Você pode alterar o período de agregação usando o SDK, mas períodos de menos de 25 minutos podem causar resultados imprevisíveis. Para o recurso Aplicativos Web do Serviço de Aplicativo, o período de média é menor, permitindo que novas instâncias fiquem disponíveis em cerca de cinco minutos após uma alteração na medida média do gatilho.
Evite flapping em que as ações de redução horizontal e expansão continuam indo e voltando. Suponha que haja duas instâncias. O limite superior é de 80% CPU e o limite inferior é de 60%. Quando a carga está em 85%, outra instância é adicionada. Após algum tempo, a carga diminui para 60%. Antes que o serviço de dimensionamento automático seja dimensionado, ele calcula a distribuição da carga total (de três instâncias) quando uma instância é removida, levando-a para 90%. Ele teria que escalar horizontalmente novamente de forma imediata. Portanto, ele ignora o dimensionamento e talvez você nunca veja os resultados de dimensionamento esperados.
A situação de oscilação pode ser controlada pela escolha de uma margem adequada entre os limites de expansão e redução horizontal.
O dimensionamento manual é redefinido com base nos números máximo e mínimo de instâncias usados para dimensionamento automático. Se você atualizar manualmente a contagem de instâncias para um valor maior ou menor que o valor máximo, o mecanismo de dimensionamento automático será dimensionado automaticamente de volta para o mínimo (se menor) ou o máximo (se maior). Por exemplo, você define o intervalo entre três e seis. Se você tiver uma instância em execução, o mecanismo de dimensionamento automático será dimensionado para três instâncias em sua próxima execução. Da mesma forma, se você definir manualmente a escala como oito instâncias, na próxima execução o dimensionamento automático o dimensiona de volta para seis instâncias em sua próxima execução. O dimensionamento manual é temporário, a menos que você redefina as regras de dimensionamento automático também.
O mecanismo de dimensionamento automático processa apenas um perfil por vez. Se uma condição não for atendida, ela verificará o próximo perfil. Mantenha as principais métricas fora do perfil padrão porque esse perfil foi verificado por último. Em um perfil, você pode ter várias regras. Na expansão, o dimensionamento automático será executado se nenhuma regra for atendida. No dimensionamento automático, o dimensionamento automático requer que todas as regras sejam atendidas.
Para obter mais informações sobre como o Azure Monitor é dimensionado, consulte As práticas recomendadas para dimensionamento automático.
Se você configurar o dimensionamento automático usando o SDK em vez do portal, poderá especificar um agendamento mais detalhado durante o qual as regras estão ativas. Você também pode criar suas próprias métricas e usá-las com ou sem as existentes em suas regras de dimensionamento automático. Por exemplo, talvez você queira usar contadores alternativos, como o número de solicitações por segundo ou a disponibilidade média de memória. Ou você pode usar contadores personalizados para medir processos comerciais específicos.
Quando você dimensiona automaticamente o Service Fabric, os tipos de nó em seu cluster são feitos de conjuntos de dimensionamento de máquinas virtuais no back-end, portanto, você precisa configurar regras de dimensionamento automático para cada tipo de nó. Leve em conta o número de nós que você deve ter antes de configurar o dimensionamento automático. O nível de confiabilidade determina o número mínimo de nós que você deve ter para o tipo de nó primário. Para obter mais informações, consulte Dimensionar um cluster do Service Fabric dentro ou fora usando regras de dimensionamento automático.
Você pode usar o portal para vincular recursos como instâncias e filas do Banco de Dados SQL do Azure a uma instância de serviço de nuvem. Esse método permite que você acesse com mais facilidade as opções de configuração de dimensionamento manual e automático separadas para cada um dos recursos vinculados. Para obter mais informações, consulte Gerenciar os Serviços de Nuvem do Azure.
Quando você configura várias políticas e regras, elas podem entrar em conflito entre si. O dimensionamento automático usa as seguintes regras de resolução de conflitos para garantir que haja sempre um número suficiente de instâncias em execução:
As operações de expansão sempre têm precedência sobre as operações de redução horizontal.
Quando há um conflito entre as operações de expansão, a regra que inicia o maior aumento no número de instâncias tem precedência.
Quando as operações de escala entram em conflito, a regra que inicia a menor redução no número de instâncias tem precedência.
Em um Ambiente de Serviço de Aplicativo, qualquer pool de trabalho ou métricas de front-end podem ser usadas para definir regras de dimensionamento automático. Para obter mais informações, consulte a visão geral do Ambiente do Serviço de Aplicativo.
Considerações sobre design de aplicativo
O dimensionamento automático não é uma solução imediata. Simplesmente adicionar recursos a um sistema ou executar mais instâncias de um processo não garante que o desempenho do sistema melhore. Considere os seguintes pontos ao criar uma estratégia de dimensionamento automático:
O sistema deve ser projetado para ser horizontalmente escalonável. Evite fazer suposições sobre afinidade de instância. Não crie soluções que exijam que o código esteja sempre em execução em uma instância específica de um processo. Ao dimensionar um serviço de nuvem ou site horizontalmente, não suponha que uma série de solicitações da mesma origem sejam sempre roteadas para a mesma instância. Pelo mesmo motivo, projete os serviços para serem sem estado, de modo a evitar que uma série de solicitações de um aplicativo tenha que ser sempre roteada para a mesma instância de um serviço. Ao criar um serviço que lê mensagens de uma fila e as processa, não faça suposições sobre qual instância do serviço manipula uma mensagem específica. O dimensionamento automático pode iniciar mais instâncias de um serviço conforme o tamanho da fila aumenta. O padrão Consumidores Concorrentes descreve como lidar com esse cenário.
Caso a solução implemente uma tarefa de execução longa, projete essa tarefa para dar suporte tanto ao escalonamento quanto ao redimensionamento. Sem o design adequado, essa tarefa pode impedir que uma instância de um processo seja desligada de forma limpa quando o sistema é dimensionado. Ou pode perder dados se o processo for encerrado à força. Idealmente, reorganize uma tarefa de execução longa e divida o processamento que ela realiza em pequenos blocos discretos. Para obter um exemplo, consulte o padrão Pipes e Filtros.
Como alternativa, você pode implementar um mecanismo de ponto de verificação que registra informações de estado sobre a tarefa em intervalos regulares. Salve essas informações de estado no armazenamento durável que qualquer instância do processo que executa a tarefa possa acessar. Portanto, se o processo for desligado, o trabalho que ele estava executando poderá ser retomado do último ponto de verificação usando outra instância. Há bibliotecas que fornecem essa funcionalidade, como NServiceBus e MassTransit. Elas persistem de forma transparente e os intervalos são alinhados com o processamento de mensagens de filas no Barramento de Serviço do Azure.
Quando as tarefas em segundo plano são executadas em instâncias de computação separadas, como em funções de trabalho de um aplicativo hospedado por serviços de nuvem, talvez seja necessário dimensionar diferentes partes do aplicativo usando políticas de dimensionamento diferentes. Por exemplo, talvez seja necessário implantar mais instâncias de computação de interface do usuário (interface do usuário) sem aumentar o número de instâncias de computação em segundo plano ou o oposto. Você pode oferecer diferentes níveis de serviço, como pacotes de serviço básicos e premium. Talvez seja necessário dimensionar os recursos de computação para pacotes de serviço premium mais agressivamente do que os recursos para pacotes de serviço básicos. Essa abordagem ajuda você a atender aos SLAs.
Outros critérios de dimensionamento
Considere o comprimento da fila sobre a qual a interface do usuário e as instâncias de computação em segundo plano se comunicam. Use-o como um critério para sua estratégia de dimensionamento automático. Esses critérios podem indicar um desequilíbrio ou diferença entre a carga atual e a capacidade de processamento da tarefa em segundo plano. Há um atributo que é um pouco mais complexo, mas melhor para fundamentar as decisões de dimensionamento. Use o tempo entre quando uma mensagem foi enviada e quando seu processamento foi concluído, conhecido como o momento crítico. Se esse valor de tempo crítico estiver abaixo de um limite de negócios significativo, será desnecessário dimensionar, mesmo que o comprimento da fila seja longo.
Por exemplo, pode haver 50.000 mensagens em uma fila. Mas o tempo crítico da mensagem mais antiga é 500 ms, e esse ponto de extremidade está integrando-se a um serviço web parceiro para enviar e-mails. Os stakeholders de negócios podem não considerar este cenário urgente o suficiente para justificar o custo da expansão.
Por outro lado, pode haver 500 mensagens em uma fila, com o mesmo tempo crítico de 500 ms. Mas o endpoint faz parte do caminho crítico em um jogo online em tempo real, onde as partes interessadas definiram um tempo de resposta de 100 ms ou menos. Nesse caso, escalar horizontalmente faz sentido.
Para usar o tempo crítico nas decisões de dimensionamento automático, é útil que uma biblioteca adicione automaticamente as informações relevantes aos cabeçalhos das mensagens durante a transmissão e o processamento. Uma dessas bibliotecas que fornece essa funcionalidade é o NServiceBus.
Se você basear sua estratégia de dimensionamento automático em contadores que medem processos de negócios, verifique se você entende completamente a relação entre os resultados desses tipos de contadores e os requisitos reais de capacidade de computação. Exemplos de contadores incluem o número de pedidos feitos a cada hora ou o runtime médio de uma transação complexa. Pode ser necessário dimensionar mais de um componente ou unidade de computação em resposta a alterações nos contadores de processo de negócios.
Para impedir que um sistema tente escalar horizontalmente excessivamente, considere limitar o número máximo de instâncias que podem ser adicionadas automaticamente. Essa abordagem também evita os custos associados à execução de milhares de instâncias. A maioria dos mecanismos de dimensionamento automático permite que você especifique o número mínimo e máximo de instâncias para uma regra. Além disso, considere degradar graciosamente a funcionalidade que o sistema fornece se você implantar o número máximo de instâncias e o sistema ainda estiver sobrecarregado.
Tenha em mente que o dimensionamento automático pode não ser o mecanismo mais apropriado para lidar com uma explosão repentina na carga de trabalho. Leva tempo para configurar e iniciar novas instâncias de um serviço ou adicionar recursos a um sistema. E o pico de demanda pode passar no momento em que esses recursos extras estiverem disponíveis. Nesse cenário, talvez seja melhor limitar o serviço. Para obter mais informações, consulte Throttling pattern.
Por outro lado, se você precisar da capacidade de processar todas as solicitações quando o volume flutuar rapidamente, considere usar uma estratégia agressiva de dimensionamento automático que inicie instâncias extras mais rapidamente. Verifique se o custo não é um fator importante contribuinte. Você também pode usar uma política programada que inicie um número suficiente de instâncias para atender à carga máxima antes que ela seja esperada.
O mecanismo de dimensionamento automático deve monitorar o processo de dimensionamento automático e registrar os detalhes de cada evento de dimensionamento automático. Esses detalhes incluem o que disparou o evento, quais recursos foram adicionados ou removidos e quando ele ocorreu. Se você criar um mecanismo de dimensionamento automático personalizado, verifique se ele incorpora essa funcionalidade. Analise as informações para ajudar a medir a eficácia da estratégia de dimensionamento automático e ajustá-la, se necessário. Você pode ajustar ambos no curto prazo, à medida que os padrões de uso se tornam mais óbvios e a longo prazo, à medida que a empresa se expande ou os requisitos do aplicativo evoluem. Se um aplicativo atingir o limite superior definido para dimensionamento automático, o mecanismo também poderá alertar um operador que pode iniciar manualmente recursos extras, se necessário. Nessas circunstâncias, o operador também pode ser responsável por remover manualmente esses recursos após a carga de trabalho diminuir.
Recursos relacionados
Os seguintes padrões e diretrizes também podem ser relevantes para seu cenário ao implementar o dimensionamento automático:
O padrão de limitação descreve como um aplicativo pode continuar funcionando e atender a SLAs quando um aumento na demanda coloca uma carga extrema nos recursos. É possível usar limitação com o dimensionamento automático para evitar que, ao escalar horizontalmente o sistema, este seja sobrecarregado.
O padrão Consumidores Concorrentes descreve como implementar um pool de instâncias de serviço que podem lidar com mensagens de qualquer instância do aplicativo. O dimensionamento automático pode ser usado para iniciar e parar as instâncias de serviço de acordo com a carga de trabalho prevista. Essa abordagem permite que um sistema processe várias mensagens simultaneamente para otimizar a taxa de transferência, melhorar a escalabilidade e a disponibilidade e balancear a carga de trabalho.
O monitoramento e o diagnóstico, incluindo instrumentação e métricas, são vitais para coletar as informações que podem impulsionar o processo de dimensionamento automático.