Compartilhar via


Estratégias de arquitetura para criar uma estratégia de dimensionamento confiável

Aplica-se a esta recomendação de lista de verificação de confiabilidade do Azure Well-Architected Framework:

RE:06 Implemente uma estratégia de dimensionamento oportuna e confiável nos níveis de aplicativo, dados e infraestrutura. Baseie a estratégia de dimensionamento em padrões de uso reais ou previstos e minimize a intervenção manual.

Este guia descreve as recomendações para criar uma estratégia de dimensionamento confiável.

Definições

Prazo Definição
Dimensionamento vertical Uma abordagem de dimensionamento que adiciona capacidade de computação aos recursos existentes.
Dimensionamento horizontal Uma abordagem de dimensionamento que adiciona instâncias de um determinado tipo de recurso.
Dimensionamento automático Uma abordagem de dimensionamento que adiciona ou remove recursos automaticamente quando um conjunto de condições é atendido.

Observação

As operações de dimensionamento podem ser estáticas (escala diária agendada regularmente para acomodar padrões de carga normais), automáticas (um processo automatizado em resposta às condições atendidas) ou manual (um operador executa uma operação de dimensionamento único em reação a uma alteração de carga inesperada). O dimensionamento vertical e horizontal pode ser executado por meio de qualquer um desses métodos. No entanto, o dimensionamento vertical automático requer um desenvolvimento de automação personalizado adicional e pode causar tempo de inatividade dependendo dos recursos serem dimensionados.

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.

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 enquanto elas são enviadas e processadas. Uma biblioteca que fornece essa funcionalidade é nServiceBus.

Projetar de acordo com padrões de carga

Para projetar uma estratégia de dimensionamento confiável para suas cargas de trabalho, concentre-se na identificação de padrões de carga para o usuário e os fluxos do sistema para cada carga de trabalho que leva a uma operação de dimensionamento. Aqui estão exemplos de diferentes padrões de carga e suas estratégias de dimensionamento correspondentes:

  • Estático: Todas as noites às 23h EST, o número de usuários ativos do seu aplicativo fica abaixo de 100 e a utilização da CPU para os servidores de aplicativos cai 90% em todos os nós. Para lidar com isso, você pode agendar a redução horizontal de seus nós de computação para a contagem mínima (2) entre 23:00 e 6:00 EST.

  • Dinâmico, regular e previsível: Todas as segundas-feiras de manhã, 1000 funcionários em várias regiões se inscrevem no sistema ERP. Para gerenciar isso, você pode agendar a expansão de seus nós de computação para a capacidade diária normal antes que a primeira região inicie o trabalho.

  • Dinâmico, Irregular e Previsível: Um lançamento de produto ocorre no primeiro dia do mês e há dados históricos de lançamentos anteriores sobre como o tráfego aumenta nessas situações. Para resolver isso, você pode definir um dimensionamento agendado único de suas instâncias de computação e banco de dados na manhã de um lançamento de produto e reduzir verticalmente após uma semana.

  • Dinâmico, Irregular e Imprevisível: Um evento em grande escala causa um aumento na demanda por um produto. Por exemplo, as empresas que fabricam e vendem desumidificadores podem experimentar um aumento repentino no tráfego após um furacão ou outro evento de inundação quando as pessoas nas áreas afetadas precisam secar salas em suas casas. Para lidar com isso, você pode definir limites de dimensionamento automático para considerar picos de tráfego não planejados.

Adaptar estratégias de dimensionamento para ajustar componentes ou fluxos individuais

Não há uma estratégia de dimensionamento de tamanho único. Diferentes serviços de nuvem têm diferentes graus de suporte de escala e diferentes abordagens para dimensionamento. Por esse motivo, é importante entender como o dimensionamento é suportado e implementado em todos os componentes da carga de trabalho para projetar sua estratégia de dimensionamento geral. Você pode aplicar estratégias de dimensionamento no nível de componente individual ou no nível de fluxo, dependendo do seu design arquitetônico. Ao determinar como você implementará o dimensionamento em toda a carga de trabalho, considere estes fatores:

  • Esses componentes que não podem ser dimensionados. Um exemplo seria grandes bancos de dados relacionais que não têm a fragmentação habilitada e não podem ser refatorados sem impacto significativo. Documente os limites de recursos publicados pelo provedor de nuvem e monitore esses recursos de perto. Inclua esses recursos específicos em seu planejamento futuro para migrar para serviços escalonáveis.

  • A relação dos componentes do fluxo em termos de ordem de operações de escala. Verifique se você não sobrecarrega inadvertidamente um componente downstream escalando primeiro um componente upstream.

  • Todos os elementos de aplicativo com estado que podem ser interrompidos por uma operação de dimensionamento e qualquer afinidade de sessão (ou stickiness de sessão) implementada. O stickiness pode limitar sua capacidade de dimensionamento e introduz pontos únicos de falha. Projete sua carga de trabalho para ser sem estado na extensão prática.

  • Possíveis gargalos. O dimensionamento não corrige todos os problemas de desempenho. Por exemplo, se o banco de dados de back-end for o gargalo, não ajudará a adicionar mais servidores Web. Identifique e resolva os gargalos no sistema primeiro antes de apenas adicionar mais instâncias. Partes com estado do sistema são a causa mais provável de gargalos.

  • Lidar com tarefas de execução longa. Crie uma tarefa de execução longa para dar suporte ao dimensionamento horizontal e ao dimensionamento. Sem o devido cuidado, tal 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. O padrão Pipes e Filtros fornece um exemplo de como você pode obter essa solução.

