14:09
Paylaşdırılmış sistemlərdə lock-lar: Leases və fencing token-lər nədir, nə üçün vacibdir?

Paylaşdırılmış sistemlərdə eyni resursa birdən çox proqramın eyni anda müdaxilə etməsinin qarşısını almaq üçün müxtəlif mexanizmlər mövcuddur. Bunlardan ən geniş yayılanı lease (müvəqqəti sahiblik) anlayışıdır. Lakin təcrübə göstərir ki, təkcə lease-lər kifayət deyil – onların yanında fencing token adlı mexanizm də tələb olunur.
Lease nədir və niyə təkbaşına çatmır?
Lease, bir proqrama resurs üzərində məhdud müddətə (məsələn, 30 saniyə) sahiblik verir. Proqram sağlam olduğu müddətdə bu müddəti uzada bilər, əks halda sahiblik avtomatik bitər. Bu, tərk edilmiş lock-ların sistemdə bloklanmasının qarşısını alır.
Ancaq burada incə bir problem yaranır: təsəvvür edin ki, proqram Java Virtual Machine (JVM) üzərində işləyir və gözlənilmədən 40 saniyəlik Full Garbage Collection pause'u yaşayır. Lease'in müddəti 30 saniyədir – nəticədə lease bitir, lakin proqram ayılanda hələ də özünü sahib hesab edir.
Split-brain — şəbəkə qəzası olmadan da olur
Bu vəziyyətə split-brain deyilir. Çoxları bunu yalnız şəbəkə qəzası ilə əlaqələndirir, amma yuxarıdakı nümunə göstərir ki, proqramın müvəqqəti donması da eyni nəticəyə gətirib çıxara bilər. Nəticədə iki proqram eyni resursa sahib olduğunu zənn edir – bu, məlumat uyğunsuzluğuna səbəb olur.
Xüsusilə ödəniş emalı və ya inventar idarəetməsi kimi kritik sistemlərdə bu, ciddi fəsadlar yarada bilər. Koordinasiya xidməti lease'in bitdiyini bilsə də, artıq proqramın birbaşa bank sistemi və ya verilənlər bazası ilə apardığı əməliyyatlara müdaxilə edə bilməz.
Həll yolu: Fencing token-lər
Məhz bu nöqtədə fencing token mexanizmi köməyə gəlir. Koordinasiya xidməti hər yeni lease verərkən monoton artan bir nömrə – token – də göndərir. Məsələn:
- Proqram A: Token = 101
- Proqram B: Token = 102
- Proqram C: Token = 103
Bundan sonra hər bir əməliyyat öz token-ni daşıyır. Resurs (məsələn, verilənlər bazası) ən son gördüyü ən yüksək token'i yadda saxlayır və daha aşağı token-li sorğuları rədd edir. Bu, köhnə sahibin təsadüfən yenidən yazmağının qarşısını alır.
Kim nəyi təmin edir?
Qeyd etmək vacibdir ki, fencing token-lər lease-ləri əvəz etmir, əksinə onları tamamlayır. Lease “hazırda resurs kimə məxsusdur?” sualına cavab verir, fencing token isə “bu sorğu ən son sahibdən gəlir?” sualına. İkisi birlikdə işlədikdə etibarlı paylaşdırılmış sistemlər qurmaq mümkün olur. Məhz bu yanaşma ZooKeeper və etcd kimi məşhur paylaşdırılmış koordinasiya sistemlərinin əsasını təşkil edir.