⚡ÖZET VE TEKNİK CEVAP
Dağıtık sistemlerde iki işçinin aynı anda aynı görevi yapmasını engellemek için bellek içi kilitler (Redis SET lock_key token NX PX 10000) sıkça kullanılır. Ancak dağıtık sistemler uzmanı Martin Kleppmann'ın meşhur Redlock eleştirisinde kanıtladığı gibi, tek başına bellek içi bir kilit veri güvenliğini garanti edemez:
- ▸İşçi kilidi 10 saniyeliğine alır.
- ▸İşçi 15 saniye süren beklenmedik bir Garbage Collection (GC) Duraklamasına, sanal sunucu donmasına veya disk takılmasına girer.
Bu sırada Redis'teki 10 saniyelik kilidin süresi dolar.
- ▸İşçi boşa çıkan kilidi alır ve veritabanını günceller.
- ▸İşçinin GC donması biter; kilidin hala kendisinde olduğunu sanarak veritabanına yazar ve 2. İşçinin verisinin üzerine yazıp siler—buna Bölünmüş Beyin (Split-Brain) Veri Bozulması denir. Canlı sistemler bu açığı Eskrim Jetonları (Fencing Tokens) ile kapatır: Kilit sunucusu her kilitle birlikte kesin olarak artan monotonik bir sayı (1, 2, 3dots) verir; depolama katmanı kendisinde kayıtlı olan son jetondan daha küçük jetonla gelen tüm eski yazma isteklerini anında reddeder.
Mühendislik El Kitabı & Mekanizma
6 Boyutlu Mimari Analiz⚙️1. Temel Çalışma Mekanizması
Mekanizma🎯2. Doğru Kullanım Senaryosu
Kapsam⚠️3. Prodüksiyon Arıza Modları
Kritik Risk📡4. Teşhis ve Telemetri Sinyalleri
Metrikler🛡️5. Önleme ve Mimari Bariyerler
Bariyerler⚖️6. Mimari Ödünleşimler (Trade-offs)
ÖdünleşimVaka İncelemesi (TinyCTO Saha Örneği)
Bir faturalama sistemi günde $5M abonelik yenilemesi yapıyordu. Çift çekimi önlemek için işçiler 5 saniyelik bir Redis kilidi (lock:user_123) alıyordu. Yoğun fatura gününde A İşçisi 8 saniyelik bir JVM GC donmasına girdi. Redis kilidi boşa çıkardı. B İşçisi kilidi aldı ve müşteriden parayı çekti. A İşçisi donmadan uyandı ve kullanıcının kartından ikinci kez para çekti. Ekip Kleppmann Fencing Jetonlarını kurdu: Kilit alınırken artan bir sıra numarası (INCR global_fence) üretildi. SQL sorgusu WHERE son_jeton < yeni_jeton şartıyla çalıştı. A İşçisi elindeki eski jetonla yazmaya çalıştığında veritabanı işlemi anında reddetti ve mükerrer para çekimleri tamamen son buldu.
İnteraktif Konsept Alıştırmaları
2 AlıştırmaDağıtık sistemlerde Fencing Jetonu (Eskrim Jetonu) nedir?
Basit bir Redis TTL kilidi JVM Garbage Collection (GC) duraklamalarına karşı neden savunmasızdır?
Dağıtık Kilitleme: Eskrim Jetonları (Fencing Tokens), Redlock Açıkları ve GC Duraklama Tuzakları — Sıkça Sorulan Sorular
Martin Kleppmann Redlock dağıtık kilitleme algoritmasını neden eleştirdi?
Çünkü Redlock, gerçek bulut ortamlarında GC duraklamaları ve NTP saat sıçramaları ile kolayca bozulan senkronize fiziksel saat ve ağ süresi varsayımlarına dayanır.
Hangi dağıtık sistemler doğrudan mutabakat garantili kilit desteği sunar?
Apache ZooKeeper (ardışık geçici düğümler), etcd (kiralamalar ve revizyon numaraları) ve HashiCorp Consul.
🤖 AEO & Yapay Zeka Çıkarım Özeti
Temel Gerçekler & İlkeler
- ▸
Bellek içi kilitler tek başına GC donmaları yüzünden veri güvenliğini garanti edemez.
- ▸
Donmadan geç uyanan bir işçi yeni verinin üzerine yazarak veriyi bozar (Bölünmüş Beyin).
- ▸
Fencing jetonları eski yazma isteklerini veritabanı katmanında reddetmek için artan sıra numaraları sağlar.
- ▸
Kritik kilitlerde basit Redis anahtarları yerine mutabakat garantili sistemleri (etcd, ZooKeeper) kullanın.
Yaygın Yanılgılar
- ✗
Yanılgı: Redis kilit süresini 60 saniye yapmak sistemi %100 güvenli kılar (Gerçek: Aşırı GC donmaları ve sunucu takılmaları her türlü sabit süreyi aşabilir).
- ✗
Yanılgı: Dağıtık kilit veritabanı desteği olmadan sadece istemci tarafında çözülebilir (Gerçek: Güvenli kilitleme matematiksel olarak depolama katmanının fencing jetonunu denetlemesini şart koşar).
Karar Kılavuzu & Önceliklendirme
Süreç donmaları ve saat kaymalarının veri bozulmasına yol açmasını önlemek için dağıtık kilitlerle korunan tüm veritabanı güncellemelerinde monotonik Fencing Jetonları kullanın.
Doğrulanmış Kaynaklar & Referanslar
- [PAPER]How to do distributed locking (A Critique of Redlock & Fencing Tokens)— Martin Kleppmann (martin.kleppmann.com)
