Rozproszony menedżer zamków - Distributed lock manager

Systemy operacyjne używają menedżerów blokad do organizowania i serializacji dostępu do zasobów. Dystrybuowane menedżer zamek (DLM) działa w każdej maszyny w klastrze, z identyczną kopią bazy blokady całego klastra. W ten sposób DLM dostarcza aplikacje, które są rozproszone w klastrze na wielu maszynach, z możliwością synchronizacji ich dostępu do współdzielonych zasobów .

DLM zostały wykorzystane jako podstawa kilku udanych klastrowych systemów plików , w których maszyny w klastrze mogą korzystać ze swojej pamięci masowej za pośrednictwem ujednoliconego systemu plików , co ma istotne zalety pod względem wydajności i dostępności . Główna korzyść w zakresie wydajności wynika z rozwiązania problemu spójności pamięci podręcznej dysku między uczestniczącymi komputerami. DLM służy nie tylko do blokowania plików, ale także do koordynacji całego dostępu do dysku . VMScluster , pierwszy system klastrowy, który wszedł do powszechnego użytku, polegał właśnie na OpenVMS DLM właśnie w ten sposób.

Zasoby

DLM wykorzystuje uogólnioną koncepcję zasobu , czyli pewnej jednostki, do której dostęp współdzielony musi być kontrolowany. Może to dotyczyć pliku, rekordu, obszaru pamięci współdzielonej lub czegokolwiek innego, co wybierze projektant aplikacji . Można zdefiniować hierarchię zasobów, dzięki czemu można zaimplementować wiele poziomów blokowania. Na przykład hipotetyczna baza danych może definiować hierarchię zasobów w następujący sposób:

  • Baza danych
  • Stół
  • Rekord
  • Pole

Proces może następnie pozyskać zamki w bazie danych jako całości, a następnie poszczególne części z bazy danych. Przed zablokowaniem zasobu podrzędnego należy uzyskać blokadę zasobu nadrzędnego.

Tryby blokady

Proces działający w ramach VMSCluster może uzyskać blokadę zasobu. Istnieje sześć trybów blokady, które można przyznać, a te określają poziom przyznanej wyłączności, możliwe jest przekształcenie blokady na wyższy lub niższy poziom trybu blokady. Gdy wszystkie procesy odblokują zasób, informacje systemowe o zasobie są niszczone.

  • Zerowy (NL). Wskazuje zainteresowanie zasobem, ale nie zapobiega blokowaniu go przez inne procesy. Ma tę zaletę, że zasób i jego blok wartości blokady są zachowywane, nawet jeśli żaden proces go nie blokuje.
  • Odczyt współbieżny (CR). Wskazuje na chęć odczytania (ale nie aktualizacji) zasobu. Umożliwia innym procesom odczytywanie lub aktualizowanie zasobu, ale uniemożliwia innym dostęp do niego na wyłączność. Jest to zwykle stosowane na zasobach wysokiego poziomu, aby można było uzyskać bardziej restrykcyjne blokady na podrzędnych zasobach.
  • Zapis współbieżny (CW). Wskazuje na chęć przeczytania i aktualizacji zasobu. Umożliwia także innym procesom odczytywanie lub aktualizowanie zasobu, ale uniemożliwia innym dostęp do niego na wyłączność. Jest to również zwykle stosowane na zasobach wysokiego poziomu, aby można było uzyskać bardziej restrykcyjne blokady na podrzędnych zasobach.
  • Odczyt chroniony (PR). Jest to tradycyjna blokada udziału , która wskazuje na chęć odczytania zasobu, ale uniemożliwia innym jego aktualizację. Inni mogą jednak również przeczytać ten zasób.
  • Zabezpieczony zapis (PW). Jest to tradycyjna blokada aktualizacji , która wskazuje na chęć odczytania i aktualizacji zasobu oraz uniemożliwia innym jego aktualizację. Inne osoby z dostępem do współbieżnego odczytu mogą jednak czytać zasób.
  • Ekskluzywny (EX). Jest to tradycyjna blokada na wyłączność, która umożliwia dostęp do zasobu w trybie odczytu i aktualizacji oraz uniemożliwia innym dostęp do niego.

Poniższa tabela prawdy pokazuje zgodność każdego trybu blokady z innymi:

Tryb Holandia CR CW PR PW DAWNY
Holandia tak tak tak tak tak tak
CR tak tak tak tak tak Nie
CW tak tak tak Nie Nie Nie
PR tak tak Nie tak Nie Nie
PW tak tak Nie Nie Nie Nie
DAWNY tak Nie Nie Nie Nie Nie

Uzyskanie zamka

Proces może uzyskać blokadę zasobu przez umieszczenie żądania blokady w kolejce . Jest to podobne do techniki QIO używanej do wykonywania operacji we/wy. Żądanie blokady w kolejce może zakończyć się synchronicznie, w którym to przypadku proces czeka na przyznanie blokady, lub asynchronicznie, w którym to przypadku AST występuje po uzyskaniu blokady.

