Dağıtılmış kilit yöneticisi - Distributed lock manager
İşletim sistemleri , kaynaklara erişimi düzenlemek ve seri hale getirmek için kilit yöneticilerini kullanır. Bir dağıtılmış kilit yöneticisi (DSB) bir küme çapında kilit veritabanının aynı kopyasıyla, bir kümedeki her makinede çalışır. Bu şekilde bir DLM sağlar yazılım uygulamalarını edilir dağıtılmış kendi erişimleri senkronize etmek için bir araç ile birden makinelerde bir küme üzerinde paylaşılan kaynaklar .
DLM'ler, bir kümedeki makinelerin, performans ve kullanılabilirlik açısından önemli avantajlarla birlikte, birleşik bir dosya sistemi aracılığıyla birbirlerinin depolamasını kullanabildiği , birkaç başarılı kümelenmiş dosya sisteminin temeli olarak kullanılmıştır . Ana performans avantajı, katılan bilgisayarlar arasındaki disk önbellek tutarlılığı sorununu çözmekten gelir . DLM, yalnızca dosya kilitleme için değil, aynı zamanda tüm disk erişiminin koordinasyonu için de kullanılır . Yaygın kullanıma giren ilk kümeleme sistemi olan VMScluster , tam da bu şekilde OpenVMS DLM'ye güveniyordu .
Kaynaklar
DLM, paylaşılan erişimin kontrol edilmesi gereken bir varlık olan genel bir kaynak kavramını kullanır . Bu, bir dosya, kayıt, paylaşılan hafıza alanı veya uygulama tasarımcısının seçtiği herhangi bir şeyle ilgili olabilir . Bir dizi kilitleme düzeyinin uygulanabilmesi için bir kaynaklar hiyerarşisi tanımlanabilir. Örneğin, varsayımsal bir veritabanı aşağıdaki gibi bir kaynak hiyerarşisi tanımlayabilir:
- Veri tabanı
- tablo
- Kayıt
- Alan
Bir işlem daha sonra bir bütün olarak veritabanında ve ardından veritabanının belirli bölümlerinde kilitler alabilir. Bir alt kaynak kilitlenmeden önce bir üst kaynakta bir kilit alınmalıdır.
Kilit modları
Bir VMSCluster içinde çalışan bir işlem, bir kaynak üzerinde bir kilit alabilir. Verilebilecek altı kilit modu vardır ve bunlar verilen münhasırlık seviyesini belirler, kilidi daha yüksek veya daha düşük bir kilit moduna dönüştürmek mümkündür. Tüm süreçler bir kaynağın kilidini açtığında, sistemin kaynak hakkındaki bilgileri yok edilir.
- Boş (NL). Kaynağa ilgi gösterir, ancak diğer işlemlerin onu kilitlemesini engellemez. Hiçbir işlem onu kilitlemediğinde bile kaynağın ve kilit değeri bloğunun korunması avantajına sahiptir .
- Eşzamanlı Okuma (CR). Kaynağı okuma (ancak güncelleme değil) isteğini belirtir. Diğer süreçlerin kaynağı okumasına veya güncellemesine izin verir, ancak başkalarının ona özel erişime sahip olmasını engeller. Bu genellikle, alt kaynaklar üzerinde daha kısıtlayıcı kilitler elde edilebilmesi için yüksek seviyeli kaynaklarda kullanılır.
- Eşzamanlı Yazma (CW). Kaynağı okuma ve güncelleme isteğini gösterir. Ayrıca, diğer süreçlerin kaynağı okumasına veya güncellemesine izin verir, ancak başkalarının ona özel erişime sahip olmasını engeller. Bu aynı zamanda, alt kaynaklar üzerinde daha kısıtlayıcı kilitler elde edilebilmesi için genellikle üst düzey kaynaklarda da kullanılır.
- Korumalı Okuma (PR). Bu, kaynağı okuma isteğini belirten ancak başkalarının onu güncellemesini engelleyen geleneksel paylaşım kilididir . Ancak diğerleri de kaynağı okuyabilir.
- Korumalı Yazma (PW). Bu, kaynağı okuma ve güncelleme isteğini belirten ve başkalarının onu güncellemesini engelleyen geleneksel güncelleme kilididir . Ancak Eşzamanlı Okuma erişimi olan diğerleri kaynağı okuyabilir.
- Özel (EX). Bu, kaynağa okuma ve güncelleme erişimine izin veren ve başkalarının ona erişmesini engelleyen geleneksel özel kilittir .
Aşağıdaki doğruluk tablosu , her bir kilit modunun diğerleriyle uyumluluğunu gösterir:
| mod | NL | CR | CW | halkla ilişkiler | şifre | eski |
|---|---|---|---|---|---|---|
| NL | Evet | Evet | Evet | Evet | Evet | Evet |
| CR | Evet | Evet | Evet | Evet | Evet | Hayır |
| CW | Evet | Evet | Evet | Hayır | Hayır | Hayır |
| halkla ilişkiler | Evet | Evet | Hayır | Evet | Hayır | Hayır |
| şifre | Evet | Evet | Hayır | Hayır | Hayır | Hayır |
| eski | Evet | Hayır | Hayır | Hayır | Hayır | Hayır |
Kilit elde etmek
Bir işlem, bir kilit isteğini kuyruğa alarak bir kaynak üzerinde bir kilit elde edebilir. Bu, G/Ç gerçekleştirmek için kullanılan QIO tekniğine benzer . Kuyruğa alma kilidi isteği ya eşzamanlı olarak tamamlanabilir, bu durumda işlem kilit verilene kadar bekler veya eşzamansız olarak, bu durumda kilit alındığında bir AST gerçekleşir.
Bir işlem, başka bir işlem tarafından kaynağa erişimi engelleyen bir kilit aldığında tetiklenen bir engelleme AST'si oluşturmak da mümkündür . Orijinal süreç daha sonra isteğe bağlı olarak diğer erişime izin vermek için harekete geçebilir (örn. kilidi indirerek veya serbest bırakarak).
Değer bloğunu kilitle
Her kaynakla bir kilit değeri bloğu ilişkilendirilir. Bu, kaynak üzerinde bir kilit alan (boş kilit dışında) herhangi bir işlem tarafından okunabilir ve üzerinde korumalı bir güncelleme veya özel kilit almış bir işlem tarafından güncellenebilir.
Uygulama tasarımcısının seçtiği kaynak hakkında herhangi bir bilgiyi tutmak için kullanılabilir. Tipik bir kullanım, kaynağın sürüm numarasını tutmaktır . İlişkili varlık (örneğin bir veritabanı kaydı) her güncellendiğinde, kilidin sahibi kilit değeri bloğunu artırır. Başka bir işlem kaynağı okumak istediğinde, uygun kilidi alır ve mevcut kilit değerini, işlemin kaynağı en son kilitlediğinde sahip olduğu değerle karşılaştırır. Değer aynıysa, süreç ilişkili varlığın son okuduğundan beri güncellenmediğini bilir ve bu nedenle tekrar okuması gereksizdir. Bu nedenle, bu teknik, bir veritabanında veya benzer bir uygulamada çeşitli önbellek türlerini uygulamak için kullanılabilir .
Kilitlenme algılama
Bir veya daha fazla işlem kaynaklar üzerinde kilit elde ettiğinde, her birinin bir diğerinin kilit almasını engellediği ve hiçbirinin devam edemeyeceği bir durum üretmek mümkündür. Bu, bir kilitlenme olarak bilinir ( EW Dijkstra, başlangıçta buna ölümcül bir kucaklaşma diyordu ).
Basit bir örnek, İşlem 1'in Kaynak A üzerinde özel bir kilit elde etmesi ve İşlem 2'nin Kaynak B üzerinde özel bir kilit elde etmesidir. İşlem 1, Kaynak B'yi kilitlemeye çalışırsa, İşlem 2'nin onu serbest bırakmasını beklemek zorunda kalacaktır. Ancak İşlem 2, Kaynak A'yı kilitlemeye çalışırsa, her iki işlem de sonsuza kadar birbirini bekler.
OpenVMS DLM, kilitlenme durumlarını periyodik olarak kontrol eder. Yukarıdaki örnekte, işlemlerden birinin ikinci kilit kuyruğa alma isteği, bir kilitlenme durumuyla dönecektir. Daha sonra, kilitlenmeyi çözmek için harekete geçmek bu sürece bağlı olacaktır - bu durumda elde edilen ilk kilidi serbest bırakarak.
Linux kümeleme
Hem Red Hat hem de Oracle , Linux için kümeleme yazılımı geliştirmiştir .
Oracle Cluster File System olan OCFS2 , resmi Linux çekirdeğine 2.6.16 sürümüyle Ocak 2006'da eklendi. OCFS2'deki alfa kalitesinde kod uyarısı 2.6.19'da kaldırıldı.
Red Hat'in küme yazılımı, DLM ve GFS2 de dahil olmak üzere resmi olarak Kasım 2006'da 2.6.19 sürümüyle Linux çekirdeğine eklendi.
Her iki sistem de saygıdeğer VMS DLM'de modellenen bir DLM kullanır. Oracle'ın DLM'si daha basit bir API'ye sahiptir. (çekirdek işlev, dlmlock(), sekiz parametreye sahiptir, oysa VMS SYS$ENQhizmeti ve Red Hat'in dlm_lockher ikisi de 11'e sahiptir.)
Diğer uygulamalar
Diğer DLM uygulamaları şunları içerir:
- Google geliştirmiştir Chubby'den , gevşek bağlı dağıtılmış sistemler için bir kilit hizmeti. Kaba taneli kilitleme için tasarlanmıştır ve ayrıca sınırlı ancak güvenilir bir dağıtılmış dosya sistemi sağlar. Google Dosya Sistemi , Bigtable ve MapReduce dahil olmak üzere Google altyapısının önemli parçaları, paylaşılan kaynaklara erişimleri senkronize etmek için Chubby'yi kullanır. Chubby bir kilit hizmeti olarak tasarlanmış olsa da, artık Google'da DNS'nin yerini alarak bir ad sunucusu olarak yoğun bir şekilde kullanılmaktadır .
- Apache hayvan bakıcısı olarak yaratıldı, Yahoo , açık kaynak yazılım ve hem de dağıtılmış kilitleri gerçekleştirmek için kullanılabilir.
- Etcd , CoreOS'ta Apache Lisansı altında geliştirilen açık kaynaklı bir yazılımdır . Dağıtılmış kilitleri gerçekleştirmek için de kullanılabilir.
- Redis , açık kaynak kodlu, BSD lisanslı, gelişmiş bir anahtar/değer önbelleği ve deposudur. Redis, dağıtılmış kilit yönetimi için Redlock Algoritmasını uygulamak için kullanılabilir.
- HashiCorp en Konsolosu tarafından yaratıldı, HashiCorp , açık kaynak yazılım ve hem de dağıtılmış kilitleri gerçekleştirmek için kullanılabilir.
- Taooka dağıtılmış kilit yöneticisi, kilitlenmeleri önlemek için "kilitlemeyi dene" yöntemlerini kullanır . Ayrıca nanosaniye hassasiyetinde her kilit için bir TTL belirtebilir.
- DLM, OpenSSI gibi daha iddialı tek sistem görüntüsü (SSI) projelerinin de önemli bir bileşenidir .
Referanslar
- HP OpenVMS Sistem Hizmetleri Referans Kılavuzu – $ENQ
- Memur - Ruby ile yazılmış basit bir dağıtılmış kilit yöneticisi
- FLoM - Kabuk komutlarını, komut dosyalarını ve özel olarak geliştirilmiş C, C++, Java, PHP ve Python yazılımlarını senkronize etmek için kullanılabilen ücretsiz bir açık kaynaklı dağıtılmış kilit yöneticisi