Usando o NFS para aplicação web PHP / MySQL escalável

3

Veja a situação:

Eu tenho um aplicativo da web PHP / MySQL que aceita uploads de usuários (arquivos pdf). A partir dessas páginas de arquivos pdf, uma imagem de pré-visualização é feita em tempo real e apresentada aos usuários do aplicativo da web. Alguns pdfs podem estar no lado grande, a maioria terá menos de 50 MB, mas alguns casos extremos podem ter até algumas centenas de MB. Um pouco de espera para a imagem de pré-visualização para grandes arquivos pdf é aceitável, mas não mais do que um minuto, digamos. Tudo está sendo executado em um servidor por enquanto, mas em breve o aplicativo atingirá o limite de capacidade de armazenamento e processamento do servidor.

Minha ideia para resolver o problema:

Para lidar com essa situação, tive a idéia de ter um ou mais servidores de processamento de PDF, conforme necessário, e um ou mais servidores de armazenamento de arquivos. Esses dois tipos de servidores são montados no servidor no qual o aplicativo real é executado usando o NFS. O aplicativo poderia então usar o GearMan para delegar tarefas de processamento de PDF a esses servidores de processamento. O servidor de processamento pode montar o servidor de armazenamento e ler o arquivo armazenado lá, processá-lo e gravar sua saída nesse servidor. Os servidores dos quais estou falando serão amazon ec2 instances.

O aplicativo da web retorna um link para a imagem de visualização do pdf resultante no servidor de armazenamento que foi usado, que pode ser usado no front end para mostrar a imagem ao usuário.

Minha pergunta:

Eu não tenho experiência com aplicativos que usam vários servidores. Essa ideia é viável ou há uma maneira melhor de fazer isso? A configuração do NFS é rápida e confiável o suficiente para essa situação?

    
por Asciiom 16.12.2012 / 11:28

1 resposta

2

Você definitivamente está pensando nas linhas certas, mas na minha experiência, o armazenamento compartilhado em máquinas virtuais raramente é de alto desempenho, então duvido que eu realmente descesse a rota NFS nessa instância.

A maior desvantagem seria o Ponto Único de Falha em torno do NFS sobre o EBS, o que pode ser bastante complicado de mitigar. Em um datacenter não virtual, eu usaria um Appliance NAS em cluster para lidar com o NFS de failover. No EC2 não tenho certeza de como eu faria isso.

Se você já estiver usando o Amazon EC2 para trabalhos do trabalhador, por que não armazenar os ativos em um bucket do S3. O desempenho é bom e o bucket está disponível em qualquer lugar do mundo, usando o método HTTP aceess.

Tudo o que você precisa fazer é enviar para o S3, fazer com que o funcionário pegue o arquivo, processe-o e deixe os ativos resultantes de volta no S3.

Você pode até montar um bucket S3 localmente. link

Na verdade, você poderia ir mais para o Amazon Stack e usar seu serviço de mensagens simples em vez de (ou tão bem) gearman.

    
por 16.12.2012 / 12:03