Desempenho da instância do Amazon AWS Micro - Apache2 e PHP

3

Eu comecei a fazer algum trabalho para um parceiro executando Apache2 e PHP no Ubuntu e a CPU está chegando. O que eu realmente procuro é o conselho sobre se o uso de uma instância Micro é uma boa idéia para um site de produção / voltado para o público. Meu instinto é não, e usar uma instância padrão ou alta seria uma ideia melhor, mas como comecei a brincar na AWS, só queria ver o que outras pessoas fizeram.

Agora ele executa alguns desses Load Balanced, mas ele está tendo que matar instâncias off, eu vou olhar para configurar o Cloudwatch para fazer isso por ele automaticamente até que eu possa entender melhor o que está acontecendo com seu aplicativo sob o capô.

Sei que é uma pergunta muito vaga e não forneci muitos detalhes sobre a configuração, mas ainda estou atualizando o site dele.

    
por enterzero 09.11.2011 / 00:36

2 respostas

3

Resposta curta: Não desconte o t1.micro - é uma instância com capacidade e pode executar um site PHP - mas se você não conseguir fazer funcionar com um t1.micro, obtenha uma instância maior (como oposta a múltiplas t1.micros).

Long Answer: A instância t1.micro é bastante capaz de gerar conteúdo dinâmico - e pode ser executada de forma bastante suave, servindo vários sites pequenos. Para uma configuração bem otimizada (digamos Wordpress com cache), eu diria que o t1.micro deve lidar com pelo menos 50k acessos / mês, se não mais. Uma das principais idéias, porém, é que as coisas estão bem otimizadas - uma instalação padrão do Apache derrubará um t1.micro razoavelmente rápido - já que cada requisição gera um novo processo - com toda a sobrecarga associada.

Além disso, o t1.micro não tem espaço de troca por padrão (pode ser útil configurar um volume de 1 GB do EBS para usar como espaço de troca - mais como uma medida de segurança do que para realmente usá-lo. muito, então algo precisa mudar.

Se você for executar várias instâncias, desaconselhamos várias instâncias de t1.micro. O desempenho por dólar é muito melhor nas instâncias maiores (memória, E / S e CPU). Um dos outros pontos sobre o t1.micro é que, enquanto você pode 'explodir' CPU adicional, os ciclos também podem ser 'roubados'. Definitivamente vá com uma instância de 32 bits se você estiver indo para a rota t1.micro - a sobrecarga adicionada de registradores de 64 bits simplesmente levará a instância a ficar sem memória mais fácil, sem qualquer ganho de desempenho tangível.

Se possível, eu recomendaria usar o php-fpm em vez de mod_php - embora um pouco mais lento, é capaz de suportar um volume muito maior de tráfego com menos carga na instância. Além disso, se possível, descarregue a entrega de conteúdo estático. Para o último, você pode usar um CDN como o Cloudfront (ou até mesmo usar o S3) - a ideia é que esses pedidos não consomem a largura de banda, o disco de E / S ou o poder de processamento (ou memória) da instância. Como alternativa, você pode usar um servidor front-end leve (por exemplo, nginx) para manipular conteúdo estático e, em seguida, fazer proxy de solicitações dinâmicas para o apache (se você não puder alternar totalmente para usar esse servidor front-end) - isso aumenta a complexidade setup - mas especialmente se suas páginas são armazenadas em cache (ou seja, versões estáticas geradas sempre que a página é alterada), o ganho de desempenho pode ser substancial. Também pode ser aconselhável armazenar em cache o conteúdo dinâmico com um servidor front-end (a duração dependerá da popularidade do site) - para evitar o processamento desnecessário de solicitações dinâmicas.

Uma sugestão final - que pode não ser possível - considere o uso do Linux da Amazon como seu sistema operacional em vez do Ubuntu. Eu descobri que ele é extremamente leve e eficiente em um t1.micro - ele vem com o mínimo de pacotes instalados e tem uma pegada muito pequena.

Executar um site dyanmic em um t1.micro certamente é possível - eu executei vários sites pequenos (Wordpress / Drupal / Joomla) em um único t1.micro - ambos usando nginx / apache / php-fcgi e verniz / nginx / php-fpm - incluindo um servidor de e-mail (postfix), imap (dovecot), banco de dados (mysql) e servidor ftp (pure-ftp / vsftp) - com desempenho decente (carregamento de sites do Wordpress em 1-2s), baixo médias de carga (normalmente abaixo de 0,1, a pedido a cada 15s) e cerca de 150-200MB de memória usada). Não seria minha escolha por desempenho, mas é a solução menos onerosa para um site que simplesmente precisa estar on-line de maneira confiável, sem esperar muito tráfego.

Eu diria que o t1.micro é uma plataforma muito boa para trabalhar em suas habilidades de otimização - ele permite que você veja o quanto você pode obter o mínimo possível e quais otimizações serão mais caras do que valem. Se, no entanto, o seu site for simplesmente muito grande para um único t1.micro, use uma instância maior e não instâncias t1.micro adicionais (a menos que sua finalidade específica seja failover - mas as chances são nesse estágio de que você usará instâncias maiores de qualquer maneira). . Não faça o balanceamento de carga de instâncias t1.micro - há muito pouco a ganhar com essa abordagem - uma instância maior servirá melhor a você. No entanto, você definitivamente quer descobrir por que essas instâncias estão morrendo - eu apostaria que é um problema de memória, em vez de uma CPU. Você definitivamente quer tentar lançar uma cópia do seu site, e executar ab (ou seige , etc) sobre ele e ver o que o servidor pode suportar - e se é ou não o design do aplicativo (que você provavelmente não pode mudar) ou a configuração do servidor.

(A menos que você esteja usando instâncias spot, você pode atualizar o tipo de instância com bastante facilidade - basta parar (não terminar) e usar ec2-modify-instance-attribute para alterar o tipo, antes de reiniciar).

    
por 09.11.2011 / 03:21
1
As instâncias de

t1.micro são adequadas para sites públicos, desde que você não receba mais tráfego do que a instância t1.micro pode manipular. (Essa frase anterior não disse muito.)

Parece que você está obtendo mais tráfego do que um t1.micro pode manipular com a maneira como o aplicativo está atualmente escrito, portanto, você deve atualizar para um tipo de instância maior.

Não acredito que o balanceamento de carga t1.micro faça sentido. O mínimo para balanceamento de carga, na minha opinião, seria m1.small e, mesmo assim, é melhor você ter apenas um c1.medium, já que é mais barato que o número de m1.smalls necessários para obter CPUs equivalentes.

    
por 09.11.2011 / 01:18