Slumpmässiga val, blandade genomgångar och upprepade proxy-slutpunkter
Välj mellan oberoende slumpmässiga val, en blandad genomgång och en policy utan omedelbar upprepning, i stället för att betrakta en upprepad slutpunkt som en trasig rotator.
Proxy B, proxy B igen och sedan proxy A. Din logg ser misstänkt ut, men en slumpmässig väljare får göra precis det.
Att välja från samma lista vid varje begäran tillåter upprepningar. Med två lika sannolika slutpunkter har nästa oberoende val en chans på en av två att matcha den föregående. En kort sekvens med upprepningar är inte bevis för att väljaren ignorerade listan.
Välj det beteende du faktiskt behöver
| Krav | Valregel |
|---|---|
| Varje val är oberoende | Välj från den kvalificerade listan varje gång |
| Använd varje slutpunkt en gång innan du börjar om | Blanda en kopia, förbruka den och börja sedan en ny genomgång |
| Undvik den omedelbart föregående slutpunkten | Uteslut den slutpunkten innan du väljer |
För den sista policyn, hantera fallet med en enda slutpunkt uttryckligen:
candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)
Detta fragment förutsätter att random är importerat och att listan över slutpunkter redan är validerad. En offentlig pool kan börja med den kostnadsfria proxylistan när dess protokoll passar den slutliga klienten; denna valregel styr fortfarande upprepningar. Om man ska vänta, återanvända den enda slutpunkten eller sluta är en policy för programmet. En oändlig slinga som väntar på ett annat slumpvärde kan inte lösa en lista som bara innehåller ett enda distinkt val.
I en samtidig dispatcher kräver val och registrering av föregående slutpunkt också koordinerat ägande. Annars kan två arbetare båda utesluta det gamla värdet och välja samma nästa värde.
Slutligen handlar denna regel om slutpunktens identitet. Två olika slutpunkter kan leda till en och samma offentliga utgång, och en leverantörs slutpunkt kan leda till flera utgångar. Registrera dem separat innan du avgör att rotationen är trasig.