Sdílet prostřednictvím


Implementace adresáře zrno

Přehled a architektura

Adresář zrna Orleans je úložiště typu klíč-hodnota, kde je klíč identifikátorem zrna a hodnotou je položka registrace odkazující na aktivní silo, které (potenciálně) hostí zrno.

I když Orleans poskytuje výchozí implementaci distribuovaného adresáře v paměti (popsanou v tomto článku), je adresářový systém navržený tak, aby byl modulární. Vlastní adresář můžete implementovat implementováním IGrainDirectory rozhraní a jeho registrací v kolekci služeb silo. To umožňuje implementaci vlastních adresářů, které můžou používat různé back-endy úložiště nebo modely konzistence, aby lépe vyhovovaly konkrétním požadavkům aplikace. Od zavedení nového adresáře silné konzistence je méně potřeba implementací externích adresářů, API však zůstává dostupné pro zpětnou kompatibilitu a flexibilitu. Adresář pro jednotlivé typy zrnek můžete nakonfigurovat samostatně.

Pro optimalizaci výkonu Orleans ukládá vyhledávání adresářů do lokální mezipaměti v každém silu. To znamená, že potenciálně vzdálené čtení adresáře jsou nezbytné pouze v případě, že položka místní mezipaměti chybí nebo je neplatná. Tento mechanismus ukládání do mezipaměti snižuje režii sítě a latenci spojenou s vyhledáváním zrn.

Původně Orleans implementovalo eventuálně konzistentní adresář strukturovaný jako distribuovaná hashovací tabulka. Tento postup byl nahrazen silně konzistentním adresářem ve verzi Orleans 9.0 na základě dvoufázové virtualálně synchronní metodologie. Je také strukturovaná jako distribuovaná hashovací tabulka, ale nabízí vylepšené vyrovnávání zatížení prostřednictvím virtuálních uzlů. Tento článek popisuje novější implementaci adresáře zrnin.

Distribuovaný adresář obilí

Distribuovaný adresář v Orleans nabízí silnou konzistenci, dokonce vyrovnávání zatížení, vysoký výkon a odolnost proti chybám. Implementace se řídí dvoufázovým návrhem založeným na metodologii Virtual Synchrony s podobnostmi Vertical Paxos.

Oddíly adresáře mají dva režimy operace:

  1. Běžný provoz: Oddíly zpracovávají požadavky místně bez koordinace s ostatními hostiteli.
  2. Zobrazit změnu: Hostitelé koordinovaně přenášejí vlastnictví rozsahů adresářů.

Adresář využívá systém členství v clusteru se silnou konzistencí Orleans, kde konfigurace označované jako "pohledy" mají monotonicky rostoucí čísla verzí. Když se silos připojují ke clusteru a opouštějí ho, jsou vytvořeny následné pohledy, což vede ke změnám vlastnictví rozmezí.

Všechny operace adresáře zahrnují koordinaci zobrazení:

  • Žádosti nesou číslo zobrazení volajícího.
  • Odpovědi zahrnují číslo zobrazení oddílu.
  • Umožňuje zobrazit synchronizaci aktivačních událostí neshod čísel.
  • Požadavky se automaticky zopakují při změnách zobrazení.

Tím se zajistí, že správný vlastník oddílu adresáře zpracuje všechny požadavky.

Strategie dělení

Adresář je rozdělený pomocí konzistentního hash kruhu s rozsahy přiřazenými k aktivním silám v klastru. Identifikátory obilí se hashovány, aby se zjistilo, které silo vlastní část okruhu odpovídající jeho hash.

Každé aktivní silo má předem nakonfigurovaný počet rozsahů, standardně 30 rozsahů na silo. Podobá se schématu, které používá Amazon Dynamo a Apache Cassandra, kde se pro každý fyzický uzel (hostitel) vytvoří několik "virtuálních uzlů" (rozsahů).

Velikost oddílu je určena vzdáleností mezi hodnotou hash a hodnotou hash dalšího oddílu. Během změny zobrazení je možné rozdělit rozsah mezi několik sil. To zvyšuje složitost postupu změny zobrazení, protože každý oddíl musí potenciálně koordinovat s více dalšími oddíly.

Zobrazit postup změny

Oddíly adresáře (implementované v GrainDirectoryPartition) používají verzované zámky rozsahů, aby zabránily neoprávněnému přístupu k rozsahům během změn zobrazení. Zámky rozsahu se vytvoří během změny zobrazení a uvolní se po dokončení změny zobrazení. Tyto zámky jsou podobné "klínům", které se používají v metodologii virtuální synchronizace.

Když dojde ke změně zobrazení, oddíl se může zvětšit nebo zmenšit:

  • Pokud se nový silo připojí ke clusteru, stávající oddíly se můžou zmenšit, aby se uvolnilo místo.
  • Pokud silo opustí cluster, zbývající partice se mohou zvětšit a převzít opuštěné rozsahy.

Před podáním žádostí musí být registrace adresářů převedeny ze starého vlastníka na nového vlastníka. Proces přenosu se řídí těmito kroky:

  1. Předchozí vlastník zapečetí rozsah a vytvoří snímek jeho položek adresáře.
  2. Nový vlastník si vyžádá a aplikuje snímek.
  3. Nový vlastník začíná vyřizovat žádosti pro daný rozsah.
  4. Předchozí vlastník obdrží oznámení a odstraní snímek.

Proces obnovení

Když se hostitel zhroutí, aniž by správně předal oddíly adresáře, musí následní vlastníci těchto oddílů provést obnovení. To zahrnuje:

  1. Dotazování na všechna aktivní sila v clusteru kvůli jejich registracím zrn.
  2. Opětovné sestavení stavu adresáře pro ovlivněné oblasti
  3. Zajistit, aby nedošlo ke zdvojení aktivací zrnek.

Obnovení je také nezbytné, když se členství v clusteru rychle změní. I když členství v clusteru zaručuje monotonicity, je možné, že sila zmešká zobrazení zprostředkujícího členství. V takových případech:

  • Přenosy snímků jsou zastavené.
  • Obnovení se provádí místo normálního předání oddílu do oddílu.
  • Systém udržuje konzistenci bez ohledu na chybějící přechodné stavy.

Budoucí vylepšení členství v clusteru může tyto scénáře omezit nebo eliminovat tím, že zajistí, aby všechny uzly viděly všechny pohledy.