Ich habe eine Anwendung, die eine heftige Diskussion zwischen einigen Entwicklern ausgelöst hat.
Grundsätzlich ist es in eine Web-Ebene und eine Back-End-Ebene aufgeteilt. Die Webebene sammelt Informationen über ein einfaches Webformular und speichert diese Daten als JSON-Dokument (buchstäblich eine JSON-Datei) in einem Überwachungsordner, der vom Back-End verwendet wird. Das Back-End fragt diesen Ordner alle paar Sekunden ab, nimmt die Datei auf und führt ihre Funktionen aus.
Die Dateien selbst sind sehr einfach (dh alle Zeichenfolgendaten, keine Verschachtelung) und etwa 1-2 KB groß, wobei das System den größten Teil seiner Zeit im Leerlauf verbringt (aber bis zu 100 Nachrichten gleichzeitig platzen lässt). Der Backend-Verarbeitungsschritt dauert ca. 10 Minuten pro Nachricht.
Das Argument kommt auf, wenn ein Entwickler vorschlägt, dass die Verwendung des Dateisystems als Messaging-Ebene eine schlechte Lösung ist, wenn stattdessen beispielsweise eine relationale Datenbank (MySQL), eine noSQL-Datenbank (Redis) oder sogar ein einfacher REST-API-Aufruf verwendet werden sollte.
Es ist zu beachten, dass Redis an anderer Stelle in der Organisation für die Verarbeitung von Nachrichten in der Warteschlange verwendet wird.
Die Argumente, die ich gehört habe, setzen sich wie folgt zusammen
Für flache Dateien:
Flache Dateien sind zuverlässiger als jede andere Lösung, da die Datei erst nach dem Aufnehmen aus einem "Überwachungs" -Ordner in einen "Verarbeitungs" -Ordner und schließlich nach dem Fertigstellen in einen "Fertig" -Ordner verschoben wird. Es besteht kein Risiko, dass Nachrichten verschwinden, es sei denn, es handelt sich um sehr niedrige Fehler, die andere Dinge zerstören würden.
Für das Verständnis von Flat Files ist weniger technische Raffinesse erforderlich
cat
. Keine Anfragen zum Schreiben, keine Gefahr, versehentlich eine Nachricht aus der Warteschlange zu entfernen und für immer verschwunden zu sein.Dateiverwaltungscode ist vom Standpunkt der Programmierung aus einfacher als Datenbank-APIs, da er Teil der Standardbibliothek jeder Sprache ist. Dies reduziert die Gesamtkomplexität der Codebasis und die Menge des Codes von Drittanbietern, der eingegeben werden muss.
Das YAGNI-Prinzip besagt, dass Flat Files derzeit einwandfrei funktionieren. Es ist nicht erwiesen, dass auf eine kompliziertere Lösung gewechselt werden muss. Lassen Sie es also.
Für eine Datenbank:
Es ist einfacher, eine Datenbank zu skalieren als ein Verzeichnis voller Dateien
Bei Flat Files besteht die Gefahr, dass jemand eine "done" -Datei zurück in das "watch" -Verzeichnis kopiert. Aufgrund der Art dieser Anwendung (Verwaltung virtueller Maschinen) kann dies zu einem katastrophalen Datenverlust führen.
Die App erfordert mehr technische Raffinesse für T / S, was bedeutet, dass ungelernte Mitarbeiter weniger dazu neigen, etwas zu vermasseln, wenn sie nur an Dingen herumstöbern.
DB-Verbindungscode, insbesondere für Redis, ist mindestens so robust wie die Standardfunktionen zur Verwaltung von Bibliotheksdateien.
DB - Verbindungscode ist sichtbar (wenn nicht funktionell) einfacher von einem Entwickler Sicht, da seinem höheren Niveau als Dateimanipulation.
Soweit ich sehen kann, haben beide Entwickler viele gültige Punkte.
Von diesen beiden Personen, den Pro-Files-Entwicklern oder den Pro-Datenbanken-Entwicklern, entspricht die eine eher den Best Practices der Softwareentwicklung, und warum?