Es ist ziemlich schlimm. Leider habe ich schon Schlimmeres gesehen.
Angenommen, Sie verbinden alle Knoten im Cluster mit einem gemeinsamen Festplattenbereich, um die Synchronisierung der Ordner zu vermeiden. Dann stellt sich die Frage, was passiert, wenn sich ein und derselbe Benutzer bei zwei Knoten gleichzeitig anmeldet. Was passiert, wenn er sich bei Knoten a und dann bei Knoten b anmeldet, sich dann von b abmeldet und zu Knoten a zurückkehrt? Angenommen, Sie beschließen, die Datenbank zu verwenden, um zu prüfen, ob der Benutzer angemeldet und aktiv ist. Was passiert, wenn der Benutzer eine Zeitüberschreitung hat? Er meldet sich bei Knoten a an und benutzt ihn. Er geht zum Mittagessen. Die Sitzung wird abgebrochen. Ist dann die Benutzung von Knoten b gesperrt? Auch von Knoten a?
So etwas würde hier niemals bei einer Entwurfsprüfung durchgehen. Der Zugriff auf eine nicht transnationale Ressource von einem Server aus ist ein Warnsignal, und ich erwarte vom Entwickler, dass er nachweist, wie er die Risiken minimiert hat. Normalerweise würde die Menge an Code, die man schreibt, um Designfehler zu umgehen, die Wartung zu teuer machen.
Es gibt verschiedene Möglichkeiten, die Sie ausprobieren können. So könnten Sie beispielsweise die Dateien auf einer Dateifreigabe speichern und die Datenbank verwenden, um eine Abstraktion des Dateinamens auf Anwendungsebene dem physischen Speicherort der Datei zuzuordnen. Sie könnten Transaktionen verwenden, um die Zeilen in der Datenbank zu sperren, während auf die Dateien zugegriffen wird. Sie müssten sich bei der Implementierung eines solchen Stinkersystems die Nase zuhalten, aber Sie wären die komplizierte Benutzerdateistruktur los, während Sie an einer besseren Lösung arbeiten.
Ich habe an einer schrecklichen Servlet-Anwendung gearbeitet, die PDF-Dateien erstellt. Die Erstellung konnte zwischen 20 Minuten und einer Stunde dauern, weil der Bericht aus Hunderten von Seiten mit Diagrammen und Tabellen bestand. Jedes Diagramm und jede Tabelle hatte eine oder drei Abfragen hinter sich. Zunächst wurden die Aufträge über einen Thread erstellt, der vom Servlet gestartet wurde und eine Datei in das WEB-INF-Verzeichnis schrieb. Wenn der Benutzer benachrichtigt wurde, dass die Datei erstellt wurde, schickte das Download-Servlet die Datei und löschte sie von der Festplatte. Das war wie eine Checkliste für schlechte J2ee-Praktiken. Wir umgingen dies, indem wir die Webanwendung eine Auftragsanforderung in eine Tabelle schreiben ließen und dann einen anderen Prozess die Tabelle nach Aufträgen durchsuchen ließen. Sobald die PDF-Datei fertig war und an den FTP-Speicherort kopiert wurde, wurde die URL in eine Tabelle geschrieben und ein Link wurde auf dem Bildschirm des Benutzers angezeigt. Die Downloads wurden von einem anderen Server als einfache statische Inhalte bereitgestellt.