Delen via


Implementatie van graindirectory

Overzicht en architectuur

De graanmap in Orleans is een sleutel-waardearchief waarin de sleutel een graan-id is en de waarde een registratievermelding is die verwijst naar een actieve silo die (mogelijk) als host fungeert voor het graan.

Hoewel Orleans een standaard gedistribueerde directory-implementatie in het geheugen biedt (zoals beschreven in dit artikel), is het grain directory-systeem ontworpen om te worden aangesloten. U kunt uw eigen directory implementeren door de IGrainDirectory interface te implementeren en te registreren bij de serviceverzameling van de silo. Hierdoor kunnen aangepaste directory-implementaties worden gebruikt die verschillende back-ends voor opslag of consistentiemodellen kunnen gebruiken om beter aan specifieke toepassingsvereisten te voldoen. Sinds de introductie van de nieuwe sterke consistentiedirectory is er minder behoefte aan externe directory-implementaties, maar is de API behouden voor compatibiliteit met oudere versies en flexibiliteit. U kunt de graanmap per graantype configureren.

Om de prestaties te optimaliseren, Orleans slaat directory-opzoekingen lokaal op in de cache binnen elke silo. Dit betekent dat mogelijk externe directory-lezingen alleen nodig zijn wanneer de lokale cachevermelding ontbreekt, of ongeldig is. Dit cachingmechanisme vermindert de netwerkoverhead en latentie die is gekoppeld aan opzoekacties voor korrellocaties.

Oorspronkelijk heeft Orleans een uiteindelijk consistente map geïmplementeerd die is gestructureerd als een gedistribueerde hash-tabel. Dit werd vervangen door een sterk consistente map in Orleans v9.0, op basis van de tweefasige virtueel synchrone methodologie. Het is ook gestructureerd als een gedistribueerde hash-tabel, maar biedt verbeterde taakverdeling via virtuele knooppunten. In dit artikel worden de laatste, nieuwere grain directory-implementatie beschreven.

Gedistribueerd graanregister

De gedistribueerde graandirectory in Orleans biedt hoge consistentie, gelijkmatige belastingsverdeling, hoge prestaties en fouttolerantie. De implementatie volgt een ontwerp in twee fasen op basis van de Virtual Synchrony-methodologie met overeenkomsten met Vertical Paxos.

Directory-partities hebben twee modi van werking:

  1. Normale bewerking: partities verwerken aanvragen lokaal zonder coördinatie met andere hosts.
  2. Wijziging weergeven: hosts coördineren met elkaar om het eigendom van adreslijstbereiken over te dragen.

De map maakt gebruik van Orleans' sterk consistentieclusterlidmaatschapssysteem, waarbij configuraties met de naam 'weergaven' monotonisch toenemende versienummers hebben. Wanneer silo's samenkomen en het cluster verlaten, ontstaan er opeenvolgende weergaven, wat resulteert in wijzigingen in het eigendom van een range.

Alle directorybewerkingen omvatten weergavecoördinatie:

  • Aanvragen dragen het weergavenummer van de beller.
  • Antwoorden bevatten het weergavenummer van de partitie.
  • Aantalverschillen activeren synchronisatie.
  • Aanvragen worden automatisch opnieuw geprobeerd bij wijzigingen van de weergave.

Dit zorgt ervoor dat de juiste eigenaar van de mappartitie alle aanvragen verwerkt.

Partitioneringsstrategie

De directory wordt gepartitioneerd met behulp van een consistente hash-ring, waarbij bereikzones zijn toegewezen aan de actieve silo's in het cluster. Graan-ID's worden gehasht om de silo te vinden die eigenaar is van het gedeelte van de ring dat overeenkomt met de hash.

Elke actieve silo is eigenaar van een vooraf geconfigureerd aantal reeksen, standaard 30 reeksen per silo. Dit is vergelijkbaar met het schema dat door Amazon Dynamo en Apache Cassandra wordt gebruikt, waarbij meerdere 'virtuele knooppunten' (bereiken) worden gemaakt voor elk fysiek knooppunt (host).

De grootte van een partitie wordt bepaald door de afstand tussen de hash en de hash van de volgende partitie. Het is mogelijk dat een bereik tijdens een weergavewijziging tussen meerdere silo's wordt gesplitst. Dit voegt complexiteit toe aan de procedure voor weergavewijzigingen, omdat elke partitie mogelijk moet afstemmen met meerdere andere partities.

Wijzigingsprocedure weergeven

Adreslijstpartities (geïmplementeerd in GrainDirectoryPartition) gebruiken versiegebonden bereikvergrendelingen om ongeldige toegang tot bereiken te voorkomen tijdens wijzigingen in de weergave. Bereikvergrendelingen worden gemaakt tijdens een weergavewijziging en vrijgegeven wanneer de weergavewijziging is voltooid. Deze vergrendelingen zijn vergelijkbaar met de 'wedges' die worden gebruikt in de methodologie virtual synchrony.

Wanneer een weergavewijziging optreedt, kan een partitie groeien of verkleinen:

  • Als een nieuwe silo lid wordt van het cluster, kunnen bestaande partities kleiner worden om ruimte te maken.
  • Als een silo het cluster verlaat, kunnen de overgebleven partities groeien om de wees bereiken over te nemen.

Adreslijstregistraties moeten worden overgedragen van de oude eigenaar naar de nieuwe eigenaar voordat aanvragen kunnen worden verwerkt. Het overdrachtsproces volgt deze stappen:

  1. De vorige eigenaar verzegelt het bereik en maakt een momentopname van de mapvermeldingen.
  2. De nieuwe eigenaar vraagt de momentopname aan en past de momentopname toe.
  3. De nieuwe eigenaar begint met het verwerken van aanvragen voor het assortiment.
  4. De vorige eigenaar krijgt een melding en verwijdert de momentopname.

Herstelproces

Wanneer een host vastloopt zonder de mappartities goed af te geven, moeten de volgende partitie-eigenaren herstel uitvoeren. Dit omvat:

  1. Het opvragen van alle actieve silo's in het cluster voor graanregistraties.
  2. Herstellen van de directorystatus voor de betrokken reeksen.
  3. Ervoor zorgen dat er geen dubbele korrelactiveringen plaatsvinden.

Herstel is ook nodig wanneer het clusterlidmaatschap snel verandert. Hoewel clusterlidmaatschap monotoniteit garandeert, is het mogelijk dat silo's tussenliggende lidmaatschapsweergaven missen. In dergelijke gevallen:

  • Momentopnameoverdrachten worden afgebroken.
  • Herstel wordt uitgevoerd in plaats van de normale partitie-naar-partitie-overdracht.
  • Het systeem behoudt consistentie ondanks ontbrekende tussenliggende statussen.

Een toekomstige verbetering van het clusterlidmaatschap kan deze scenario's verminderen of elimineren door ervoor te zorgen dat alle silo's alle weergaven zien.