Akka Cluster Sharding – wie Akka die systemübergreifende Verteilung von Aktoren automatisiert
Cluster Sharding ist das Produkt von Akka, welches den Einsatz von Aktoren in einem Cluster abstrahiert. Nähere Informationen zu Aktoren finden sich in unserem Beitrag zum Aktorenmodell und Akka Actors. Als Cluster werden Computersysteme bezeichnet, die als Verbund agieren um zusammen komplexe Aufgaben zu erledigen. Der Standort eines einzelnen Computersystems, auch als Knoten im Cluster bezeichnet, spielt dabei keine Rolle. Der Vorteil dieses Konzepts besteht in der Flexibilität und Erweiterbarkeit. Denn ein Cluster lässt sich nach Bedarf skalieren, indem Knoten hinzugefügt oder weggenommen werden.
Die Abbildung zeigt beispielhaft die Architektur des Cluster Sharding. Ausgehend von den Knoten eines Cluster führt Akkas Cluster Sharding die Komponenten ShardRegion, ShardCoordinator, Shard und Entität ein. Wobei jede dieser Komponenten im Hintergrund als Aktor implementiert ist.
ShardRegion
Für jeden Knoten im Cluster werden ShardRegion-Aktoren gestartet. Dieser Aktor extrahiert aus einer zu verarbeitenden Nachricht die ID des Shard- und des Entität-Aktor und leitet die Nachricht an die entsprechende Stelle weiter, sofern der ShardRegion-Aktor den Standort des Shard-Aktor im Cluster bereits kennt. Ist der Standort noch unbekannt ermittelt der ShardRegion-Aktor diesen durch eine Anfrage an den ShardCoordinator-Aktor.
ShardCoordinator
Der ShardCoordinator-Aktor dient als zentrale Verwaltung des Cluster Sharding, weshalb er als Singleton im Cluster betrieben wird. Dieser Aktor legt fest welcher Shard-Aktor zu welchem ShardRegion-Aktor gehört, weshalb er auch die Anlaufstelle für Standortanfragen ist. Der Standort der einzelnen Shard-Aktoren wird durch den ShardCoordinator-Aktor persistent in Form verteilter Daten im Cluster gespeichert, um das Cluster gegen Ausfälle abzusichern. Im Rahmen der Shard-Aktorverwaltung kümmert sich der ShardCoordinator-Aktor auch um die Neuverteilung von Shard-Aktoren, falls im Cluster Veränderungen auftreten. Solche Veränderungen können zum Beispiel durch den Wegfall eines Knoten im Fehlerfall oder auf Basis eines Skalierungsvorgangs des Cluster auftreten.
Shard
Der Shard-Aktor wird durch den ShardRegion-Aktor erstellt und verwaltet die Entität-Aktoren.
Entität
Ein Entität-Aktor wird durch den Shard-Aktor erstellt. Dieser Aktor repräsentiert die Programmlogik, welche mittels Akka Actors zur Verarbeitung von Nachrichten definiert wurde.