Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Översikt och arkitektur
Kornkatalogen i Orleans är ett nyckelvärdeslager där nyckeln är en kornig identifierare och värdet är en registreringspost som pekar på en aktiv silo som (potentiellt) är värd för kornet.
Även om Orleans tillhandahåller en standardimplementering av distribuerat katalogsystem i minnet (som beskrivs i denna artikel), är grain directory systemet utformat för att vara pluggbar. Du kan implementera din egen katalog genom att implementera IGrainDirectory
gränssnittet och registrera det med silons tjänstsamling. Detta möjliggör anpassade katalogimplementeringar som kan använda olika lagringsserverdelar eller konsekvensmodeller för att bättre passa specifika programkrav. Sedan introduktionen av den nya katalogen för stark konsistens har behovet av externa katalogimplementeringar minskat, men API:et finns kvar för bakåtkompatibilitet och flexibilitet. Du kan konfigurera kornkatalogen per korntyp.
För att optimera prestanda Orleans cachelagrar katalogsökningar lokalt i varje silo. Det innebär att potentiellt fjärrkatalogläsningar endast behövs när den lokala cacheposten saknas eller är ogiltig. Den här cachelagringsmekanismen minskar nätverksbelastningen och svarstiden som är associerad med sökning efter kornplats.
Ursprungligen implementerade Orleans en så småningom konsekvent katalog strukturerad som en distribuerad hash-tabell. Detta ersattes av en starkt konsekvent katalog i Orleans v9.0, baserat på tvåfasmetoden Virtually Synchronous. Den är också strukturerad som en distribuerad hash-tabell, men ger förbättrad belastningsutjämning via virtuella noder. Den här artikeln beskriver den senare, nyare kornkatalogimplementeringen.
Distribuerad kornkatalog
Den distribuerade kornkatalogen i Orleans ger starkt inkonsistensskydd, belastningsutjämning, höga prestanda och feltolerans. Implementeringen följer tvåfasdesignen baserad på Virtual Synchrony-metodiken med likheter med Vertical Paxos.
Katalogpartitioner har två driftlägen:
- Normal åtgärd: Partitioner bearbetar begäranden lokalt utan samordning med andra värdar.
- Visa ändring: Värdar samarbetar för att överföra ägarskapet för katalogintervall.
Katalogen använder sig av ett system för starkt klustermedlemskap med konsekvens inom Orleans, där konfigurationer som kallas "vyer" har versionsnummer som ökar monotoniskt. När silor ansluter och lämnar klustret skapas successiva vyer, vilket resulterar i ändringar i ägarskapet för intervallen.
Alla katalogåtgärder omfattar visningssamordning:
- Begäranden innehåller uppringarens vy-nummer.
- Svar innehåller partitionens visningsnummer.
- Visa nummerfelmatchningar som utlöser synkronisering.
- Begäranden försöker automatiskt igen vid vynsändringar.
Detta säkerställer att rätt ägare av katalogpartitionen bearbetar alla begäranden.
Partitioneringsstrategi
Katalogen partitioneras med hjälp av en konsekvent hash-ring, med intervall tilldelade till de aktiva silor i klustret. Kornidentifierare hashas för att hitta silon som äger den del av ringen som motsvarar dess hash.
Varje aktiv silo äger ett förkonfigurerat antal intervall, som standard är 30 intervall per silo. Detta liknar det schema som används av Amazon Dynamo och Apache Cassandra, där flera "virtuella noder" (intervall) skapas för varje fysisk nod (värd).
Storleken på en partition bestäms av avståndet mellan dess hash och hash för nästa partition. Det är möjligt att ett intervall delas upp mellan flera silor under en visningsändring. Detta ökar komplexiteten i vyns ändringsprocedur, eftersom varje partition potentiellt måste samordnas med flera andra partitioner.
Visa ändringsprocedur
Katalogpartitioner (implementeras i GrainDirectoryPartition
) använder versionsbaserade intervalllås för att förhindra ogiltig åtkomst till intervall under visningsändringar. Intervalllås skapas under en vyändring och släpps när vyändringen är klar. Dessa lås motsvarar de "kilar" som används i metoden för virtuell synkronisering.
När en vyändring sker kan en partition antingen växa eller krympa:
- Om en ny silo ansluter till klustret kan befintliga partitioner krympa för att göra plats.
- Om en silo lämnar klustret kan återstående partitioner växa för att ta över de överblivna intervallen.
Katalogregistreringar måste överföras från den gamla ägaren till den nya ägaren innan begäranden kan hanteras. Överföringsprocessen följer dessa steg:
- Den tidigare ägaren förseglar intervallet och skapar en snapshot av dess katalogposter.
- Den nya ägaren begär och tillämpar ögonblicksbilden.
- Den nya ägaren börjar hantera begäranden för området.
- Den tidigare ägaren meddelas och tar bort ögonblicksbilden.
Återställningsprocess
När en värd kraschar utan att lämna ut sina katalogpartitioner korrekt måste de efterföljande partitionsägarna utföra återställningen. Detta omfattar:
- Fråga alla aktiva silor i klustret om deras kornregistreringar.
- Återskapa katalogtillståndet för berörda intervall.
- Se till att inga duplicerade kornaktiveringar sker.
Återställning krävs också när klustermedlemskapet ändras snabbt. Klustermedlemskap garanterar monotoni, men det är möjligt för silor att missa mellanliggande medlemskapsvyer. I sådana fall:
- Överföringar av ögonblicksbilder avbryts.
- Återställningen utförs i stället för den normala överlämningen mellan partitioner.
- Systemet upprätthåller konsekvens trots att mellanliggande tillstånd saknas.
En framtida förbättring av klustermedlemskapet kan minska eller eliminera dessa scenarier genom att se till att alla silor ser alla vyer.