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.
Desenvolva seu aplicativo para que ele possa escalar horizontalmente
Uma das principais vantagens da nuvem é a escala elástica: a capacidade de usar o quanto de capacidade for necessário, escalando conforme a carga aumenta, e reduzindo quando a capacidade extra não é necessária. Crie seu aplicativo para que ele possa ser dimensionado horizontalmente, adicionando ou removendo instâncias, adequando a oferta à demanda.
A escalabilidade é medida pela proporção entre o ganho de throughput e o aumento de recursos. Idealmente, em um sistema bem projetado, ambos os números são proporcionais: uma alocação dupla de recursos dobrará o throughput. A escalabilidade é normalmente limitada pela introdução de gargalos ou pontos de sincronização no sistema.
Recomendações
Evitar a adesão de instância. Adesão ou afinidade de sessão é quando as solicitações do mesmo cliente sempre são roteadas para o mesmo servidor. A adesão limita a capacidade de escalar horizontalmente o aplicativo. Por exemplo, o tráfego de um usuário de alto volume não será distribuído entre instâncias. Entre as causas de adesão estão o armazenamento de estado de sessão na memória e o uso de chaves específicas do computador para a criptografia. Todas as instâncias devem conseguir lidar com uma solicitação.
Identificar gargalos. A expansão não é uma correção mágica para todos os problemas de desempenho. Por exemplo, se o seu banco de dados de back-end for o gargalo, não adiantará adicionar mais servidores Web. Primeiro identifique e resolva os gargalos do sistema antes de adicionar mais instâncias ao problema. Partes com estado do sistema são a causa mais provável de gargalos.
Decompor cargas de trabalho por requisitos de escalabilidade. Os aplicativos geralmente consistem em várias cargas de trabalho, com diferentes requisitos de dimensionamento. Por exemplo, um aplicativo pode ter um site voltado ao público e um site de administração separados. O site público pode apresentar surtos repentinos no tráfego, enquanto o site de administração tem uma carga menor e mais previsível.
Projete componentes autônomos e desacoplados que se comunicam por meio de protocolos de comunicação assíncronos. Idealmente, os componentes devem ter seu próprio estado independente e usar eventos para comunicar qualquer alteração ou atividade a componentes externos. Isso ajuda a escalar de forma independente apenas o componente sobrecarregado. Implemente mecanismos de controle de fluxo para gerenciar o tráfego e degradá-lo normalmente. Os consumidores devem controlar sua própria taxa de consumo. Os produtores devem controlar sua própria taxa de transmissão, incluindo a parada. As filas de mensagens são boas opções para absorver a carga de trabalho extra e permitir que os consumidores drenem o trabalho no lazer.
Evite comunicação, coordenação e espera desnecessárias.
Descarregar tarefas naturalmente assíncronas. Exemplos de tarefas que podem se beneficiar de padrões de mensagens assíncronas incluem o envio de e-mails, ações em que o usuário não precisa de uma resposta imediata e a integração com outros sistemas.
Descarregar tarefas com uso intenso de recursos. As tarefas que exigem muitos recursos de CPU ou E/S devem ser movidas para trabalhos em segundo plano quando possível para minimizar a carga no front-end que está processando as solicitações do usuário.
Escala automática com base em métricas de uso dinâmico e uso de recursos de escala automática internos. Muitos serviços de computação do Azure têm suporte interno para dimensionamento automático. Se o aplicativo tem uma carga de trabalho previsível e regular, escale horizontalmente conforme um cronograma. Por exemplo, expanda durante o horário comercial. Caso contrário, se a carga de trabalho não for previsível, use métricas de desempenho, como comprimento da fila de solicitação ou CPU para disparar o dimensionamento automático. Observe os aplicativos e suas comunicações para identificar gargalos e obter decisões mais precisas. Para conferir as melhores práticas de escala automática, veja Escala automática.
Considere o dimensionamento automático agressivo para tarefas críticas. Para cargas de trabalho críticas, o ideal é se manter à frente de demanda. É melhor adicionar novas instâncias rapidamente quando a carga está pesada para lidar com o tráfego adicional e, quando necessário, reduzir esse número novamente gradualmente.
Design para redução horizontal. Lembre-se de que, com a escala elástica, o aplicativo terá períodos de redução horizontal, quando as instâncias são removidas. O aplicativo deve lidar adequadamente com instâncias que estão sendo removidas. Aqui estão algumas maneiras de tratar a redução horizontal:
- Escutar eventos de desligamento (quando disponíveis) e fazer o desligamento corretamente.
- Clientes/consumidores de um serviço devem dar suporte a tratamento de falhas transitórias e novas tentativas.
- Para tarefas de longa execução, considere a possibilidade de dividir o trabalho usando pontos de verificação ou o padrão Pipes e Filtros.
- Coloque os itens de trabalho em uma fila para que outra instância possa assumir o trabalho se uma instância for removida no meio do processamento.
Considere a escala para redundância. A escala pode aprimorar a confiabilidade do aplicativo. Por exemplo, considere a escala em várias zonas de disponibilidade, como o uso de serviços com redundância de zona. Essa abordagem pode melhorar a taxa de transferência do aplicativo, bem como fornecer resiliência se uma zona enfrentar uma interrupção.
Modele e otimize a escalabilidade do seu sistema. Você pode usar o modelo do seu sistema usando uma abordagem como a lei de Amdahl. Quantifique a escalabilidade com base em parâmetros como contenção e coerência. Contenção refere-se ao atraso devido à espera ou ao enfileiramento de recursos compartilhados. Coerência refere-se ao atraso para que os dados se tornem consistentes. Por exemplo, ter uma alta contenção indica um processamento sequencial que pode ser paralelizado, enquanto ter uma alta coerência sugere dependências excessivas entre os processos, solicitando que você minimize as interações. Durante o desenho da carga de trabalho, você pode calcular a capacidade efetiva máxima do seu sistema para evitar fornecer mais oferta do que demanda, o que resulta em desperdício.