Możliwe jest również ustanowienie blokującego AST , który jest wyzwalany, gdy proces uzyska blokadę uniemożliwiającą dostęp do zasobu przez inny proces. Pierwotny proces może następnie opcjonalnie podjąć działania, aby umożliwić drugiemu dostęp (np. poprzez obniżenie poziomu lub zwolnienie blokady).

Zablokuj blokadę wartości

Blok wartości blokady jest powiązany z każdym zasobem. Może to zostać odczytane przez dowolny proces, który uzyskał blokadę zasobu (inną niż blokada zerowa) i może zostać zaktualizowany przez proces, który uzyskał na nim aktualizację chronioną lub blokadę na wyłączność.

Może służyć do przechowywania dowolnych informacji o zasobie wybranym przez projektanta aplikacji. Typowym zastosowaniem jest przechowywanie numeru wersji zasobu. Za każdym razem, gdy skojarzona jednostka (np. rekord bazy danych) jest aktualizowana, posiadacz blokady zwiększa blok wartości blokady. Gdy inny proces chce odczytać zasób, uzyskuje odpowiednią blokadę i porównuje bieżącą wartość blokady z wartością, którą miał ostatnio, gdy proces zablokował zasób. Jeśli wartość jest taka sama, proces wie, że skojarzona jednostka nie została zaktualizowana od czasu ostatniego jej odczytania i dlatego nie ma potrzeby ponownego jej odczytywania. Stąd technika ta może być wykorzystana do implementacji różnych typów pamięci podręcznej w bazie danych lub podobnej aplikacji.

Wykrywanie zakleszczeń

Gdy jeden lub więcej procesów uzyskało blokady na zasobach, możliwe jest wytworzenie sytuacji, w której każdy z nich uniemożliwia drugiemu uzyskanie blokady i żaden z nich nie może kontynuować. Jest to znane jako impas ( EW Dijkstra pierwotnie nazwał to śmiertelnym uściskiem ).

Prostym przykładem jest sytuacja, w której Proces 1 uzyskał blokadę na wyłączność na Zasobie A, a Proces 2 uzyskał blokadę na wyłączność na Zasobie B. Jeśli Proces 1 spróbuje zablokować zasób B, będzie musiał poczekać, aż Proces 2 go zwolni. Ale jeśli Proces 2 następnie spróbuje zablokować Zasób A, oba procesy będą czekać na siebie w nieskończoność.

OpenVMS DLM okresowo sprawdza, czy nie występują zakleszczenia. W powyższym przykładzie drugie żądanie kolejki blokady jednego z procesów zwróciłoby stan zakleszczenia. Wtedy do tego procesu należałoby podjęcie działań w celu rozwiązania zakleszczenia — w tym przypadku poprzez zwolnienie pierwszej uzyskanej blokady.

Klastrowanie w Linuksie

Zarówno Red Hat, jak i Oracle opracowały oprogramowanie klastrowe dla systemu Linux .

OCFS2 , Oracle Cluster File System został dodany do oficjalnego jądra Linuksa w wersji 2.6.16 w styczniu 2006 roku. Ostrzeżenie o jakości alfa kodu w OCFS2 zostało usunięte w wersji 2.6.19.

Oprogramowanie klastra Red Hata, w tym ich DLM i GFS2, zostało oficjalnie dodane do jądra Linuksa w wersji 2.6.19 w listopadzie 2006 roku.

Oba systemy wykorzystują DLM wzorowany na czcigodnym DLM VMS. Oracle DLM ma prostszy interfejs API. (podstawowa funkcja , dlmlock()ma osiem parametrów, podczas gdy SYS$ENQusługa VMS i Red Hat dlm_lockmają po 11.)

Inne realizacje

Inne implementacje DLM obejmują:

  • Google opracował Chubby , usługę blokady dla luźno powiązanych systemów rozproszonych. Jest przeznaczony do blokowania gruboziarnistego, a także zapewnia ograniczony, ale niezawodny rozproszony system plików. Kluczowe elementy infrastruktury Google, w tym system plików Google , Bigtable i MapReduce , używają Chubby do synchronizowania dostępu do udostępnionych zasobów. Chociaż Chubby został zaprojektowany jako usługa blokująca, jest obecnie intensywnie używany w Google jako serwer nazw , wypierając DNS .
  • Apache ZooKeeper , który został stworzony w Yahoo , jest oprogramowaniem typu open source i może być również używany do wykonywania rozproszonych blokad.
  • Etcd to oprogramowanie typu open source, opracowane w CoreOS na licencji Apache. Może być również używany do wykonywania rozproszonych blokad.
  • Redis to open source, licencjonowany BSD, zaawansowana pamięć podręczna klucz-wartość i magazyn. Redis może służyć do implementacji algorytmu Redlock do zarządzania rozproszonymi blokadami.
  • Konsul HashiCorp , który został stworzony przez HashiCorp , jest oprogramowaniem typu open source i może być również używany do wykonywania rozproszonych blokad.
  • Menedżer rozproszonych blokad Taooka wykorzystuje metody „try lock”, aby uniknąć zakleszczeń . Może również określić TTL dla każdej blokady z dokładnością do nanosekund.
  • DLM jest również kluczowym elementem bardziej ambitnych projektów obrazu pojedynczego systemu (SSI), takich jak OpenSSI .

Bibliografia