Dapr ile Distributed Lock

Cevdet BALCIOĞLU
Dgpays Tech
Published in
2 min readApr 7, 2023

Redis veritabanı kullanarak bir distributed lock mekanizması kurabiliriz. Paylaşımlı bir veriye erişmek isteyen process, redis üzerinde “Lock” dediğimiz, ilgili veri ile ilgili bir lock objesi oluşturmaya çalışır. Burada key değeri olarak üzerine lock alınan obje ile ilgili bir değer, value değeri olarak ise lock alan thread’in numarası kullanılabilir.

Yukarıdaki örnek üzerinden gidecek olursak, Thread A içinde bir güncelleme işlemi yapılacak ise, ilk thread redis üzerinde “Lock_1” key değerinde bir lock objesi oluşturur. Sonrasında kullanıcı güncelleme işlemini gerçekleştirir. Ardından operasyon tamamlandığında, redis üzerindeki lock objesini kaldırmak için “Unlock” isteği yapar.

Redis üzerinde “Lock_1” key değerinde bir kayıt olduğu sürece, Bu kayıdı güncellemek veya silmek isteyen bir thread “Lock” aşamasında başarılı olamayacağı için, bu verinin lock’landığını anlayacak ve işlemi gerçekleştirmeden geriye response dönecektir.

https://docs.dapr.io/developing-applications/building-blocks/distributed-lock/ sayfasından esinlenilmiş ve resimler kullanılmıştır.

Dapr Redis Kurulum

config\dapr\components klasörü içerisinde yaml dosyalarının bulunduğu dizine lock mekanızması için “lockstore.yaml” dosyası oluşturulur.

apiVersion: dapr.io/v1alpha1
kind: Component
metadata:
name: lockstore
spec:
type: lock.redis
metadata:
- name: redisHost
value: localhost:6379
- name: ""
value: <PASSWORD>

Örnek Kullanım

Lock sonucunda dönen Success mi değil mi bilgisine göre işlemleri devam ettiriyoruz.

--

--