Tilfeldige valg, blandede gjennomløp og gjentatte proxy-endepunkter
Velg mellom uavhengige tilfeldige valg, et blandet gjennomløp og en policy uten umiddelbar gjentakelse, i stedet for å betrakte et gjentatt endepunkt som en ødelagt rotator.
Proxy B, proxy B igjen, deretter proxy A. Loggen din ser mistenkelig ut, men en tilfeldig velger har lov til å gjøre akkurat det.
Å velge fra samme liste ved hver forespørsel tillater gjentakelser. Med to like sannsynlige endepunkter har neste uavhengige valg én av to sjanse for å matche det forrige. En kort serie med gjentakelser er ikke bevis for at velgeren ignorerte listen.
Velg atferden du faktisk trenger
| Krav | Valgregel |
|---|---|
| Hvert valg er uavhengig | Velg fra den kvalifiserte listen hver gang |
| Bruk hvert endepunkt én gang før du starter på nytt | Bland en kopi, bruk den opp, og start deretter et nytt gjennomløp |
| Unngå det umiddelbart forrige endepunktet | Utelukk det endepunktet før du velger |
For den siste policyen, håndter tilfellet med ett endepunkt eksplisitt:
candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)
Dette utdraget forutsetter at random er importert og at listen over endepunkter allerede er validert. En offentlig pool kan begynne med den gratis proxy-listen når protokollene passer til den endelige klienten; denne valgregelen styrer fortsatt gjentakelser. Om man skal vente, gjenbruke det eneste endepunktet eller stoppe, er en applikasjonspolicy. En endeløs løkke som venter på en annen tilfeldig verdi kan ikke løse en liste som bare inneholder ett distinkt valg.
I en samtidig dispatcher krever valg og registrering av forrige endepunkt også koordinert eierskap. Ellers kan to arbeidere begge utelukke den gamle verdien og velge den samme neste verdien.
Til slutt gjelder denne regelen endepunktets identitet. To forskjellige endepunkter kan føre til én offentlig utgang, og ett leverandørendepunkt kan føre til flere utganger. Registrer dem separat før du bestemmer at rotasjonen er ødelagt.