DistributedChallenge
DistributedChallenge copied to clipboard
Redis Stream'in Multiple Consumer Desteği Hk.
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