Distribuerad låsansvarig
Operativsystem använder låshanterare för att organisera och serialisera tillgången till resurser. En distribuerad låshanterare (DLM) körs i varje maskin i ett kluster, med en identisk kopia av en klusteromfattande låsdatabas. På detta sätt tillhandahåller en DLM mjukvaruapplikationer som är distribuerade över ett kluster på flera maskiner med ett sätt att synkronisera deras åtkomst till delade resurser .
DLM har använts som grunden för flera framgångsrika klustrade filsystem , där maskinerna i ett kluster kan använda varandras lagring via ett enhetligt filsystem , med betydande fördelar för prestanda och tillgänglighet . Den största prestandafördelen kommer från att lösa problemet med diskcache-koherens mellan deltagande datorer. DLM används inte bara för fillåsning utan också för koordinering av all diskåtkomst . VMScluster , det första klustringssystemet som kom till stor användning, förlitade sig på OpenVMS DLM på just detta sätt.
Resurser
DLM använder ett generaliserat koncept för en resurs , vilket är någon enhet till vilken delad åtkomst måste kontrolleras. Detta kan relatera till en fil, en post, ett område med delat minne eller något annat som programdesignern väljer . En hierarki av resurser kan definieras, så att ett antal nivåer av låsning kan implementeras. Till exempel kan en hypotetisk databas definiera en resurshierarki enligt följande:
- Databas
- Tabell
- Spela in
- Fält
En process kan sedan förvärva lås på databasen som helhet och sedan på vissa delar av databasen. Ett lås måste erhållas på en överordnad resurs innan en underordnad resurs kan låsas.
Låslägen
En process som körs inom ett VMSCluster kan erhålla ett lås på en resurs. Det finns sex låslägen som kan beviljas, och dessa bestämmer graden av exklusivitet som beviljas, det är möjligt att konvertera låset till en högre eller lägre nivå av låsläge. När alla processer har låst upp en resurs förstörs systemets information om resursen.
- Null (NL). Indikerar intresse för resursen, men hindrar inte andra processer från att låsa den. Det har fördelen att resursen och dess låsvärdesblock bevaras, även när inga processer låser den.
- Samtidig läsning (CR). Indikerar en önskan att läsa (men inte uppdatera) resursen. Det tillåter andra processer att läsa eller uppdatera resursen, men hindrar andra från att ha exklusiv åtkomst till den. Detta används vanligtvis på resurser på hög nivå, för att mer restriktiva lås kan erhållas på underordnade resurser.
- Concurrent Write (CW). Indikerar en önskan att läsa och uppdatera resursen. Det tillåter också andra processer att läsa eller uppdatera resursen, men hindrar andra från att ha exklusiv åtkomst till den. Detta används också vanligtvis på högnivåresurser, för att mer restriktiva lås kan erhållas på underordnade resurser.
- Protected Read (PR). Detta är det traditionella delningslåset , som indikerar en önskan att läsa resursen men hindrar andra från att uppdatera den. Andra kan dock också läsa resursen.
- Protected Write (PW). Detta är det traditionella uppdateringslåset , som indikerar en önskan att läsa och uppdatera resursen och hindrar andra från att uppdatera den. Andra med åtkomst till samtidig läsning kan dock läsa resursen.
- Exklusivt (EX). Detta är det traditionella exklusiva låset som tillåter läs- och uppdateringsåtkomst till resursen och hindrar andra från att ha tillgång till den.
Följande sanningstabell visar kompatibiliteten för varje låsläge med de andra:
Läge | NL | CR | CW | PR | PW | EX |
---|---|---|---|---|---|---|
NL | Ja | Ja | Ja | Ja | Ja | Ja |
CR | Ja | Ja | Ja | Ja | Ja | Nej |
CW | Ja | Ja | Ja | Nej | Nej | Nej |
PR | Ja | Ja | Nej | Ja | Nej | Nej |
PW | Ja | Ja | Nej | Nej | Nej | Nej |
EX | Ja | Nej | Nej | Nej | Nej | Nej |
Att skaffa ett lås
En process kan erhålla ett lås på en resurs genom att ställa en låsbegäran i kö. Detta liknar QIO -tekniken som används för att utföra I/O. Begäran om kölås kan antingen slutföras synkront, i vilket fall processen väntar tills låset beviljas, eller asynkront, i vilket fall en AST inträffar när låset har erhållits.
Det är också möjligt att upprätta en blockerande AST , som utlöses när en process har erhållit ett lås som hindrar åtkomst till resursen av en annan process. Den ursprungliga processen kan sedan valfritt vidta åtgärder för att tillåta den andra åtkomsten (t.ex. genom att degradera eller släppa låset).
Låsvärdeblock
Ett låsvärdeblock är associerat med varje resurs. Detta kan läsas av alla processer som har erhållit ett lås på resursen (förutom ett nolllås) och kan uppdateras av en process som har erhållit en skyddad uppdatering eller exklusivt lås på den.
Den kan användas för att hålla all information om resursen som applikationsdesignern väljer. En typisk användning är att ha ett versionsnummer för resursen. Varje gång den associerade enheten (t.ex. en databaspost) uppdateras, ökar innehavaren av låset låsvärdesblocket. När en annan process vill läsa resursen, erhåller den lämpligt lås och jämför det aktuella låsvärdet med värdet den hade förra gången processen låste resursen. Om värdet är detsamma vet processen att den associerade enheten inte har uppdaterats sedan den senaste gången den läste den, och därför är det onödig att läsa den igen. Därför kan denna teknik användas för att implementera olika typer av cache i en databas eller liknande applikation.
Detektering av dödläge
När en eller flera processer har fått lås på resurser är det möjligt att skapa en situation där var och en hindrar en annan från att få ett lås, och ingen av dem kan fortsätta. Detta är känt som ett dödläge ( EW Dijkstra kallade det ursprungligen en dödlig omfamning ).
Ett enkelt exempel är när process 1 har erhållit ett exklusivt lås på resurs A och process 2 har erhållit ett exklusivt lås på resurs B. Om process 1 sedan försöker låsa resurs B måste den vänta på att process 2 släpper den. Men om process 2 sedan försöker låsa resurs A kommer båda processerna att vänta för evigt på varandra.
OpenVMS DLM kontrollerar regelbundet efter dödlägessituationer. I exemplet ovan skulle den andra låsköbegäran för en av processerna återkomma med en dödlägesstatus. Det skulle sedan vara upp till denna process att vidta åtgärder för att lösa dödläget - i det här fallet genom att släppa det första låset som det erhöll.
Linux-klustring
Både Red Hat och Oracle har utvecklat klusterprogram för Linux .
OCFS2 , Oracle Cluster File System lades till i den officiella Linux-kärnan med version 2.6.16, i januari 2006. Varningen för alfakvalitetskoden på OCFS2 togs bort 2.6.19.
Red Hats klusterprogramvara, inklusive deras DLM och GFS2, lades officiellt till Linuxkärnan med version 2.6.19, i november 2006.
Båda systemen använder en DLM som är modellerad på det ärevördiga VMS DLM. Oracles DLM har ett enklare API. (Kärnfunktionen, dlmlock()
, har åtta parametrar, medan VMS SYS$ENQ
-tjänsten och Red Hats dlm_lock
båda har 11.)
Andra implementeringar
Andra DLM-implementationer inkluderar följande:
- Google har utvecklat Chubby , en låstjänst för löst kopplade distribuerade system. Den är designad för grovkornig låsning och ger även ett begränsat men tillförlitligt distribuerat filsystem. Viktiga delar av Googles infrastruktur, inklusive Google File System , Bigtable och MapReduce , använder Chubby för att synkronisera åtkomst till delade resurser. Även om Chubby designades som en låstjänst, används den nu flitigt inom Google som en namnserver och ersätter DNS .
- Apache ZooKeeper , som skapades på Yahoo , är programvara med öppen källkod och kan också användas för att utföra distribuerade lås.
- Etcd är öppen källkod, utvecklad på CoreOS under Apache-licensen. Den kan användas för att utföra distribuerade lås också.
- Redis är en öppen källkod, BSD-licensierad, avancerad nyckel-värdescache och butik. Redis kan användas för att implementera Redlock Algorithm för distribuerad låshantering.
- HashiCorps Consul , som skapades av HashiCorp , är programvara med öppen källkod och kan användas för att utföra distribuerade lås också.
- Taooka distribuerade låshanterare använder "prova lås"-metoderna för att undvika dödlägen . Den kan också specificera en TTL för varje lås med nanosekundsprecision.
- En DLM är också en nyckelkomponent i mer ambitiösa SSI-projekt ( Single System Image) som OpenSSI .