Buradasın
Redis Kullanarak Asenkron Yapılarda Laklama ve Dağıtılmış Kilit İşlemleri
youtube.com/watch?v=g-H1cdnpcfcYapay zekadan makale özeti
- Kısa
- Ayrıntılı
- Bu video, bir konuşmacının Redis veritabanı kullanarak asenkron yapılarda laklama (lock) objeleri oluşturma ve dağıtılmış kilit işlemleri anlattığı bir eğitim içeriğidir.
- Video, lak objelerinin ne olduğunu açıklayarak başlıyor ve ardından Redis kullanarak asenkron uygulamalarda semifor kullanmadan nasıl laklama yapılacağını iki farklı örnek üzerinden gösteriyor. İlk bölümde sekiz paralel thread'in aynı metoda erişimini engelleme ve dört farklı task'ın belirli bir sırayla çalışmasını sağlama işlemleri anlatılırken, ikinci bölümde Task1, Task2 ve Task3 gibi paralel çalışan taskların nasıl dağıtılmış kilit objesi kullanarak birbirlerini bekleyebileceği gösteriliyor.
- Videoda ayrıca Redis'teki key'i işlem bittikten sonra nasıl temizleyebileceğiniz ve bu sayede diğer taskların hemen devam edebileceği de kod örnekleriyle açıklanmaktadır. Her iki örnek de kod örnekleri ve terminal üzerinden çalıştırma ile desteklenmektedir.
- 00:09Lak Objeleri ve Amacı
- Bu makalede standart bir lak objesinden değil, asenkron yapıda çalışan metodları laklayan objelerden bahsedilecek.
- Lak objeleri, ilgili bir metoda herhangi bir thread veya task girdi ve işletmeye başladığı zaman aynı tipte thread veya taskın projenin herhangi bir başka yerinden yine ilgili metoda aynı anda erişmesini amaç engellemek için kullanılır.
- Lak objeleri, metot içerisinde threadlerin senkron olarak çalışmasını sağlamak için kullanılır, örneğin global bir değişken üzerinde çalışırken aynı metod üzerinde başka bir threadın işlem yapmasını engellemek için.
- 01:41Redis ile Laklama Örneği
- Asenkron yapılarda lak objeleri ile ilgili örnek olarak Redis kullanılarak bir laklama işlemi gösterilecek.
- İlk örnekte, bir metoda erişirken diğer threadlerin aynı metoda erişememesini göstermek için paralel olarak sekiz tane thread başlatılacak.
- Her thread çalışırken Redis'e black işlemi yapılacak ve lak objesi ilgili key ve value ile atılacak, eğer yoksa o zaman key ile value ilgili Redis'e atılacak ve true değerini dönecek.
- 03:41İlk Örnek Uygulaması
- İlk örnekte sekiz tane metoddan biri ilk gelecek ve lak objesi true olacak çünkü Redis boş, diğer tasklar ise Redis'e gittiğinde false dönecek ve "kitlendi" mesajı ekrana basacaklar.
- Amac, asenkron yapılarda paralel threadlerde çalışırken bir tanesi Redis'ten bir ilgili metodu çalıştırırken diğerlerine giremediğini Redis üzerinden göstermek.
- Terminalden Redis ayağa kaldırıldıktan sonra uygulama çalıştırıldığında, yedi task "kitlendi" yazdı ve diğer tasklar Redis'e gittiğinde aynı keye bağlı olarak hiçbir şey görmedi çünkü kitli oluyor.
- 05:53İkinci Örnek Uygulaması
- İkinci örnekte dört tane task bulunuyor ve bu tasklar paralel olarak çalışılması sağlanıp hepsinin tamamlanması bekleniyor.
- Her task kendine bağımsız lak objelerini Redis tarafında oluşturmuş olacak, önceki örnekte herkesin aynı lak objesi olduğu için o metoda giremiyorlardı.
- Bu örnekte, Redis'te ilgili bir kayıt varsa laklamış olacak, yoksa da ilgili kaydı atacak ve laklayacak.
- 07:47İkinci Örnek Detayları
- İkinci örnekte, önceki örnekte diğerlerinin hiç giremediği gibi, bu örnekte de bazı tasklar bekleyecek.
- Task iki için Redis'te herhangi bir key yoksa, laklama işlemi true dönecek ve task iki bir, task iki iki şeklinde saymaya başlayacak.
- Task senkron ve task üç için, bir dakikanın sonunda yazmaya devam edecekler çünkü task senkron laklandığı için beklediği için task üç'e geçmeyecek.
- 10:42Asenkron Taskların Çalışma Şekli
- Task bir ve task iki senkron olarak çalışırken, task iki eksi iki çalışamıyor ve bir dakika dolduğunda Redis'teki key time için yok olacak.
- Redis'teki key time için yok olunca lak objesi true dönecek ve task iki iki ve task üç ekrana yazılacak.
- Task bir ve task üç başlangıçları senkron fakat çalışma şekilleri asenkron olarak devam ediyor.
- 12:53Taskların Başlangıç Sırası ve Çalışma Mantığı
- Taskların başlangıç şekilleri Net Core üzerinde tanımladığınız şekle göre başlıyor.
- Task bir ve task iki senkron olarak başlayıp çalıştılar, task yirmiiki lak objesine takıldığı için bekledi başlamadı.
- Bir dakikanın sonunda diğer ikisi de başladı ve Redis kullanarak distribütüt bir lak objesi yaratıldı.
- 14:20Redis Timeout ve Alternatif Çözüm
- Redis'in timeout olma süresine göre işlem bittiğinde, ilgili key'i Redis'ten silebilirsiniz.
- Key silindiğinde lak objesi ortadan kalkar ve bir dakika time out olmasını beklemeye gerek kalmaz.
- Task iki için işlem bittiği an, task senkron ve task yirmiiki çalışmaya devam edebilir.
- 17:24Sonuç ve Öneriler
- Asenkron yapılarda distribüdü d-disk kullanarak birbirlerini bekleyebilme ve lak işleminden sonra Redis timemate uğramadan kendini kaldırma yöntemleri gösterildi.
- Paralel çalışan tasklar için, file sistemi yavaşlatma sadece bir task için arkada işlemin bitmesini bekletir.
- Timeout beklemek yerine, işlem bittikten sonra Redis'teki key'i temizlemek daha çok kullanılır.