Servidor intensivo de I / O MySql no Amazon AWS

3

Recentemente, mudamos de um data center tradicional para a computação em nuvem na AWS. Estamos desenvolvendo um produto em parceria com outra empresa e precisamos criar um servidor de banco de dados para o produto que lançaremos.

Eu tenho usado o Amazon Web Services nos últimos 3 anos, mas esta é a primeira vez que recebo uma especificação com essa configuração de hardware muito específica.

Eu sei que existem trade-offs e que o hardware real será sempre mais rápido do que as máquinas virtuais, e conhecendo esse fato de antemão, o que você recomendaria?

1) Amazon EC2? 2) Amazon RDS? 3) Algo mais? 4) Esqueça baby, fique com o hardware real

Aqui estão os requisitos de hardware

Este servidor será focado em E / S e MySQL para as estatísticas, tamanho de memória e espaço em disco para hospedagem de imagens.

Servidor 1

E / S A principal parte deste servidor será o processamento de I / O, os cartões FusionIO provaram ser extremamente eficientes, este é atualmente o melhor que você pode ter neste domínio. o Fusion ioDrive2 MLC 365 GB ( link )

CPU O MySQL usará menos núcleos de CPU do que o Apache, mas irá utilizá-los com muita força, a família E7 possui 30M Cache L3, o que proporciona um melhor desempenho: o 1x Intel E7-2870 vai ficar bem.

Armazenamento SAS será bom o suficiente em termos de desempenho, especialmente considerando o espaço necessário. o RAID 10 de 4 x SAS 10k ou 15k para um espaço disponível total de 512 GB.

Memória O mínimo de 64 GB é necessário neste servidor, considerando o tamanho do banco de dados de estatísticas. Aviso: o banco de dados de estatísticas crescerá rapidamente, se possível, considerar iniciar com 128 GB diretamente, isso ajudará. Este servidor será focado em E / S e MySQL para as estatísticas, tamanho de memória e espaço em disco para hospedagem de imagens.

Servidor 2

E / S A principal parte deste servidor será o processamento de I / O, os cartões FusionIO provaram ser extremamente eficientes, este é atualmente o melhor que você pode ter neste domínio. o Fusion ioDrive2 MLC 365 GB ( link )

CPU O MySQL usará menos núcleos de CPU do que o Apache, mas irá utilizá-los com muita força, a família E7 possui 30M Cache L3, o que proporciona um melhor desempenho: o 1x Intel E7-2870 vai ficar bem.

Armazenamento SAS será bom o suficiente em termos de desempenho, especialmente considerando o espaço necessário. o RAID 10 de 4 x SAS 10k ou 15k para um espaço disponível total de 512 GB.

Memória O mínimo de 64 GB é necessário neste servidor, considerando o tamanho do banco de dados de estatísticas. Aviso: o banco de dados de estatísticas crescerá rapidamente, se possível, considerar iniciar com 128 GB diretamente, isso ajudará.

Obrigado antecipadamente.

Melhor,

    
por rhossi 28.03.2012 / 21:35

3 respostas

2

Os problemas:

  • Os dois servidores listados acima são absolutamente idênticos.
  • Você fala sobre o FusionIO, mas também fala sobre executar o MySQL e o Apache na mesma caixa.
  • Você não menciona se os arquivos Apache ou o banco de dados MySQL (ou partes dele, como ib_logfile ) estarão nas unidades FusionIO.

O equívoco:

Não é necessariamente verdade que "o hardware real será sempre mais rápido que as máquinas virtuais". É verdade que no mesmo hardware o mesmo aplicativo terá melhor desempenho por não estar em uma máquina virtual, mas como você não tem acesso ao hardware da Amazon, essa comparação é discutível.

O ponto sobre a nuvem é que ela é dimensionada horizontalmente; portanto, se você puder atender 100 visitantes simultâneos com um servidor, poderá atender 1000 visitantes simultâneos com 10 servidores e cada visitante receberá a mesma velocidade de resposta, independentemente de quantos você tem.

A nuvem:

