Welche Vor- und Nachteile hat die Verwendung einer Datei für die Interprozesskommunikation? Lassen Sie mich einige Hintergrundinformationen über den Kontext geben, in dem ich diese Frage stelle.Interprozesskommunikation
Das Problem ist das klassische Produzentenverbraucherproblem mit einigen Einschränkungen. Die Produzenten sind kooperative Prozesse, die auf einem Cluster von Maschinen laufen und über Broadcasts miteinander kommunizieren. Jeder Prozess hat lokale Benutzer, von denen er weiß, und informiert die anderen Prozesse durch den obigen Übertragungsmechanismus darüber. Bis jetzt wurde die Statusinformation, die gesendet/geteilt wurde, nicht beibehalten, aber jetzt muss es sein.
Dieses System läuft seit Jahren auf Produktion und unterstützt Tausende von Benutzern und Leute sind verständlicherweise sehr besorgt über das Hinzufügen von zusätzlichen Abhängigkeiten, um die Unterstützung für Persistenz hinzuzufügen. Der Pfad, den wir gewählt haben, war, einen neuen Thread im bestehenden Prozess zu erzeugen, der den lokalen Datenverkehr in eine Datei im Dateisystem schreibt, die dann von einem neuen Prozess gelesen wird (wir können ihn den Consumer nennen) und persistent bleiben. Die Vorteile, die wir mit diesem Ansatz sehen, sind:
- Wir erhalten Persistenz kostenlos. Wenn der neue Prozess Probleme hat, verlieren wir keinen lokalen Datenverkehr, da wir ihn in das Dateisystem schreiben. Solange der Verbraucher weiß, wo er aufgehört hat, kann er mit der Verarbeitung von Daten beginnen.
- Es gibt keine Lernkurve für die Verwendung von Warteschlangenbibliotheken ihre einfache alte Unix-Datei IO.
- Der größte Vorteil ist, dass wir den aktuellen Produktionsprozess überhaupt nicht beeinflussen, außer dem neuen Thread für Dateischreibvorgänge.
Einige der Bedenken bei diesem Ansatz sind:
- Sperren von Dateien und Streit und seine Auswirkungen auf die Leistung.
- Sicherstellen, dass die Schreibpuffer geleert werden und der Hersteller die Dateisperre nur dann freigibt, wenn ein vollständiges Ereignis in die Datei geschrieben wurde. Der Verbraucher sollte unvollständige Datensätze lesen.
Gedanken? Ist diese Herangehensweise naiv und sollten wir nur die anfänglichen Kosten für die Anlaufzeit für die Verwendung einer ausdauernden Warteschlange-Bibliothek bezahlen? Der wichtigste Punkt hierbei ist, dass wir den minimalen möglichen Einfluss auf den aktuellen Prozess haben und keine Abhängigkeiten hinzufügen.