Mover-se do NFS

1

Eu tenho trabalhado em mover mais e mais serviços para longe da dependência do NFS, e estou imaginando o que outras pessoas fizeram com esse problema. Eu sei que existem sistemas de arquivos distribuídos por aí, e eu tenho alguma experiência usando um deles (mogilefs). Estou curioso para saber o que outras pessoas usaram para se afastar do NFS, especialmente em relação ao conteúdo enviado pelo usuário. No domínio da Web especificamente, supondo que um usuário carregue conteúdo para um servidor da Web específico - o que você faz para disponibilizar esse conteúdo em seus clusters? Eu considerei rsync para o resto das máquinas no cluster, ou simplesmente para um único servidor de conteúdo, mas estou curioso para saber o que os outros fizeram para abordar este problema.

    
por gabe. 03.08.2011 / 20:52

3 respostas

2

Eu mantenho o inferno longe de qualquer tipo de sistema de arquivos de cluster, depois de passar um ano tentando (e falhando) manter o GFS rodando de qualquer maneira sã. É ridiculamente complicado, e não funciona muito bem sob carga. Esta avaliação se estende por associação a todos os outros sistemas de arquivos em cluster que eu examinei - o número de partes móveis, a falta de documentação efetiva e a fragilidade geral de toda a invenção de Rube Goldberg faz com que cada parte de mim seja "aeeeeeeee!"

Eu tive um grande sucesso, por outro lado, com o uso de abstrações específicas de aplicativos de nível superior - pensando sobre o que o aplicativo especificamente precisa para fazer com os dados envolvidos e, em seguida fornecendo um meio de fazer exatamente isso. É bastante incomum que os dados em um aplicativo da Web, na verdade, precisem de uma abstração completa do sistema de arquivos POSIX para os dados no aplicativo; em vez disso, pode se safar com alguns verbos mais funcionais. Essa é a camada de acesso entre a camada da web e os dados.

Por exemplo, tire fotos. Se você os possui, você provavelmente os coloca no seu servidor NFS e os servidores da Web os removem e os manipulam quando necessário. Mas o que você realmente faz com eles? Cada um deles é identificado por uma chave única, você os armazena (uma solicitação PUT), os recupera (uma solicitação GET), os exclui (uma solicitação DELETE) e talvez os obtém em tamanhos diferentes (uma solicitação GET com um par de parâmetros) - ei pronto, há uma API REST para isso. Não gosta de REST? SOAP, XML-RPC, o que flutua no seu barco. Inferno, você nem precisa usar HTTP (embora seja uma escolha natural para aplicativos da web, porque suas solicitações GET podem ser enviadas diretamente para os servidores de arquivos). Seja qual for o meio de redimensionamento que você possa realizar (e o armazenamento em cache desses redimensionamentos) pode ser tratado no servidor de armazenamento, o que economiza largura de banda de rede, localiza a lógica envolvida em lidar com eles e mantém as imagens armazenadas próximas do poder de processamento que as manipula (mais perto == mais rápido == impressionante).

O escalonamento desses sistemas de armazenamento geralmente é mais fácil do que dimensionar um servidor de arquivos generalizado também. Eles não precisam de escalonamento tão rapidamente, porque são mais eficientes, mas quando o fazem, é uma simples questão de determinar um algoritmo de fragmentação e implementá-lo em alguns locais-chave. Gosto da simplicidade de determinar quantas imagens (por exemplo) um único servidor pode suportar e, em seguida, use id / capacity para obter o número do servidor a ser usado para qualquer solicitação de imagem.

Esta não é a primeira vez que escrevo esta resposta; veja esta pergunta para uma abordagem um pouco diferente sobre essa questão.

    
por 04.08.2011 / 00:38
3

Bancos de dados (SQL tradicional ou NoSQL como MongoDB ) são uma solução comum para esse problema.
Armazene o conteúdo que precisa ser compartilhado no banco de dados e recupere-o de seus servidores Web front-end.

Outra solução bastante comum é uma SAN com acesso compartilhado.

Embora eu não seja fã do NFS, direi que, se estiver funcionando para você, projetado e implementado bem, e relativamente livre de problemas, você provavelmente poderá continuar usando-o quase indefinidamente. Se afastar disso é ótimo, mas se não houver uma razão convincente além de "Ew, é NFS !" não se mate tentando se livrar dele ...

    
por 03.08.2011 / 21:12
2

Se você estiver procurando por sistemas de arquivos de cluster, existem muitas soluções abertas / fechadas disponíveis. Apenas para citar alguns: GFS , Lustre , GlusterFS , OCFS2 , Veritas Cluster FS . O último é um FS de empresa comercial, mas com a melhor experiência.

Editar: Esqueci de mencionar que qualquer um deles deve resistir em um dispositivo SAN compartilhado entre todos os nós do cluster. Também é um requisito para o Veritas CFS.

    
por 03.08.2011 / 22:11