Eu tenho um site que está recebendo cerca de 7k solicitações por segundo em um servidor nginx. Este servidor lida com reescritas em um servidor Apache, além de servir diretamente arquivos estáticos, imagens etc. Os arquivos estáticos são a maior parte, com cerca de 5 mil solicitações.
Com uma atualização da arquitetura, penso em usar um servidor de arquivos central que exporta um diretório que contém esses arquivos estáticos via NFS. Não haverá acesso de gravação a esses arquivos; portanto, o diretório pode ser montado como somente leitura na máquina nginx. Minha principal preocupação é:
O NFS é rápido o suficiente para isso? Existe um limite para quantas solicitações o NFS pode atender? Existem algumas opções "indispensáveis" ao seguir esse caminho?
Bônus: existem outras alternativas para essa configuração além do NFS?
Obrigado!
Respostas:
Ao configurar um servidor NFS central, você introduz um único ponto de falha em seu design. Isso por si só deve ser um disjuntor. Caso contrário, o NFS pode ser rápido o suficiente para uma carga como essa. Os fatores críticos serão ter RAM suficiente para armazenar arquivos em cache, interconexões de baixa latência (Gig-E ou melhor) e ajuste (menos que o anterior).
Você também deve considerar o uso do rsync ou de uma ferramenta semelhante para manter cópias locais das atualizações de arquivos estáticos em cada servidor da web. Outra opção pode ser uma solução de servidor SAN ou NFS redundante (os quais serão muito mais complicados e dispendiosos do que a idéia rsync).
fonte
Eu uso cachefilesd (e um kernel Linux recente, com cachefs) para armazenar em cache arquivos NFS em um HD local. Dessa forma, toda leitura no nfs copiará o arquivo para um diretório / var / cache / fs e as próximas leituras serão entregues a partir daí, com o kernel verificando no nfs se o conteúdo ainda é válido.
Dessa forma, você pode ter um NFS central, mas sem perder o desempenho dos arquivos locais
O Cachefilesd cuidará da limpeza de arquivos antigos quando o tamanho / inodes livres atingirem um nível configurado, para que você possa fornecer dados incomuns do NFS e solicitações comuns do HD
Obviamente, também use um verniz para armazenar em cache as solicitações mais comuns e salvar o nginx / NFS de servir então.
Aqui está um pequeno arquivo de cache
fonte
A velocidade depende de muitos fatores:
O limite de arquivos abertos via NFS é uma limitação do sistema operacional host. O FreeBSD possui, por exemplo, muitas opções de ajuste diferentes para suportar um grande número de arquivos abertos, mas isso depende da quantidade de RAM no seu servidor.
Uma alternativa para um servidor de arquivos central é usar a sincronização / replicação entre seus servidores da web (como sugere Chris S). rsync ou DRBD pode ser uma escolha ótima e econômica.
fonte
Eu recomendaria contra o NFS, a menos que você coloque algum cache lá. O cache nginx é melhor que nada, mas o Varnish é melhor.
Com isso dito, se sua carga mudar para ser um conteúdo mais dinâmico do que estático, será mais importante servir os arquivos de aplicativos do disco local.
Se você inserir o NFS, verifique se possui redundância.
fonte