Redis میں سب سے کم استعمال شدہ پراکسی کو جوہری طور پر مختص کریں
ترتیب شدہ سیٹ اور مختصر Lua اسکرپٹ استعمال کرکے کارکنوں کے درمیان پراکسی کی مختص تعداد منتخب کریں اور بڑھائیں۔
جب کئی کارکن Redis کے ذریعے ایک پول شیئر کرتے ہیں، تو ترتیب شدہ سیٹ ایک سادہ پالیسی نافذ کرسکتا ہے: سب سے کم درج مختص والی اہل پراکسی منتخب کرنا۔ پراکسی کی شناخت کو رکن اور اس کی مختص تعداد کو اسکور کے طور پر محفوظ کریں۔
اجازت یافتہ عوامی درخواستوں کی خدمت کرنے والے پول کے لیے، مفت پراکسی فہرست اس پول کے اہلیت کے قواعد کے تحت جانچنے کے لیے اینڈ پوائنٹ امیدوار فراہم کرسکتی ہے۔ اہل ارکان کو متفقہ ابتدائی تعداد سے شروع کریں۔ پھر انتخاب اور اضافے کو ایک ہی سرور طرفہ عمل بنائیں:
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 chosenترتیب شدہ سیٹ کی کلید کو اسکرپٹ کی واحد کلید دلیل کے طور پر اپنے Redis کلائنٹ کے EVAL انٹرفیس سے بھیجیں۔ خالی پول null نتیجہ دیتا ہے جسے ایپلیکیشن کو درخواست کیے بغیر سنبھالنا ہوگا۔
دونوں کمانڈز کیوں یکجا کریں؟
الگ پڑھائی اور اضافے دو کارکنوں کو کسی کے بھی اپ ڈیٹ کرنے سے پہلے وہی کم از کم دیکھنے دیتے ہیں۔ Redis Lua اسکرپٹ کو جوہری طور پر چلاتا ہے، اس لیے دوسرا کارکن اس اسکرپٹ کی پڑھائی اور اضافے کے درمیان انتخاب نہیں ڈال سکتا۔ اسکرپٹ مختصر رکھیں کیونکہ اس کا نفاذ دیگر Redis کام روکتا ہے۔
ZRANGE سب سے کم اسکور پہلے واپس کرتا ہے؛ برابر اسکور ارکان کی ترتیب سے طے ہوتے ہیں، تصادفی طور پر نہیں۔ ZINCRBY اگلی مختص کے لیے منتخب رکن کا اسکور ایک بڑھا دیتا ہے۔
اسکور کا مطلب متعین کریں
یہ مختص گنتا ہے، بشمول وہ مختص جس کی نیٹ ورک درخواست بعد میں ناکام ہوتی ہے۔ یہ تاخیر، کامیاب درخواستوں یا جاری کام کی پیمائش نہیں کرتا۔ واحد اہل رکن کو بار بار منتخب کرنا اب بھی ممکن ہے؛ اسکرپٹ اسے خصوصی طور پر محفوظ نہیں رکھتی۔
پول کے صحت اور پالیسی قواعد سے اہلیت برقرار رکھیں۔ اگر کوئی رکن ہٹا کر بعد میں بحال کریں، تو طے کریں کہ اس کی تاریخی تعداد برقرار رکھنی چاہیے یا نہیں۔ بحال شدہ پراکسی کو صفر سے شروع کرنا اس کے پورا ہونے کے دوران مختص اس پر مرکوز کرسکتا ہے۔
کم از کم ہم وقتی پالیسی کے لیے مختلف زندگی کا دورانیہ درکار ہے، جس میں تکمیل اور ترک شدہ کاموں کی دیکھ بھال شامل ہے۔ اس مجموعی گنتی کو وہ دورانیہ نہ سمجھیں۔