यादृच्छिक चयन, मिश्रित पास और बार-बार आने वाले प्रॉक्सी एंडपॉइंट
बार-बार आने वाले एंडपॉइंट को खराब रोटेटर मानने के बजाय स्वतंत्र यादृच्छिक चयन, मिश्रित पास और तत्काल पुनरावृत्ति से बचने की नीति में से चुनें।
प्रॉक्सी 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 आयातित है और एंडपॉइंट की सूची पहले ही सत्यापित हो चुकी है। एक सार्वजनिक पूल मुफ़्त प्रॉक्सी सूची से शुरू कर सकता है जब उसके प्रोटोकॉल अंतिम क्लाइंट के अनुकूल हों; यह चयन नियम अभी भी पुनरावृत्तियों को नियंत्रित करता है। इंतज़ार करना, एकमात्र एंडपॉइंट का फिर से उपयोग करना या रुकना एप्लिकेशन की नीति है। भिन्न यादृच्छिक मान की प्रतीक्षा करने वाला अनंत लूप केवल एक अलग विकल्प वाली सूची को हल नहीं कर सकता।
समवर्ती डिस्पैचर में, पिछले एंडपॉइंट को चुनने और दर्ज करने के लिए समन्वित स्वामित्व भी आवश्यक है। अन्यथा दो कर्मचारी दोनों पुराने मान को बाहर रखकर वही अगला मान चुन सकते हैं।
अंत में, यह नियम एंडपॉइंट की पहचान से संबंधित है। दो अलग-अलग एंडपॉइंट एक ही सार्वजनिक एग्ज़िट तक ले जा सकते हैं, और एक प्रदाता एंडपॉइंट कई एग्ज़िट तक ले जा सकता है। रोटेशन को खराब मानने से पहले इन्हें अलग-अलग दर्ज करें।