Dela via


Belastningsutjämning

Den belastningsutjämning är i bred bemärkelse en av grundpelarna i Orleans-körmiljön. Körmiljön Orleans försöker hålla allt balanserat, eftersom balansering maximerar användningen av resurser, undviker belastningstoppar, leder till bättre prestanda och främjar elasticitet. Belastningsutjämning i Orleans gäller på flera platser. Nedan följer en icke-exhaustiv lista över var körtiden utför balansering:

  1. Standardstrategin för aktörsplacering är slumpmässig. nya aktiveringar placeras slumpmässigt över silor. Detta resulterar i balanserad placering och förhindrar hotspots för de flesta scenarier.
  2. En mer avancerad ActivationCountBasedPlacement strategi försöker utjämna antalet aktiveringar på alla silor, vilket resulterar i en jämnare fördelning mellan silor. Detta är särskilt viktigt för elasticitet.
  3. Katalogtjänsten grain bygger ovanpå en distribuerad hash-tabell, som är balanserad i sig själv. Katalogtjänsten mappar korn till aktiveringar. Varje silo äger en del av den globala mappningstabellen, och denna tabell är globalt partitionerad på ett balanserat sätt över alla silor genom konsekvent hashning med virtuella hinkar.
  4. Klienter ansluter till alla gatewayer och sprider sina begäranden över dem på ett balanserat sätt.
  5. Påminnelsetjänsten är en distribuerad, partitionerad tjänst som körs i realtid. Fördelningen av ansvaret för vilken silo som ska hantera vilken påminnelse balanseras över alla silor via konsekvent hashning, precis som "grain directory".
  6. Prestandakritiska komponenter i en silo partitioneras och arbetet mellan dem är lokalt balanserat. På så sätt kan siloprocessen fullt ut utnyttja alla tillgängliga CPU-kärnor och undvika flaskhalsar i silon. Detta gäller för alla lokala resurser: allokering av arbete till trådar, socketar, sändningsansvar, köer osv.
  7. En QueueBalancerBase balanserar ansvaret för att hämta händelser från beständighetsköerna över silos i kluster.

Balansering innebär inte nödvändigtvis förlust av ort. Du kan uppnå balans samtidigt som du behåller en god lokalitet. När utjämning till exempel omfattar horisontell partitionering kan du partitionera ansvaret för en viss logisk uppgift samtidigt som du behåller lokaliteten inom varje partition. Detta gäller både lokal och distribuerad balansering.