Dela via


Katalogimplementering av spannmål

Översikt och arkitektur

Kornkatalogen i Orleans är en nyckel-värde-lagring där nyckeln är en kornidentifierare och värdet är en registreringspost som pekar på en aktiv silo som (potentiellt) hyser 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. Utvecklare kan implementera sin 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 starka konsekvenskatalogen finns det lite behov av implementeringar av externa kataloger, men API:et förblir för bakåtkompatibilitet och flexibilitet. Kornkatalogen kan konfigureras individuellt för varje korntyp.

För att optimera prestanda cachelagras katalogsökningar lokalt i varje silo. Det innebär att potentiellt fjärranslutna katalogläsningar endast behövs när den lokala cacheposten antingen 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å den tvåfasiga praktiskt taget synkron metod och även strukturerad som distribuerad hashtabell men med förbättrad belastningsutjämning med hjälp av 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:

  1. Normal åtgärd: partitioner bearbetar begäranden lokalt utan samordning med andra värdar.
  2. Visa ändring: värdar samordnar med varandra för att överföra ägarskap av katalogomfång.

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 görs automatiskt om vid visning av ändringar.

Detta säkerställer att alla begäranden bearbetas av rätt ägare av katalogpartitionen.

Partitioneringsstrategi

Katalogen partitioneras med hjälp av en konsekvent hash-ring där intervall tilldelas de aktiva silorna i klustret. Identifierare för korn hashas för att hitta den silo som äger den ringdel 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 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 vyändring, vilket ö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 visningsändringen 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 har anslutit till klustret kan befintliga partitioner krympa för att göra plats.
  • Om en silo har lämnat 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:

  1. Den tidigare ägaren förseglar intervallet och skapar en snapshot av dess katalogposter.
  2. Den nya ägaren begär och tillämpar ögonblicksbilden.
  3. Den nya ägaren börjar hantera begäranden för området.
  4. 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:

  1. Fråga alla aktiva silor i klustret om deras kornregistreringar.
  2. Återskapa katalogtillståndet för berörda intervall.
  3. Se till att inga duplicerade kornaktiveringar sker.

Återställning är också nödvändigt när ändringar av klustermedlemskap sker 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 normal överlämning 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 vyer visas av alla silor.