Escolha a tecnologia certa

Fazer escolhas de tecnologia bem informadas com o dimensionamento em mente ajudará você a garantir que sua carga de trabalho possa atender às suas metas de confiabilidade à medida que sua carga de trabalho evolui. Pesquise as habilidades de dimensionamento oferecidas para diferentes recursos que oferecem funcionalidade semelhante e escolha a melhor combinação para seus planos de crescimento futuros. Por exemplo, você pode ter várias opções para armazenamentos de dados que podem hospedar o tipo específico de bancos de dados que você usará. No entanto, uma opção pode ter uma funcionalidade de dimensionamento melhor pronta para uso do que outras, o que pode torná-la uma opção melhor para sua carga de trabalho.

  • Aproveite os serviços que são dimensionados automaticamente. Quando prático, use serviços SaaS que são dimensionados automaticamente sem nenhuma configuração ou entrada. Serviços globais como o Microsoft Entra ID oferecem essa funcionalidade. Soluções sem servidor também oferecem dimensionamento automático e podem ser boas opções para muitos casos de uso.

  • Aproveite os serviços que oferecem dimensionamento pronto para uso. Muitos serviços de PaaS oferecem recursos de dimensionamento integrados e fáceis de usar que você pode configurar para atender aos seus requisitos de confiabilidade. Por exemplo, você pode configurar o dimensionamento de taxa de transferência para o Cosmos DB para atender aos seus requisitos específicos.

Automatizar o dimensionamento

Automatize as operações de dimensionamento para seus componentes de carga de trabalho em extensão prática. Ao usar recursos que têm funcionalidade de dimensionamento automático configurável, crie a lógica de configuração em seu código de implantação iac (infraestrutura como código). Ao usar recursos que não têm o dimensionamento automático pronto para uso, crie automação para executar operações de dimensionamento usando ferramentas de automação nativas e inclua o código de automação em seu código IaC.

Se você basear sua estratégia de dimensionamento automático em contadores que medem processos de negócios, como o número de pedidos feitos por hora ou o tempo médio de execução de uma transação complexa, certifique-se de entender completamente a relação entre os resultados desses tipos de contadores e os requisitos reais de capacidade de computação. 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.

Tenha em mente que o dimensionamento automático pode não ser o mecanismo mais apropriado para lidar com uma intermitência repentina em uma carga de trabalho. Leva tempo para provisionar e iniciar novas instâncias de um serviço ou adicionar recursos a um sistema, e a demanda de pico 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 o Throttling pattern.

Por outro lado, se você precisar da capacidade de processar todas as solicitações quando o volume flutuar rapidamente, e o custo não for um fator importante contribuinte, considere usar uma estratégia agressiva de dimensionamento automático que inicie mais rapidamente mais instâncias. 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.

Escolher unidades de escala apropriadas

Baseie sua estratégia de dimensionamento em unidades de escala, que são o agrupamento lógico de componentes a serem dimensionados juntos e os incrementos de escala a serem usados (como mover de uma SKU de VM para outra). As opções a serem consideradas são:

  • Dimensionamento de recursos individualmente: talvez seja necessário dimensionar apenas VMs ou bancos de dados individuais.

  • Dimensionando um componente completo ao mesmo tempo: Por exemplo, você pode ter uma API de microsserviço composta por um Serviço de Aplicativo, banco de dados e filas que precisam ser dimensionadas simultaneamente.

  • Dimensionando a solução completa: para cargas de trabalho complexas ou críticas, dimensionar toda a solução como um carimbo de implantação pode simplificar sua estratégia de dimensionamento. Em vez de gerenciar os agendamentos de dimensionamento e os limites de dimensionamento automático de muitos recursos distintos, você pode aplicar um conjunto limitado de definições de dimensionamento a um carimbo de implantação e, em seguida, espelhar isso entre selos conforme necessário.

Importante

Defina um limite máximo no número de unidades de escala que podem ser alocadas automaticamente para evitar o excesso de custos.

Otimizar o tempo de inicialização da unidade de escala

