Sie haben ein großes Problem. Ich denke, dass die Art, wie Sie über das Problem nachdenken, ein größeres Problem ist. Lass uns ein paar Grundlagen durchgehen.
Clustering wird verwendet, um große Probleme zu lösen, ähnlich wie das "iss einen Elefanten" -Problem. Sie könnten dieses Problem lösen, indem Sie ein einzigartiges größeres Raubtier mit einem riesigen Mund entwerfen. Aber Geschichte und Paläontologie haben uns gezeigt, dass große Raubtiere nicht leicht zu halten sind (sie sind teuer für die Umwelt).
So, um Ihr Problem zu lösen, könnten Sie einen größeren stärkeren Server nehmen.
Oder Sie könnten Clustering verwenden.
Clustering löst das Problem "iss den Elefanten" auf eine ganz andere Art und Weise. Anstatt einen einzigartigen riesigen Räuber mit einem riesigen Mund zu senden, um den Elefanten zu essen, wird es ein Konzept der verteilten und geteilten Verarbeitung verwenden, um es einen Biss nach dem anderen zu essen. Wenn sie richtig gemacht wurden, konnten Ameisen den Elefanten essen. Wenn es genug von ihnen gibt und die Umstände stimmen.
Aber beachten Sie in meinem Beispiel, Ameisen sind sehr klein ... Eine einzelne Ameise wird nie den gesamten Elefanten tragen. Du könntest den gesamten Elefanten tragen, wenn alle Ameisen zusammen gearbeitet haben, aber dann gerätst du in Nebenläufigkeit und Sperrprobleme (du musst die Ameisen koordinieren).
Ameisen haben uns einen viel besseren Weg gezeigt, damit umzugehen. Sie werden ein Stück vom Elefanten nehmen und sich mit dem Problem in kleineren Brocken befassen.
In Ihrem System fragen Sie, wie Sie Daten über die Knoten synchronisieren können ... Meine Frage wäre warum?Wenn Sie Daten synchronisieren, spiegeln Sie sich und Ihr Problem wird noch größer (Sie klonen den Elefanten, können aber nur das Original essen).
Die Lösung für Ihr Problem ist es, die Lösung zu überdenken und zu sehen, ob Sie das Problem in kleinere Teile zerlegen können.
In Akka- und im Akteur-Muster ist der beste Weg, mit Problemen umzugehen, die Verwendung kleinerer "Prozesse" (eine einzelne Ameise). Während der Prozess selbst fast nutzlos ist, kann er, wenn er in großem Umfang verwendet wird, sehr mächtig werden. Wenn die Architektur richtig gemacht ist, werden Sie bemerken, dass ein Flammenwerfer die Ameisen nicht besiegen kann. Mehr Ameisen werden kommen, sie werden weiter an dem Problem arbeiten.
Das Kopieren und Synchronisieren von Daten ist nicht Ihre Lösung, Clustering ist es. Du musst deine Daten nehmen und sie bis zu einem Punkt zerlegen, wo du sie einer einzigen Ameise geben kannst. Wenn Sie dies tun können, können Sie Akka verwenden. Wenn dieser Ansatz lächerlich erscheint, dann ist Akka nichts für dich.
Aber denken Sie daran ... Sie haben offensichtlich Bedenken über Ihr Datenbank-Backend - Sie wollen IO nicht erhöhen und einen einzigen Fehlerpunkt einführen. Ich würde dir zustimmen müssen. Aber du musst Dinge überdenken. Sie könnten eine Datenbankspiegelung verwenden, um den einzelnen Fehlerpunkt zu entfernen, aber Sie haben Recht, dass dadurch der Engpass nicht beseitigt wird. Lassen Sie uns also sagen, dass Mirror den einzigen Punkt des Scheiterns entfernt ... Nun greifen wir den Engpassbereich an.
Wenn Sie Ihre Daten in kleine Stücke zerlegen können, die Ameisen damit umgehen können, würde ich Sie dringend bitten, Ihren Ameisen zu sagen, dass sie nur die Datenbank melden sollen, wenn sich die Daten ändern ... Sie können es einmal bei der Initialisierung lesen (Du brauchst einen Backend-Speicher, mach dir nichts vor, Elektrizität kann schnell verloren gehen ... sie muss irgendwo gespeichert werden), aber wenn du deinen Ameisen sagst, dass sie nur geänderte Daten beibehalten sollen, dann entfernst du alle Anfragen aus der Gleichung Schicht, wo die Last herkommt. Sobald Sie nur Updates, Einfügungen und Löschungen haben, um damit umzugehen, wird die gesamte Landschaft viel einfacher.
Clustering sollte die Lösung für Sie sein, aber nur, wenn Sie das Konzept des Spiegels von Ihrem Verstand wegnehmen können.
Cluster-Knoten können und werden abstürzen ... Aber sie können woanders auf andere Knoten reapwned werden, so dass Sie immer ein schnelles System haben. Nur wenn Sie mit einem Absturz oder Verlust eines Knoten/Worker-Prozesses/Ameise zu tun haben, müssen Sie Daten neu laden ...
Viel Glück ... Sie haben ein gewaltiges Problem skizziert, dass ich Menschen mit Software-Engineering-Grad gesehen habe scheitern beim Lösen.
Nur um zu verdeutlichen, gibt es den Clusterklatsch von Akka.NET nur, um eine Registerkarte über den Zustand des Clusters zu behalten, dh: wann Knoten verfügbar werden, wann sie sterben, usw. Es wird * keinen * Synchronisationszustand für Sie übernehmen . Das Versenden von Nachrichten und das Sicherstellen, dass der Status innerhalb der Akteure in Ihrem Cluster synchron ist, liegt in Ihrer alleinigen Verantwortung. Es gibt verschiedene Methoden, die Sie verwenden können, um dies zu erreichen, IIRC Petabridge hat einige Blog-Einträge in Bezug auf diese (und andere nützliche Akka.NET Artikel). – easuter