Ich habe viel Selbststudiencodierung gemacht und einige Erfahrungen mit parallelen Programmiermodellen gesammelt: Akteure, Software-Transaktionsspeicher, Datenfluss.
Wenn ich versuche, diese Architekturen auf das reale Leben anzuwenden - auf Webanwendungen mit hoher Last - unterstützt kein Modell die Haltbarkeit und Persistenz von Daten. Bei Aufgaben im wirklichen Leben müssen am Ende Daten gespeichert werden. Dies bedeutet, dass ich immer noch DB- und Trapping-DB-Synchronisierungen, mögliche Skalierbarkeits-Engpässe usw. verwenden muss.
Kennt jemand ein gutes Beispiel für eine Architektur (src oder Text oder Diagramm oder Blaupausen), die Akka Actors oder Software Transaction Memory verwendet und am Ende die Persistenz implementiert?
Jedes gute Beispiel / jede gute Idee für Transaktionsspeicher, Akteure, Datenfluss, Tupelräume in realen Anwendungen ist willkommen.
Antworten:
Schauspieler- / STM-Modelle und Datenbankpersistenz sind etwas orthogonal - Sie können leicht eins ohne das andere haben, und ich denke, es besteht die Gefahr, die beiden zu verwechseln.
Das Erreichen der Haltbarkeit (das D in ACID) ist in einer Transaktionsumgebung äußerst komplex, insbesondere in einer verteilten Umgebung, in der Akteure / Prozesse durch Nachrichtenübermittlung koordiniert werden. Sie geraten in heikle Fragen wie das Problem der byzantinischen Generäle .
Daher denke ich, dass es immer eine gewisse Anpassung der Lösung geben wird, um Ihre spezifischen Persistenzanforderungen zu erfüllen. Es gibt keine "Einheitslösung".
Sehenswert (Clojure-Perspektive):
quelle
Das Akteurmodell funktioniert gut mit CQRS (Command / Query Responsibility Segregation) , da Nachrichten an Akteure, die Datenmanipulationen durchführen, als "Befehl" -Äquivalente verwendet werden können.
Was hat das mit Ihrem Persistenzproblem zu tun? Nun, Sie arbeiten am Speicher und schreiben alle Befehle in ein Protokoll, was eine billigere Operation ist, da es nur zum Anhängen dient. Von Zeit zu Zeit werden Snapshots ausgegeben, um die Zeit zu verkürzen, die zum erneuten Laden der Datenbank erforderlich ist (und dies zu ermöglichen) vom Protokoll verwendeten Speicherplatz wiederherstellen).
Dies ist eine ziemlich verbreitete Technik. Schauen Sie sich VoltDB und Redis an, um weitere Inspiration zu erhalten.
quelle
Rich Hickey hat eine brandneue Idee namens Datomic. Dies ist ein neuer Ansatz für die Persistenz, die Entkopplung von Speicher, das Transaktionsmanagement und die Abfrage. Es basiert auf unveränderlichen Datensätzen und verwendet eine Abfragesprache namens Datalog (teilt Funktionen mit Prolog). Das Hauptziel bestand darin, eine einfache Verteilung und Cloud-Bereitstellung zu ermöglichen. Es basiert auf Speicher als Service (also nicht eine konkrete Implementierung, sondern lose über eine drahtlose API gekoppelt).
In Clojure haben wir STM, das uns ACI gibt, das D fehlt. Datomic fügt das D hinzu.
quelle