Bosh sahifa Wiki Distributed lock

Distributed lock

Distributed lock — bir nechta host yoki process umumiy resurs ustida ayni paytda faqat bitta egaga amal bajarish huquqini berishga urinadigan koordinatsiya mexanizmidir. U shared memory mutexidan farqli ravishda tarmoq uzilishi, node qulashi va kechikkan xabarlar sharoitida ishlaydi. Distributed lock mutlaq vaqt va ishonchli aloqa bo‘lmagan tizimda nozik primitive bo‘lib, noto‘g‘ri qo‘llansa himoya qilayotgan invariantni buzishi mumkin.

Lock server va lease

Lock odatda consensus bilan boshqariladigan coordination service yoki shartli yozuvni qo‘llaydigan storage orqali olinadi. Mijoz resource key uchun owner identifikatori va lease yaratadi. Lease cheklangan vaqt amal qiladi; mijoz tirik bo‘lsa yangilaydi. Jarayon o‘lsa lock avtomatik bo‘shaydi, ammo network partition vaqtida mijoz lease yangilanmaganini darhol bilmaydi.

Faqat lokal timerga tayanib kritik amalni davom ettirish xavfli. Eski owner pauzadan keyin uyg‘onib, yangi owner allaqachon ish boshlagan bo‘lsa, ikkalasi parallel yozishi mumkin. Fencing token buni downstream darajada cheklaydi: har acquire monoton oshuvchi token beradi, resurs esa oldingi tokenli amallarni rad etadi.

Xavfsizlik va liveness

Safety bir vaqtda ikki haqiqiy egaga ruxsat bermaslikni, liveness esa tizim sog‘lom bo‘lganda lock oxir-oqibat olinishi yoki bo‘shashini anglatadi. Failover paytida eski leader bergan lock bilan yangi leader holati kelishmasa safety buziladi. Shu sababli consistency modeli, quorum va linearizable conditional write xususiyati hujjatdan tekshiriladi.

Lock acquisitionga timeout va cancel beriladi. Cheksiz kutish thread va connectionlarni tugatadi. Retry random jitter bilan bajariladi, aks holda ko‘p contender bir vaqtda qayta urinib thundering herd yaratadi. Fairness talab qilinsa navbat tartibi alohida ta’minlanadi; oddiy key-value lock buni kafolatlamasligi mumkin.

Muqobil yondashuvlar

Ko‘p holatda lock o‘rniga invariantni storage’da atomik ifodalash xavfsizroq. Unique constraint ikki marta rezerv qilishni, compare-and-set version konflikti stale updateni, idempotency key duplicate commandni to‘xtatadi. Partitioning ma’lum resource uchun barcha buyruqlarni bitta consumerga yo‘naltirishi mumkin. Lock faqat muammo haqiqatan o‘zaro istisno talab qilganda tanlanadi.

Amaliy ekspluatatsiya

Metrikalar acquire latency, contention, lease renewal failure, expired owner va fencing rejectionni ko‘rsatadi. Chaos test process pause, packet loss, clock jump, leader election va storage sekinlashishini qamrab oladi. Unlock owner hamda tokenni atomik solishtirib bajariladi. Operator lockni majburan o‘chirishdan oldin eski ishning downstream ta’sirini tekshiradi; lock yo‘qolishi bajarilgan operatsiyani ortga qaytarmaydi.

Lock granularity

Global lock implementatsiyani sodda ko‘rsatadi, ammo bog‘liq bo‘lmagan operatsiyalarni ham ketma-ketlashtirib availability va throughputni pasaytiradi. Per-resource key parallelizmni oshiradi, lekin composite invariant bir nechta keyni qamrasa atomicity qiyinlashadi. Bir vaqtning o‘zida bir necha lock olinadigan tizim barqaror sort tartibidan foydalanib deadlockni kamaytiradi va acquisition muvaffaqiyatsiz bo‘lsa oldingi locklarni bo‘shatadi. Lock service’ga yuk ham hisoblanadi: har kichik record uchun tez-tez lease yangilash coordination clusterini bottleneck qiladi. Batch, local aggregation yoki data ownershipni bitta shardga ko‘chirish ba’zan ancha sodda yechim beradi.

Lock qiymatiga inson o‘qiydigan diagnostika qo‘shilishi mumkin, ammo qaror faqat signed yoki authoritative owner va token maydonlariga tayanadi. Client bergan timestamp expiry uchun ishonchli manba emas.

Bog‘liq tushunchalar

Consensus, Lease, Fencing token, Mutual exclusion, Linearizability, Compare-and-set, Network partition