Ich habe eine Website, die ungefähr 7.000 Anfragen pro Sekunde auf einem Nginx-Server erhält. Dieser Server übernimmt sowohl das Umschreiben auf einen Apache-Server als auch das direkte Bereitstellen statischer Dateien, Bilder usw. Statische Dateien sind mit etwa 5.000 Anfragen der größte Teil.
Bei einem Architektur-Upgrade denke ich über die Verwendung eines zentralen Dateiservers nach, der ein Verzeichnis mit diesen statischen Dateien über NFS exportiert. Es wird keinen Schreibzugriff auf diese Dateien geben, sodass das Verzeichnis schreibgeschützt auf dem Nginx-Computer bereitgestellt werden kann. Mein Hauptanliegen ist:
Ist NFS dafür schnell genug? Gibt es eine Begrenzung für die Anzahl der Anfragen, die NFS verarbeiten kann? Gibt es einige "Must-Have" -Optionen, wenn Sie diesen Weg gehen?
Bonus: Gibt es neben NFS noch andere Alternativen für dieses Setup?
Vielen Dank!
Antworten:
Durch das Einrichten eines zentralen NFS-Servers führen Sie einen einzelnen Fehlerpunkt in Ihr Design ein. Das allein sollte ein Deal Breaker sein. Wenn nicht, kann NFS für eine solche Last schnell genug sein. Die kritischen Faktoren sind genügend RAM zum Zwischenspeichern von Dateien, Verbindungen mit geringer Latenz (Gig-E oder besser) und Optimierung (weniger als beim vorherigen).
Sie sollten auch die Verwendung von rsync oder eines ähnlichen Tools in Betracht ziehen, um lokale Kopien der statischen Dateien auf jedem einzelnen Webserver zu aktualisieren. Eine andere Option könnte eine SAN- oder redundante NFS-Serverlösung sein (beide sind viel komplizierter und kostspieliger als die rsync-Idee).
quelle
Ich verwende cachefilesd (und einen neueren Linux-Kernel mit cachefs), um NFS-Dateien auf einer lokalen Festplatte zwischenzuspeichern. Auf diese Weise kopiert jeder Lesevorgang in der NFS die Datei in ein Verzeichnis / var / cache / fs, und die nächsten Lesevorgänge werden von dort geliefert, wobei der Kernel die NFS überprüft, ob der Inhalt noch gültig ist.
Auf diese Weise können Sie ein zentrales NFS haben, ohne jedoch die Leistung lokaler Dateien zu beeinträchtigen
Cachefilesd kümmert sich um die Bereinigung alter Dateien, wenn die freie Größe / Inodes eine konfigurierte Ebene erreicht, sodass Sie ungewöhnliche Daten aus dem NFS und allgemeine Anforderungen aus der Festplatte bereitstellen können
Verwenden Sie natürlich auch einen Lack, um die häufigeren Anforderungen zwischenzuspeichern und das Nginx / NFS vor dem Serving zu schützen.
Hier ist eine kleine Cache-Datei und ein Howto
quelle
Die Geschwindigkeit hängt von vielen Faktoren ab:
Die Beschränkung offener Dateien über NFS ist eine Beschränkung des Host-Betriebssystems. FreeBSD bietet beispielsweise viele verschiedene Optimierungsoptionen, um eine große Anzahl geöffneter Dateien zu unterstützen. Dies hängt jedoch von der Größe des Arbeitsspeichers auf Ihrem Server ab.
Eine Alternative zu einem zentralen Dateiserver ist die Verwendung der Synchronisierung / Replikation zwischen Ihren Webservern (wie von Chris S vorgeschlagen). rsync oder DRBD sind möglicherweise eine gute und kostengünstige Wahl.
quelle
Ich würde von NFS abraten, es sei denn, Sie setzen dort etwas Caching ein. Der Nginx-Cache ist besser als nichts, aber Lack ist besser.
Wenn sich Ihre Last jedoch in einen dynamischeren als einen statischen Inhalt ändert, wird es wichtiger, Apps-Dateien von der lokalen Festplatte bereitzustellen.
Wenn Sie NFS einfügen, stellen Sie sicher, dass Sie über Redundanz verfügen.
quelle