Redis'te en az kullanılan proxy'yi atomik olarak tahsis et
Sıralı küme ve kısa bir Lua betiği kullanarak bir proxy'nin tahsis sayısını çalışanlar arasında seçin ve artırın.
Birkaç çalışan Redis üzerinden bir havuzu paylaştığında, sıralı küme basit bir politika uygulayabilir: kayıtlı tahsisi en az olan uygun proxy'yi seçmek. Proxy tanımlayıcısını üye, tahsis sayısını da puan olarak saklayın.
İzin verilen genel isteklere hizmet eden bir havuz için ücretsiz proxy listesi, o havuzun uygunluk kurallarına göre değerlendirilecek uç nokta adayları sağlayabilir. Uygun üyeleri kararlaştırılmış başlangıç sayısıyla başlatın. Ardından seçimi ve artırmayı tek bir sunucu tarafı işlem yapın:
local chosen = redis.call('ZRANGE', KEYS[1], 0, 0)[1]
if not chosen then
return nil
end
redis.call('ZINCRBY', KEYS[1], 1, chosen)
return chosenSıralı kümenin anahtarını betiğin tek anahtar argümanı olarak Redis istemcinizin EVAL arayüzü üzerinden geçirin. Boş havuz, uygulamanın istek yapmadan ele alması gereken null sonucu üretir.
İki komut neden birleştirilir?
Ayrı okumalar ve artırmalar, iki çalışanın hiçbiri güncellemeden önce aynı minimumu görmesini sağlar. Redis bir Lua betiğini atomik olarak yürütür, bu yüzden başka bir çalışan bu betiğin okuması ile artırması arasına seçim sokamaz. Betiği kısa tutun çünkü yürütülmesi diğer Redis işlerini engeller.
ZRANGE en düşük puanı önce döndürür; eşit puanlar üye sırasına göre çözülür, rastgele değil. ZINCRBY seçilen üyenin puanını bir sonraki tahsis için bir artırır.
Puanın ne anlama geldiğini tanımlayın
Bu, ağ isteği sonradan başarısız olan tahsis de dahil olmak üzere tahsisleri sayar. Gecikmeyi, başarılı istekleri veya sürmekte olan işi ölçmez. Tek uygun üyeyi tekrar tekrar seçmek hâlâ mümkündür; betik onu özel olarak rezerve etmez.
Uygunluğu havuzun sağlık ve politika kurallarıyla koruyun. Bir üyeyi kaldırıp sonra geri yüklerseniz, geçmiş sayısının korunup korunmayacağına karar verin. Geri yüklenen bir proxy'yi sıfırdan başlatmak, yetişirken tahsisleri onun üzerinde toplayabilir.
En az eşzamanlılık politikası, tamamlanma ve terk edilmiş işlerin ele alınması dahil farklı bir yaşam döngüsü gerektirir. Bu birikimli sayacı o yaşam döngüsü olarak yorumlamayın.