Open ismkdc opened 4 months ago
İyi bir noktaya temas ettin @ismkdc Tekil bir solution üzerine çalışırken bu bahsettiğin Race Condition durumu fark edilmeyebilir de. Dolayısıyla mücadeye yeni bir cephe de açmak yerinde olabilir. Yük testine tabii tutmak ve bahsettiğin Race Condition durumunu tespit etmek ;-) Bunun üzerine de çalışalım. Grup kullanımı için de Dev branch üstünde geliştirmelere devam edilebilir. PR sonrası main'e merge ederiz ;) Çok teşekkürler desteğin için.
Selamlar, Redis stream'i consume ederken yükümüz arttıkça birden fazla consumer kullanmaya ihtiyacımız olabilir. Eğer hali hazırdaki RedisService üzerindeki Pop metodundan ilerlersek karşımıza bazı race condition problemleri çıkabilir. Pop metodu sırasıyla şöyle çalışıyor: 1-)Streamden mesajı oku, 2-)Mesajı streamden sil, 3-)Okuduğun mesajı return et.
Multi-thread bir dünyada, daha da önemlisi multi-instance bir dünyada, bu kullanım aynı anda birden fazla parçanın aynı mesajı okuyup işlemesine yol açabilir. Bu durum da sistemin kararlılığına zarar verebilir.
Bu problemi çözmek için redis stream'deki consumer group özelliğinden yararlanabiliriz. Consumer group özelliği, aynı consumer grubu paylaşan consumerların, bir mesajın aynı anda tek bir consumer'a iletileceğini garanti ediyor. Konu hk daha fazla bilgi: https://redis.io/docs/latest/develop/data-types/streams/#consumer-groups
Ayrıca, bu özelliği kullanan bir adet PoC geliştirdim onu da aşağıya bırakıyorum :) https://gist.github.com/ismkdc/1eef375d46995fa7a793a5584f2f3a89