Ao projetar sua estratégia de dimensionamento, tenha em mente que diferentes serviços são dimensionados em escalas de tempo diferentes. Há alguns serviços que são dimensionados quase instantaneamente e outros que são muito mais lentos. Por exemplo, as instâncias de Gerenciamento de API podem levar até 45 minutos para concluir suas operações de dimensionamento. Para considerar a escala de tempo da operação de dimensionamento, planeje executar corretamente a operação de dimensionamento antes que o aumento esperado atinja sua carga de trabalho. Outras recomendações a serem consideradas incluem:

  • Pré-inicialize nós que serão implantados para reduzir o tempo necessário para inicialização.

  • Permitir um tempo de buffer em torno de alterações de configuração antes de fazer novas alterações ou usar o sistema de maneira incomum. Por exemplo, você pode desalocar uma instância de back-end do Gateway de Aplicativo por meio de uma alteração de regra. Você precisará aguardar que as conexões sejam removidas dessa instância antes que elas possam ser removidas com segurança.

  • Recursos de provisionamento excessivo para lidar com o aumento da carga durante o dimensionamento. Você pode garantir que as VMs normalmente sejam executadas em 75% capacidade de utilização para garantir que elas possam lidar com o aumento da carga enquanto o dimensionamento horizontal ocorre.

  • Ajuste os limites de dimensionamento com o monitoramento. Use o monitoramento de capacidade para garantir que os limites de dimensionamento disparem operações de dimensionamento.

Dimensionar armazenamentos de dados usando fragmentação e particionamento

Otimize a confiabilidade do seu patrimônio de dados, incluindo-o em sua estratégia de dimensionamento. O particionamento de dados espalha um banco de dados entre recursos de armazenamento lógicos ou físicos, removendo pontos únicos de falha. Escolha a melhor estratégia de particionamento para seu caso de uso.

  • Particionamento horizontal (fragmentação): partições (fragmentos) são colocadas em armazenamentos de dados separados, mas todas as partições têm o mesmo esquema. Cada fragmento contém um subconjunto do banco de dados. Essa é uma boa abordagem para otimizar a confiabilidade, pois ajuda a facilitar o balanceamento de carga e minimiza a carga sobre as operações ao lidar com problemas. Os fragmentos podem ser replicados para maior confiabilidade.

  • Particionamento vertical: cada partição contém um subconjunto dos campos para itens no armazenamento de dados. Os campos são divididos de acordo com seu padrão de uso.

  • Particionamento funcional: os dados são agregados de acordo com a forma como cada contexto limitado no sistema usa os dados.

Considere combinar essas estratégias ao criar um esquema de particionamento. Por exemplo, você pode dividir dados em fragmentos e, em seguida, usar o particionamento vertical para subdividir ainda mais os dados em cada fragmento.

Otimize sua estratégia de partição para escalabilidade. Analise os padrões de acesso a dados para determinar quais operações exigem a maioria dos recursos de processamento e balancear suas partições para garantir que cada uma tenha recursos suficientes para lidar com os requisitos de escalabilidade.

Para obter diretrizes detalhadas sobre particionamento e fragmentação, consulte o guia de design

Monitorar suas operações de dimensionamento

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 (o que o disparou, quais recursos foram adicionados ou removidos e quando). Se você criar um mecanismo de dimensionamento automático personalizado, verifique se ele incorpora essa funcionalidade. Analise proativamente as informações para ajudar a medir a eficácia da estratégia de dimensionamento automático e ajustá-la, se necessário.

Facilitação do Azure

Um recurso de dimensionamento automático está disponível em muitos serviços do Azure. Ele permite que você configure facilmente as condições para dimensionar automaticamente as instâncias horizontalmente. Alguns serviços têm funcionalidades internas limitadas ou não para serem dimensionados automaticamente, portanto, certifique-se de documentar esses casos e definir processos para lidar com o dimensionamento.

Muitos serviços do Azure oferecem APIs que você pode usar para criar operações de dimensionamento automático personalizadas usando a Automação do Azure, como os exemplos de código no Dimensionamento Automático do Hub IoT do Azure. Você pode usar ferramentas como KEDA para dimensionamento automático controlado por eventos, que está disponível no Serviço de Kubernetes do Azure e nos Aplicativos de Contêiner do Azure.

O dimensionamento automático do Azure Monitor fornece um conjunto comum de funcionalidades de dimensionamento automático para Conjuntos de Dimensionamento de Máquinas Virtuais do Azure, Serviço de Aplicativo do Azure, Azure Spring Apps e muito mais. O dimensionamento pode ser executado em um agendamento ou com base em uma métrica de runtime, como uso de CPU ou memória. Consulte o guia do Azure Monitor para obter as melhores práticas.

Compensações

Compensação: o dimensionamento tem implicações de custo, portanto, otimize sua estratégia para reduzir o mais rápido possível para ajudar a manter os custos sob controle. Verifique se a automação que você está empregando para escalar verticalmente também tem gatilhos para reduzir verticalmente.

Exemplo

Consulte as diretrizes de dimensionamento de arquitetura de referência de linha de base do AKS.

Lista de verificação de confiabilidade

Consulte o conjunto completo de recomendações.