
Ich habe eine Best-Practice-Frage. Wir haben eine App, die auf zwei Servern hinter einem Load Balancer läuft. Die meisten Daten befinden sich in einer gemeinsamen Datenbank, vom Benutzer hochgeladene Dateien im Objektspeicher. Es gibt also nicht viel zu synchronisieren, außer einigen YAML-Konfigurationsdateien, die vom Benutzer über das App-Backend generiert werden.
Was ist die beste Vorgehensweise, um diese Dateien synchron zu halten? Eine Lösung, die mir eingefallen ist, ist, ein freigegebenes Volume zu mounten, um den Code und die Konfigurationsdateien zu hosten. Gibt es eine bessere Lösung?
Antwort1
Nur eine „Best Practice“ anzunehmen ist eine Falle. Es gibt immer mehr als eine Lösung.
Eine Möglichkeit besteht darin, den Inhalt der Konfigurationsdateien in der Datenbank zu speichern. Blobs werden von einer Anwendung verwaltet und möglicherweise auf die Festplatte geschrieben, wenn sie von einer anderen Anwendung gelesen werden. Oder ändern Sie die Anwendung so, dass in der Datenbank diskrete Datenfelder anstelle von YAML-Dokumenten verwendet werden. Nutzt die vorhandene zentrale Datenbank, erfordert jedoch, dass diese Datenbank zuerst verfügbar ist.
Speichern Sie die Konfigurationsdateien im Softwarepaket oder Image, das die Anwendung enthält. Stellen Sie neue Dateien bereit, indem Sie die App aktualisieren. Das ist nur sinnvoll, wenn diese Dateien von denselben Personen oder Prozessen geändert werden, die die Anwendung aktualisieren.
Kopieren Sie die Dateien von der autoritativen Kopie nach einem Zeitplan oder bei Änderung in jede Instanz. Wählen Sie eine Dateikopiersoftware Ihrer Wahl, rsync, sftp. Es wären zusätzliche Skripte erforderlich, wenn die Installation transaktional sein soll, d. h. alle Dateien werden installiert oder keine.
Mounten Sie eine Netzwerkdateifreigabe. Beachten Sie, dass es zu Leistungsproblemen kommen kann, wenn NFS- oder SMB-Freigaben ungeplant getrennt werden.