J'ai un site Web qui reçoit environ 7 000 requêtes par seconde sur un serveur nginx. Ce serveur gère à la fois les réécritures sur un serveur Apache et sert directement les fichiers statiques, les images, etc. Les fichiers statiques sont la plus grande partie avec environ 5 000 demandes.
Avec une mise à niveau de l'architecture, je pense à utiliser un serveur de fichiers central qui exporte un répertoire contenant ces fichiers statiques via NFS. Il n'y aura pas d'accès en écriture à ces fichiers, le répertoire pourrait donc être monté en lecture seule sur la machine nginx. Ma principale préoccupation est:
NFS est-il assez rapide pour cela? Y a-t-il une limite au nombre de demandes que NFS peut gérer? Existe-t-il des options "incontournables" lorsque vous procédez de cette façon?
Bonus: existe-t-il d'autres alternatives pour cette configuration que NFS?
Merci!
Réponses:
En configurant un serveur NFS central, vous introduisez un point de défaillance unique dans votre conception. Cela seul devrait être un facteur de rupture. Sinon, NFS peut être suffisamment rapide pour une charge comme celle-ci. Les facteurs critiques seront d'avoir suffisamment de RAM pour mettre en cache les fichiers, les interconnexions à faible latence (Gig-E ou mieux) et le réglage (moins que le précédent).
Vous devriez également envisager sérieusement d'utiliser rsync ou un outil similaire pour conserver des copies locales des mises à jour des fichiers statiques sur chaque serveur Web individuel. Une autre option pourrait être une solution de serveur SAN ou NFS redondante (qui seront toutes deux beaucoup plus compliquées et coûteuses que l'idée rsync).
la source
J'utilise cachefilesd (et un noyau Linux récent, avec cachefs) pour mettre en cache les fichiers NFS sur un disque dur local. De cette façon, chaque lecture dans le nfs copiera le fichier dans un répertoire / var / cache / fs et les prochaines lectures seront livrées à partir de là, le noyau vérifiant dans le nfs si le contenu est toujours valide.
De cette façon, vous pouvez avoir un NFS central, mais sans perdre les performances des fichiers locaux
Cachefilesd se chargera du nettoyage des anciens fichiers lorsque la taille / les noeuds libres atteindront un niveau configuré, afin que vous puissiez servir des données rares du NFS et des requêtes courantes du HD
Bien sûr, utilisez également un vernis pour mettre en cache les demandes les plus courantes et éviter que le nginx / NFS ne soit alors utilisé.
Voici un petit guide de cachefilesd
la source
La vitesse dépend de nombreux facteurs:
La limite des fichiers ouverts via NFS est une limitation du système d'exploitation hôte. FreeBSD a par exemple de nombreuses options de réglage différentes pour prendre en charge un grand nombre de fichiers ouverts, mais cela dépend de la quantité de RAM de votre serveur.
Une alternative à un serveur de fichiers central consiste à utiliser la synchronisation / réplication entre vos serveurs Web (comme le suggère Chris S). rsync ou DRBD pourrait être un excellent choix et rentable.
la source
Je déconseille NFS à moins que vous ne mettiez de la mise en cache là-dedans. Le cache nginx est meilleur que rien, mais Varnish est meilleur.
Cela dit, si votre charge change pour être un contenu plus dynamique que statique, il deviendra plus important de servir les fichiers d'applications à partir du disque local.
Si vous insérez NFS, assurez-vous d'avoir une redondance.
la source