اختيارات عشوائية ودفعات مخلوطة ونقاط نهاية وكيل متكررة
اختر بين اختيارات عشوائية مستقلة ودفعة مخلوطة وسياسة تمنع التكرار الفوري، بدلاً من اعتبار نقطة النهاية المتكررة موزِّعاً معطوباً.
الوكيل B، ثم الوكيل B مرة أخرى، ثم الوكيل A. تبدو سجلاتك مريبة، لكن المنتقي العشوائي مسموح له أن يفعل ذلك بالضبط.
الاختيار من القائمة نفسها في كل طلب يسمح بالتكرار. وعند وجود نقطتي نهاية متساويتين في الاحتمال، فإن الاختيار المستقل التالي لديه فرصة واحد إلى اثنين لمطابقة الاختيار السابق. وسلسلة قصيرة تحتوي على تكرارات ليست دليلاً على أن المنتقي تجاهل القائمة.
اختر السلوك الذي تحتاجه فعلاً
| المتطلب | قاعدة الاختيار |
|---|---|
| كل اختيار مستقل | اختر من القائمة المؤهلة في كل مرة |
| استخدم كل نقطة نهاية مرة واحدة قبل البدء من جديد | اخلط نسخة، استهلكها، ثم ابدأ دفعة أخرى |
| تجنب نقطة النهاية السابقة مباشرة | استبعد تلك النقطة قبل الاختيار |
بالنسبة للسياسة الأخيرة، تعامل مع حالة نقطة النهاية الواحدة صراحةً:
candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)
تفترض هذه القطعة أن random مستورد وأن قائمة نقاط النهاية قد تم التحقق منها مسبقاً. ويمكن لمجموعة عامة أن تبدأ بـقائمة الوكلاء المجانية عندما تتوافق بروتوكولاتها مع العميل النهائي؛ ولا تزال قاعدة الاختيار هذه تتحكم في التكرار. أما الانتظار أو إعادة استخدام نقطة النهاية الوحيدة أو التوقف فهي سياسة تطبيق. والحلقة اللانهائية التي تنتظر قيمة عشوائية مختلفة لا يمكنها حل قائمة تحتوي على خيار واحد مميز فقط.
في الموزِّع المتزامن، يحتاج اختيار نقطة النهاية السابقة وتسجيلها أيضاً إلى ملكية منسقة. وإلا فقد يستبعد عاملان القيمة القديمة ويختاران القيمة التالية نفسها.
أخيراً، تتعلق هذه القاعدة بهوية نقطة النهاية. فنقطتا نهاية مختلفتان قد تؤديان إلى مخرج عام واحد، وقد تؤدي نقطة نهاية مزود واحدة إلى عدة مخارج. سجّل ذلك بشكل منفصل قبل أن تقرر أن التدوير معطوب.