Como ter expectativas adequadas sobre o desempenho da AWS?

4

Estou no processo de mover uma aplicação web do servidor local que está sendo desenvolvido para outro local para uma eventual implantação. No momento, estou avaliando a AWS e a Rackspace e estou no meio de tentar o site na AWS. Eu tentei manter os dois ambientes tão semelhantes quanto possível; ambos estão executando uma pilha LAMP bem direta sobre o Fedora 17, com as mesmas versões do apache, php e outras. Minha máquina de desenvolvimento é uma caixa homebrew baseada em um chip i7 860 com 32 GB de memória; na AWS, eu normalmente estou usando uma instância m1.small, criada a partir de sua instância fedora 17 "padrão", que é descrita como "Intel Xeon E5-2650 0 @ 1.80GHz (1 Core), Memória: 2048MB" por algum benchmarking software que tenho usado. O dispositivo raiz da minha instância do AWS está configurado como um volume do EBS.

O site está funcionando nas duas caixas e fiquei satisfeito em ver que o desempenho do site é praticamente comparável, com a AWS sendo um pouco mais lenta. No entanto, também estou fazendo algumas codificações de vídeo como parte do trabalho do site, por meio de uma versão do ffmpeg que criei a partir do código-fonte em ambos os sites. Aqui, estou obtendo uma grande diferença de desempenho, com o meu servidor de desenvolvimento sendo cerca de 10 vezes mais rápido que o AWS. Já corri alguns benchmarks, e eles mostram uma diferença semelhante: o benchmark "apache" da Phoronix mostra meu servidor executando cerca de 12x a instância da AWS.

Então, estou intrigado. Eu entendo que a descrição "E5-2650" da instância da AWS é apenas para fins descritivos, e que eu realmente não tenho uma máquina com um E5-2650 só para mim. Mas qual é o jeito certo de pensar sobre isso? O E5-2650 parece ser um chip 8-core muito rápido, por algumas medidas duas vezes mais rápido que o meu i7; talvez eu deveria estar pensando que eu efetivamente tenho 1/8 de tal máquina (1 core de 8)? Isso ainda não me leva a 10x, mas talvez isso seja atribuível à (muito) maior quantidade de memória da minha máquina de desenvolvimento? Ou eu estraguei alguma coisa com a minha instalação da AWS - estou a cerca de um passo acima de um novato completo da AWS, mas não muito mais, então estragar tudo é bem possível. Algum conselho lá fora?

    
por Jim Miller 21.06.2013 / 02:30

1 resposta

3

Eu tenho algumas opções para você considerar:

Opção 1: Contenção de IO

A disparidade no desempenho da codificação de vídeo provavelmente tem muito pouco a ver com a CPU. Em vez disso, examine a contenção de IO. Enquanto estiver codificando, execute top e observe o valor de %wa no cabeçalho. Essa é a porcentagem de tempo que o servidor está tendo que aguardar solicitações de E / S. Você quer esse número tão baixo quanto possível. Nos meus sistemas, eu começo a fazer alterações se vejo um número maior do que 5%, com uma média de 5 minutos.

Se você realmente está vendo uma alta contenção de IO, há algumas coisas que você pode fazer. Primeiro, e talvez mais fácil, seria migrar para um volume EBS de IOPs provisionados (PIOPs). Com estes, você pode especificar quantos IOPs você precisa. Você pagará mais por isso, mas é de longe a maneira mais fácil de aumentar o desempenho de IO.

Se você não quiser fazer isso por algum motivo, você pode associar um monte de volumes do EBS ao seu servidor e juntá-los em um volume RAID0 maior. O IO agregado será bastante aumentado nessa situação, mas também é muito mais arriscado, pois a falha de qualquer volume único do EBS destruirá os dados desse volume.

Eu recomendaria experimentar um volume de PIOPs.

Opção 2: otimização da CPU

Outra coisa a considerar: você está executando um m1.small. Nessas instâncias menores, a AWS é bastante agressiva com o afogamento da CPU, portanto, você pode considerar a migração para uma instância maior, possivelmente um modelo de alta CPU, como o c1.medium. Se a AWS limitar sua CPU, você verá valores altos na coluna %st (roubar) na saída de top .

Opção 3: terceirizar

Isso pode ser complicado, mas por que não experimentar o serviço de Elastic Transcoder da AWS? Isso levará toda a carga de codificação do seu servidor completamente.

    
por 21.06.2013 / 02:40