Existem algumas diferenças importantes com os provedores de nuvem em comparação com o colocation. Se você puder aproveitá-los, eles tornarão a hospedagem na nuvem um vencedor claro.

  1. Você pode aumentar ou diminuir as instâncias muito rapidamente. Se o tráfego for muito intermitente (você administra um site de venda de ingressos), é possível clonar facilmente seu nível da Web nível de banco de dados e / ou armazenamento em centenas de máquinas virtuais uma hora antes dos ingressos do Justin Bieber serem colocados à venda e desligá-los uma hora depois para economizar dinheiro. As soluções baseadas em hardware normalmente levam semanas para aumentar sua capacidade e continuam custando dinheiro quando não estão sendo totalmente utilizadas.
  2. O custo inicial pode ser muito menor. O hardware que você menciona provavelmente custa dezenas de milhares de dólares, além de seus outros custos de hospedagem. Meu servidor Amazon me custa cerca de US $ 15 por mês e ainda assim eu poderia facilmente escalar para uma máquina virtual muito mais robusta e escalá-la para dezenas de instâncias com balanceamento de carga com um aviso de horas.
  3. Eles fazem muito trabalho para você. A Amazon tem outros serviços, como o DynamoDB, que se expandem automaticamente para os requisitos de carga de trabalho ou de armazenamento que você fornece. Eles são executados em SSDs por velocidade e são replicados para vários locais, oferecendo redundância e disponibilidade.

Dito isso, seu aplicativo precisa ser capaz de dimensionar horizontalmente. Você não pode simplesmente jogá-lo na nuvem e esperar que ele seja dimensionado para sempre. Por exemplo, as sessões padrão do PHP têm dois problemas:

  1. Eles são armazenados em um disco local, o que significa que você precisa usar sessões fixas ou um disco compartilhado, que será um gargalo.
  2. Eles são abertos com flock() , que é um bloqueio exclusivo de bloqueio de arquivos. Apenas um processo PHP pode estar usando um arquivo de sessão por vez. Isso pode ser um problema sério quando você começa a disparar muitas chamadas AJAX.

Este é apenas um exemplo, mas os aplicativos que não foram escritos com o dimensionamento horizontal em mente são geralmente cheios de recursos exclusivos como esse.

Se você estiver executando um banco de dados distribuído (que são os serviços de banco de dados da Amazon), seu aplicativo também precisará lidar com os trade-offs inerentes ao Teorema CAP . Isso indica que você pode obter dois dos três aspectos: consistência, disponibilidade, tolerância à partição. Você precisará saber quais dos três você não tem e se seu aplicativo compensará isso.

Se o seu aplicativo se adequar ao hardware, vá em busca de hardware. Se for adequado para a nuvem, vá para a nuvem.

Observação: usei a Amazon como exemplo aqui, mas há outros provedores de hospedagem em nuvem com recursos semelhantes de ativação e desativação de instâncias muito rapidamente, cobrando apenas o que você realmente usa.

    
por 28.03.2012 / 23:03
3

Para obter o máximo desempenho de uma solução em nuvem, você precisa arquitetar para uma nuvem. Se você está preocupado com a quantidade de IOPS que pode obter de um serviço projetado para ser totalmente escalável (tanto para cima quanto para baixo), você está pensando em máquinas virtuais e não em computação em nuvem. Quanto à quantidade de IOPS disponível, acho que este artigo sobre o EBS explica a Questões a considerar

    
por 28.03.2012 / 22:15
0

Outro ponto que não foi mencionado é a capacidade de escalar a capacidade do banco de dados no futuro. Os requisitos de hardware não são estáticos, eles serão alterados com o tempo conforme o aplicativo cresce. @rhossi, você deve considerar, para cada uma das opções de hardware, seu caminho de escalabilidade no futuro. Resumindo: (1) Para o Amazon EC2, para escalar, você pode atualizar para uma instância maior [easy], para expandir você precisará instalar o MySQL em instâncias adicionais e definir clustering entre elas [desempenho da rede hard, também abaixo do ideal a menos que você solicite instâncias de cluster especiais]. (2) Para o Amazon RDS, para escalar, o mesmo [easy], para expandir, adicionar mais instâncias de RDS e definir clustering [hard]. (3) Algo mais - você pode olhar para a solução banco de dados em nuvem do Xeround, que tem escalonamento automático e não requer clustering, mas acho que é limitado em capacidade de armazenamento, pode não ser adequado. Pode haver opções adicionais que oferecem escalonamento automático e acho que seria bom investigar. (4) O aumento real de hardware requer a atualização manual do hardware [pequena dificuldade + custo inicial], a expansão requer mais máquinas e a definição manual do cluster [médio-difícil], mas isso é mais fácil de alcançar do que na nuvem, porque os IPs são estático e melhor desempenho de rede. HTH

    
por 17.10.2012 / 18:29