Lastenausgleich

Im weiteren Sinne stellt der Lastenausgleich eine der Säulen der Orleans-Runtime dar. Die Orleans-Runtime versucht stets, einen bestmöglichen Ausgleich zu erzielen, um die Ressourcennutzung zu maximieren und Hotspots zu vermeiden. Dies verbessert letztlich sowohl die Leistung als auch die Flexibilität. In Orleans erfolgt der Lastenausgleich an mehreren Stellen. Die folgende Auflistung enthält eine Auswahl der Methoden, mit denen die Runtime einen Lastenausgleich ausführt:

  1. Die Standardstrategie für die Platzierung von Aktoren ist zufällig, d. h. neue Aktivierungen werden zufällig in den Silos platziert. Dies führt in den meisten Szenarios zu einer ausgeglichenen Platzierung und verhindert Hotspots.
  2. Bei der erweiterten Strategie ActivationCountBasedPlacement wird die Anzahl der Aktivierungen möglichst gleichmäßig auf alle Silos verteilt, was zu einer noch ausgeglicheneren Verteilung der Aktivierungen in den Silos führt. Dies ist besonders für die Flexibilität wichtig.
  3. Der Grainverzeichnisdienst basiert auf einer verteilten Hashtabelle, die grundsätzlich ausgeglichen ist. Der Verzeichnisdienst ordnet Grains Aktivierungen zu, jedes Silo besitzt einen Teil der globalen Zuordnungstabelle, und die globale Partitionierung für diese Tabelle erfolgt ausgewogen und siloübergreifend. Hierfür wird konsistentes Hashing mit virtuellen Buckets verwendet.
  4. Clients stellen eine Verbindung mit allen Gateways her und verteilen ihre Anforderungen auf ausgewogene Weise.
  5. Der Erinnerungsdienst ist ein verteilter partitionierter Laufzeitdienst. Die Zuweisung der Silos, auf denen die jeweiligen Erinnerungen verarbeitet werden sollen, erfolgt über konsistentes Hashing ausgeglichen und siloübergreifend, genau wie im Grainverzeichnis.
  6. Leistungskritische Komponenten innerhalb eines Silos werden partitioniert, und die Arbeit wird lokal aufgeteilt. Auf diese Weise kann die Siloruntime alle verfügbaren CPU-Kerne vollständig nutzen, und es entstehen keine Siloengpässe. Dies gilt für alle lokalen Ressourcen, wie Arbeitszuweisungen zu Threads, Sockets, Dispatchaufgaben, Warteschlangen usw.
  7. Mit QueueBalancerBase wird die Verantwortung für das Pullen von Ereignissen aus den Speicherwarteschlangen auf alle Silos im Cluster verteilt.

Der Lastenausgleich ist nicht gleichbedeutend mit einem Verlust der Lokalität. Eine ausgeglichene Verteilung ist auch bei lokaler Nutzung möglich. Wird im Rahmen des Lastenausgleichs beispielsweise Sharding/Partitionierung ausgeführt, kann die Verantwortung für eine bestimmte logische Aufgabe partitioniert und gleichzeitig die Lokalität innerhalb der einzelnen Partitionen beibehalten werden. Dies gilt sowohl für den lokalen als auch für den verteilten Lastenausgleich.