Frage

Ich habe ein Content-Management-System, das auf einem Webserver läuft und es dem Benutzer unter anderem ermöglicht, Assets wie Bilder, Dateien usw. auf den Server hochzuladen.

Das Problem, das ich habe, ist, dass hinter einem Load Balancer zwei Server laufen und ich versuche, einen effizienten Weg zu finden, um die Asset-Verwaltung zu handhaben.

Die Frage, die ich habe, ist:

Werden die Assets jedes Mal auf einen Server hochgeladen?Oder besteht die Möglichkeit, dass die Bilder/Dateien je nach Auslastung auf Server1 oder Server2 landen?

Wie stelle ich die Bilder bereit, wenn ich nicht weiß, auf welchem ​​Server sie landen?Muss ich die Verzeichnisse dieser Assets (Bilder/Dateien) zwischen den beiden Servern synchron halten?

Danke,

War es hilfreich?

Lösung

Die Synchronisierung ist ein schwer zu lösendes Problem.Sie können mit Couchdb eine Ad-hoc-Synchronisierung durchführen, dafür sind jedoch gute Kenntnisse der Low-Level-Probleme erforderlich.Daher müssen Sie einen Schreibmaster auswählen.

DRDB

Könnte man sich anschauen DRDB :D Verwenden Sie einen Server als Schreibmaster und den anderen als Slave.Dann können Sie Inhalte von beiden Servern bereitstellen.Dieser Ansatz eignet sich hervorragend für Datenbankpaare.

Notiz: Die Trennung Ihres Codes und Ihrer URLs für „Write-Master“ und „Serve-Only“ wird nervig sein

Couchdb

Du könntest benutzen Couchdb aber ich denke, das könnte übertrieben sein.Dies gilt für GROSSE Datenmengen und ein hohes Maß an Fehlertoleranz.

NFS

Sie könnten das Asset-Verzeichnis auf dem Write-Master als NFS-Laufwerk exportieren und es von dem anderen Computer importieren.In diesem Fall würde es jedoch nicht in allen Fällen zu einem Lastenausgleich kommen, d. h. nur, wenn die Dateien vom Slave zwischengespeichert werden.Sie könnten einen dritten Computer als NFS-Server verwenden – dies würde Ihnen eine Skalierung auf mehr Webserver ermöglichen.

Ein zentraler NFS-Server ist möglicherweise die beste Lösung, da Sie auf einen Schreibmaster verzichten können, da jeder Front-End-Server Schreibvorgänge ausführen kann.Dies ist der Ansatz, den ich verwenden würde, es sei denn, ich denke darüber nach, über den Peta-Byte-Bereich hinauszugehen :P

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top