Implementace adresáře zrno
Přehled a architektura
Adresář grain v Orleans je úložiště klíč-hodnota, kde je klíč identifikátor grainu a hodnota je položka registrace, která odkazuje na aktivní silo, jež (potenciálně) hostuje grain.
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í. Vývojáři mohou implementovat vlastní adresář implementací rozhraní IGrainDirectory
a registrací do kolekce služeb sila. 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. Vzhledem k tomu, že došlo k zavedení nového adresáře s vysokou konzistencí, není již nutné nahrazovat externí adresáře, ale rozhraní API zůstává kvůli zpětné kompatibilitě a flexibilitě. Adresář pro zrno lze nakonfigurovat pro každý typ zrna zvlášť.
Kvůli optimalizaci výkonu jsou vyhledávání adresářů ukládána do lokální cache 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 umístění zrn.
Původně Orleans implementovalo eventuálně konzistentní adresář strukturovaný jako distribuovaná hashovací tabulka. Tento postup byl nahrazen silně konzistentním adresářem v Orleans v9.0, založený na dvoufázové metodologii Virtuálně synchronní a také strukturovaný jako distribuovaná hashovací tabulka, ale s lepším vyrovnáváním zatížení prostřednictvím použití 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:
- Normální provoz: Partice zpracovávají požadavky místně bez koordinace s jinými hostiteli.
- Změna pohledu: hostitelé se vzájemně koordinují a 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.
- Žádosti se automaticky opakují při změnách zobrazení.
Tím zajistíte, že všechny požadavky zpracuje správný vlastník oddílu adresáře.
Strategie dělení
Adresář je rozdělen pomocí konzistentního hashového kruhu s rozsahy přiřazenými k aktivním silům v clusteru. Identifikátory zrnek se hashují, aby se našlo silo, které 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 používanému Amazon Dynamo a Apache Cassandra, kde se pro každý 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, což 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 po dokončení změny zobrazení se uvolní. 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 ke clusteru připojilo nové silo, stávající oddíly se můžou zmenšit, aby se uvolnilo místo.
- Pokud silo opustilo klastr, můžou se zbývající oddíly zvětšit, aby převzaly opuštěné oblasti.
Než mohou být žádosti vyřízeny, je nutné převést registrace adresáře od starého vlastníka na nového vlastníka. Proces přenosu se řídí těmito kroky:
- Předchozí vlastník zapečetí rozsah a vytvoří snímek jeho položek adresáře.
- Nový vlastník si vyžádá a aplikuje snímek.
- Nový vlastník začíná vyřizovat žádosti pro daný rozsah.
- 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:
- Dotazování na všechna aktivní sila v clusteru kvůli jejich registracím zrn.
- Opětovné sestavení stavu adresáře pro ovlivněné oblasti
- Zajistit, aby nedošlo ke zdvojení aktivací zrnek.
Obnovení je nezbytné také v případě, že dojde k rychlým změnám členství v clusteru. 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í mezi oddíly.
- 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 snížit nebo eliminovat tím, že zajistí, aby všechna zobrazení byla zobrazena všemi silami.