Utilização da CPU do AWS EC2 versus desempenho do PHP - Limites de CPU de escalonamento automático?

1

Estou operando um aplicativo da web Amazon AWS que já tem muita variação de fuso horário na utilização da CPU.

Também estou preocupado em me tornar viral, porque tem uma tendência a acontecer conosco e, se eu estiver dormindo, no momento em que nosso serviço pode ficar lento ou inacessível por horas.

Atualmente, usamos uma única instância do EC2. Ontem tivemos até um tempo de inatividade quando o servidor estava sendo substituído automaticamente e não inicializamos corretamente - ainda não sei os motivos completos e provavelmente nunca o farão.

Não deixarei que eu inclua uma imagem porque preciso de 10 pontos de reputação, por isso, se alguém puder editar esta postagem e tornar essa imagem incorporada, eu agradeceria:

Agora, estou pensando em substituir nosso front-end por um balanceador de carga e escalonamento automático. Isso nos permitiria economizar dinheiro e melhorar o desempenho, a confiabilidade e também atenuar os efeitos de instâncias do EC2 com bug.

Gostaria de saber quais são os limites para o desempenho da CPU do EC2 ao executar o PHP?

Nós operamos um aplicativo onde queremos priorizar o desempenho em detrimento do custo, enquanto ainda não estamos jogando dinheiro fora.

Quais limites de porcentagem de CPU devo definir para:

  • Quando adicionar uma nova instância
  • Quando remover uma instância em excesso

Se alguém tiver gráficos de desempenho versus carga da CPU, seria incrível ver.

Ou devo usar uma métrica diferente da CPU?

    
por Amy Neville 31.05.2017 / 12:08

2 respostas

1

Não há uma resposta única para isso. Você vai querer carregar testar um único nó e ver em qual uso da CPU o tempo de resposta muda significativamente. Isso pode ser de 90% ou 10%, dependendo do seu aplicativo e como ele lida com a simultaneidade. O JMeter é uma ferramenta útil para esse tipo de teste.

Você então definirá seu nível de alto nível em algum lugar confortavelmente abaixo desse nível. Tenha em mente que os scaleups demoram um certo tempo, então você vai querer deixar uma pista lá.

O downscaling é um pouco mais fácil. Observe o uso de seu nó médio e defina o alvo um pouco abaixo disso, então se você tiver superdimensionado ou o tráfego tiver caído, ele diminuirá. Geralmente, é melhor que o desempenho aumente em incrementos maiores do que reduzir a escala.

Você pode configurar os alarmes do CloudWatch para observar o tamanho do seu cluster para alcançar um determinado valor, sendo o valor 'max' o principal candidato. Isso vai te acordar se tiver escalado até o limite e precisar de alguma intervenção.

    
por 31.05.2017 / 21:11
0

Eu tenho alguns pensamentos para você. Alguns respondem diretamente a sua pergunta, outras são outras coisas a serem consideradas.

Primeiro, o PHP é tipicamente intensivo da CPU. O dimensionamento baseado no uso da CPU é provavelmente sensato. Você terá que descobrir os limites com base em sua experiência, teste de carga ou tentativa e erro. Provavelmente, você deve ser conservador para começar, assistir por um tempo e depois ajustar para obter um bom equilíbrio entre a utilização e o custo.

Existem guias gerais sobre dimensionamento. Este guia sugere um aumento de escala de 80% 20%, enquanto este guia da Amazon sugere uma ampliação de 80% e uma redução de 40% .

Armazenar conteúdo anônimo em cache pode reduzir o uso da CPU em grande quantidade, dependendo do aplicativo. Se 99% dos seus usuários forem anônimos, você poderá veicular todos eles com uma página gerada uma vez. Para reduzir ainda mais a carga e o custo, você pode usar um CDN como o CloudFront ou o CloudFlare para fornecer esse conteúdo estático. Se você usar um CDN, precisará definir seus cabeçalhos de cache corretamente.

Escolha seus tipos de instância do EC2 com cuidado. As instâncias T2 possuem CPU variável, uma vez que você fica sem créditos, essa instância será imediatamente reduzida. O algoritmo de balanceamento de carga "menos conexões" deve atender a isso, mas você pode considerar instâncias M de finalidade geral se T2 lhe der problemas.

Você pode ter mais de um grupo de escalonamento automático associado a um balanceador de carga. Você poderia, por exemplo, adicionar instâncias spot em um limite baixo de CPU, mais cedo do que você escalaria as instâncias sob demanda, mas depois outro grupo adicionaria instâncias sob demanda. Isso é abordado em esta pergunta .

Também gostaria de saber se você poderia ter uma instância T2 em seu ELB, mas, em seguida, aumentar a escala com instâncias M se a carga aumentar. Eu acho que você provavelmente poderia, usando vários grupos de autoescala semelhantes à técnica acima. Pode não valer a pena o incômodo.

    
por 31.05.2017 / 21:31