Alegeri aleatorii, treceri amestecate și puncte finale de proxy repetate
Alegeți între alegeri aleatorii independente, o trecere amestecată și o politică fără repetare imediată, în loc să tratați un punct final repetat ca un rotator defect.
Proxy B, din nou proxy B, apoi proxy A. Jurnalul dvs. pare suspect, dar un selector aleatoriu are voie să facă exact asta.
Alegerea din aceeași listă la fiecare cerere permite repetări. Cu două puncte finale la fel de probabile, următoarea selecție independentă are o șansă din două să coincidă cu cea anterioară. O secvență scurtă cu repetări nu este dovada că selectorul a ignorat lista.
Alegeți comportamentul de care aveți nevoie cu adevărat
| Cerință | Regulă de selecție |
|---|---|
| Fiecare alegere este independentă | Alegeți din lista eligibilă de fiecare dată |
| Folosiți fiecare punct final o dată înainte de a reîncepe | Amestecați o copie, consumați-o, apoi începeți o altă trecere |
| Evitați punctul final imediat anterior | Excludeți acel punct final înainte de a alege |
Pentru ultima politică, tratați explicit cazul cu un singur punct final:
candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)
Acest fragment presupune că random este importat și lista de puncte finale este deja validată. Un pool public poate începe cu lista gratuită de proxy atunci când protocoalele sale se potrivesc clientului final; această regulă de selecție controlează în continuare repetările. Dacă să așteptați, să reutilizați singurul punct final sau să vă opriți este o politică a aplicației. O buclă infinită care așteaptă o altă valoare aleatorie nu poate rezolva o listă care conține o singură opțiune distinctă.
Într-un dispecer concurent, selectarea și înregistrarea punctului final anterior necesită, de asemenea, proprietate coordonată. Altfel, doi lucrători pot exclude amândoi valoarea veche și pot alege aceeași valoare următoare.
În cele din urmă, această regulă privește identitatea punctului final. Două puncte finale diferite pot duce la o singură ieșire publică, iar un punct final al unui furnizor poate duce la mai multe ieșiri. Înregistrați-le separat înainte de a decide că rotația este defectă.