Como maximizar a instância do EC2 de desempenho

11

Disclaimer: Eu sou um desenvolvedor front-end em um tipo de servidor do mundo.

Oi pessoal. Eu tenho uma instância de servidor no EC2, the c5d.9xlarge, cujas especificações são:

  • Sistema: Ubuntu 18.04
  • vCPU: 36 threads / núcleos
  • Memória: 72 GB
  • Armazenamento: SSD NVMe de 900 GB
  • Largura de banda dedicada do EBS: 7.000 Mbps
  • Desempenho de rede: 10 Gbps

Cenário: eu uso esse servidor para fazer upload de vídeos grandes (4K, 1 ou mais horas) e os processo usando FFMPEG, mas comparado ao meu servidor UpCloud anterior com 12 núcleos e 48 GB de RAM, este servidor EC2 está demorando 1,5 vezes mais para carregar e processar , que eu acho que não deveria ser o caso.

Pergunta: Como maximizar o desempenho pelo que estou pagando?

Martavis P.
fonte
Você deve considerar o custo do AWS Elastic Transcoder para verificar se ele funciona melhor para você.
Tim
Obrigado @Tim. Vi isso há um tempo atrás, mas na verdade tenho mais algumas chamadas neste servidor, então achei que as combinaria.
Martavis P.

Respostas:

19

Você c5d.9xlargevem com armazenamento de instância de 900 GB (também conhecido como armazenamento efêmero ) - você está usando isso para armazenar e processar os arquivos? Embora sua instância tenha uma largura de banda do EBS dedicada, o armazenamento SSD na instância ainda será muito mais rápido . Eu sugiro que você use isso para todos os arquivos de origem e temporários e armazene apenas os resultados no EBS.

Existem algumas ressalvas no armazenamento de instância:

  1. Você precisa formatar e montar antes de poder ser usado. Consulte esta resposta para obter mais detalhes: Montar automaticamente o armazenamento da instância SSD no AWS EC2 no Ubuntu 16.04

  2. O conteúdo é limpo quando você para e reinicia a instância. Ele sobrevive à reinicialização, mas não para / inicia.


Atualização: por padrão, o SSD não está montado - você deve seguir as etapas na resposta vinculada acima para usá-lo. Na configuração padrão após a inicialização, você usará o EBS, que é mais lento que o SSD.

Então você terá que ter certeza de que está realmente usando - defina o diretório de upload , trabalho e temporário para esse ponto de montagem do SSD.

Ou ainda melhor - já que você possui 72 GB de RAM - crie um disco RAM e use-o para arquivos temporários. Isso será ainda mais rápido que o SSD (se os arquivos couberem).

Antes de tudo, desconsidere a velocidade de upload e otimize o processamento - faça o upload do arquivo para o EBS e cronometre o processamento, depois faça o upload para o SSD e cronometre-o e depois para o disco RAM e cronometre o processamento. Veja o quanto eles diferem.

A velocidade do upload será afetada por muitos aspectos, incluindo a distância e a latência entre você e a região da AWS na qual está enviando. Você está usando uma região da AWS perto de você?

Re desempenho da CPU - você tem 36 CPUs disponíveis, no entanto, cada núcleo único pode ser mais lento que os da sua máquina anterior de 12 núcleos. Depende da arquitetura da CPU e da velocidade do relógio. No entanto, se você puder paralelizar o processamento de vídeo em 36 threads, será melhor nessa instância. Se você confiar em um único encadeamento, poderá não obter o desempenho desejado.

Espero que ajude :)

MLu
fonte
Sim, o disco rígido é usado para armazenar enquanto os arquivos estão sendo processados ​​e os arquivos são temporários até o processo terminar. Os arquivos resultantes são enviados para o S3. Na verdade, não sei se o SSD também está montado. Estou começando a perceber que a AWS não usa as especificações como configuração padrão. A montagem de um SSD torna o upload mais rápido? Acompanhamento: alguma idéia de como também posso maximizar a especificação de CPU permitida?
Martavis P.
@MartavisP. adicionou algumas atualizações à resposta.
Mlu
Uau, muito obrigado pela informação! Vou estudar e aplicar o que você escreveu.
Martavis P.
1
Ótima resposta. Você precisa fazer um benchmark para encontrar o gargalo, dividi-lo com o tempo de upload, o tempo de processamento, o uso da CPU, o EBS / uso da rede etc. Pode ser tão simples quanto você tem mais latência para esse servidor para que o upload seja mais lento, com o qual você pode contornar o upload de dados em threads paralelos no EC2 / S3. A Netflix tem este vídeo no youtube que pode ser interessante, mas siga as etapas de diagnóstico antes de se preocupar com esse tipo de detalhe.
Tim
1

Existe algum escopo para procurar alternativas? Pelo custo de um c5d.9xlarge, mesmo se você estiver obtendo um desconto substancial, no mercado de servidores dedicados, você poderá ter várias máquinas equivalentes ou melhores

Usar a nuvem para esse tipo de problema em escala vertical é uma receita para pagar em excesso e, como você viu, um desempenho ruim

Desculpe pelo tipo de não resposta, mas não tenho representante suficiente para comentar

Luke F
fonte
Isso foi um desconto para mim, mudando do UpCloud. Então, o que você recomenda?
Martavis P.
1
Parece que o mesmo cálculo na nuvem é sempre aproximadamente o preço de um servidor alugado mensalmente em algum host aleatório da web. Então, há descontos para empresas (~ 30%) e você pode reservar por 3 anos (2x mais barato, mas agora muito pior do que o host aleatório da web). E esse servidor mensalmente alugado geralmente parece 1/12 do preço da compra definitiva do hardware. É o que vejo pelo menos. Portanto, na nuvem, você compra o hardware a cada 3 meses, mas não o possui.
usr
Sim, esse é um bom argumento, mas você deve se lembrar de que está pagando pela manutenção e conveniência, como tudo na vida. Prefiro permitir que a AWS seja minha mecânica do que passar dias tentando descobrir como corrigir uma interrupção do servidor. É um bom conhecimento, mas no final das contas minha carreira é sobre o código, para que a nuvem funcione para mim.
Martavis P.