Delen via


Load balancing

Taakverdeling is in brede zin een van de pijlers van de Orleans runtime. Orleans runtime probeert alles evenwichtig te maken, omdat het balanceren het mogelijk maakt om het resourcegebruik te maximaliseren en hotspots te vermijden, wat leidt tot betere prestaties, en helpt bij elasticiteit. Taakverdeling is Orleans van toepassing op meerdere plaatsen. Hieronder ziet u een niet-volledige lijst met plaatsen waar de runtime de taakverdeling uitvoert:

  1. De standaardstrategie voor actorplaatsing is willekeurig, nieuwe activeringen worden willekeurig in silo's geplaatst. Dit resulteert in een evenwichtige plaatsing en voorkomt hotspots voor de meeste scenario's.
  2. Een geavanceerdere ActivationCountBasedPlacement poging om het aantal activeringen op alle silo's gelijk te maken, wat resulteert in een gelijkmatigere verdeling van activeringen tussen silo's. Dit is vooral belangrijk voor elasticiteit.
  3. De grain directory-service is gebouwd op basis van een gedistribueerde hash-tabel, die inherent evenwichtig is. De adreslijstservice wijst korrels toe aan activeringen, elke silo bezit een deel van de globale toewijzingstabel en deze tabel wordt globaal verdeeld over alle silo's. Hiervoor gebruiken we consistente hashing met virtuele buckets.
  4. Clients maken verbinding met alle gateways en verspreiden hun aanvragen op een evenwichtige manier.
  5. De herinneringsservice is een gedistribueerde gepartitioneerde runtimeservice. De toewijzing van welke silo verantwoordelijk is om te dienen welke herinnering wordt verdeeld over alle silo's via consistente hashing, net als in grain directory.
  6. Prestatiekritieke onderdelen in een silo worden gepartitioneerd en het werk in deze onderdelen wordt lokaal verdeeld. Op die manier kan de siloruntime alle beschikbare CPU-kernen volledig gebruiken en geen knelpunten in silo's maken. Dit geldt voor alle lokale resources: toewijzing van werk aan threads, sockets, verzendverantwoordelijkheden, wachtrijen, enzovoort.
  7. De QueueBalancerBase verantwoordelijkheid van het ophalen van gebeurtenissen uit persistentiewachtrijen over silo's in het cluster wordt verdeeld.

Het balanceren betekent niet noodzakelijkerwijs verlies van lokaliteit. Men kan evenwichtig zijn en toch een goede plaats behouden. Wanneer het verdelen bijvoorbeeld sharding/partitionering betekent, kunt u de verantwoordelijkheid voor een bepaalde logische taak partitioneren, terwijl u de lokaliteit binnen elke partitie behoudt. Dit geldt zowel voor lokale als gedistribueerde taakverdeling.