4 puan yazan GN⁺ 2024-10-21 | 1 yorum | WhatsApp'ta paylaş

Dağıtık kilitlemeyi uygulamak

  • Redis web sitesinde Redlock algoritması keşfediliyor ve bu algoritmanın Redis üzerinde hataya dayanıklı dağıtık kilitleme uyguladığı iddia ediliyor.
  • Redlock için birden fazla bağımsız uygulama zaten mevcut ve bu algoritmaya güvenen kişiler olabileceği için yazar notlarını paylaşmaya karar veriyor.
  • Redis, geçici ve hızla değişen verileri sunucular arasında paylaşmak için faydalı olsa da, güçlü tutarlılık ve kalıcılık gerektiren veri yönetimi alanına genişletilmesi endişe verici.

Kilidin amacı

  • Kilit, birden fazla düğüm arasından yalnızca birinin belirli bir işi yapmasını garanti etmeye yarar.
  • Kilit verimlilik için kullanılıyorsa, tek bir Redis instance'ı kullanmak daha iyi olabilir.
  • Kilit doğruluk için kullanılıyorsa, Redlock uygun değildir.

Kaynağı kilitle korumak

  • Dağıtık sistemlerdeki kilitler, çok iş parçacıklı uygulamalardaki mutex'ten farklıdır.
  • Bir istemci dosyayı okuyup değiştirip yeniden yazarken, başka bir istemcinin aynı işlemi yapmasını engeller.

Fencing ile güvenli kilit uygulamak

  • Fencing token'ları yazma isteklerine dahil ederek güvenli bir kilit uygulanabilir.
  • Redlock, fencing token'ı üretme özelliğine sahip olmadığı için güvenli değildir.

Uzlaşma için zamanı kullanmak

  • Redlock, asenkron modeldeki algoritmaların aksine zamanla ilgili birçok varsayıma dayanır.
  • Sistem saati anormal çalışırsa, anahtarın süresi beklenenden daha erken ya da daha geç dolabilir.

Redlock'un zaman varsayımlarını bozmak

  • Redlock, senkron sistem modelini varsayar ve yalnızca ağ gecikmesi, süreç duraklaması ve saat hataları sınırlı olduğunda doğru çalışır.
  • GitHub'daki 90 saniyelik paket gecikmesi olayı gibi vakalar Redlock'un güvenliğini tehdit edebilir.

Sonuç

  • Redlock, verimlilik optimizasyonu amaçlı kilitler için gereksiz derecede ağır, doğruluk gerektiren durumlar içinse yeterince güvenli değildir.
  • Doğruluk için kilide ihtiyaç varsa, ZooKeeper gibi uygun bir uzlaşma sistemi kullanmak daha iyidir.

GN⁺ özeti

  • Redlock algoritması, dağıtık sistemlerde kilit uygulaması konusunda önemli bir tartışma sunar.
  • Bu yazı, dağıtık sistemlerde zaman varsayımları ve güvenlik sorunlarını vurgulayarak doğru kilit uygulamasının önemini açıklar.
  • ZooKeeper gibi alternatif sistemleri önerir ve dağıtık sistemlerin karmaşıklığını anlamaya yardımcı olur.

1 yorum

 
GN⁺ 2024-10-21
Hacker News görüşleri
  • Temporal kullanarak dağıtık kilit uygulama deneyimim oldu ve şu ana kadar iyi çalışıyor. Temporal'in özellikleri sayesinde dağıtık kilidin uygulanması basit
  • Blog yorumlarında algoritmanın önemli bir noktasının kaçırıldığı yönünde görüş bildirdim; bu nedenle algoritmanın zayıf reddetme noktasına dayandığını belirttim
  • Modern bilgisayarlar ve API'lerle yaklaşık zaman beklemeleri yapılabiliyor; GC duraklamaları sınırlı ve monoton saatler çalışıyor. Bu, kabul edilebilir bir varsayım
  • Otomatik serbest bırakma mekanizmasını eleştirmekle algoritmanın hedefini ve sistem modelini eleştirmek farklı meseleler
  • Redlock çeşitli kullanım senaryolarında başarıyla kullanıldı ve zaman aşımı uygun ayarlanırsa yarış koşulu oluşturmak zor. Çok küçük zaman aşımı ayarlamak bir tasarım hatası
  • Düşük seviye ve algoritma bilgimi güncelliyorum; eğlencesine bir şeyler yapmak istiyorum ama kaynakların çoğu ya oyuncak seviyesinde ya da çok karmaşık
  • PostgreSQL kullanarak dağıtık kilit uyguluyorum; bir transaction başlatıp advisory lock alıyor ve transaction serbest bırakılana kadar kilit durumunu koruyorum
  • Veritabanı bağlantı durumunu kontrol etmediğimi fark ettim; veritabanıyla ilgili olmayan işlerde kilidi kaybetmiş olabilirim
  • Deno ve Deno KV kullanarak dağıtık kilit uyguladım; FoundationDB tabanlı
  • Redis'i inceledim ama doğruluğu çözmek için PostgreSQL kullanıp istekleri SET işlemine dönüştürdüm
  • Birçok mühendis doğruluk sorunlarını önemsemiyor ve mesajların kaybolabileceği ya da sırasının bozulabileceği sınır durumlar var
  • Kilitlere zaman aşımı koymak iyi bir fikir; istemci çökerse OS veya supervisor kilidi serbest bırakır
  • Kilide gerek olmayan durumlarda veri bütünlüğünü korumak için sürüm token'ları kullanılabilir. UUID gibi benzersiz değerler kullanılabilir