Proxy B, znowu proxy B, potem proxy A. Twój dziennik wygląda podejrzanie, ale losowy wybierak może robić dokładnie to.

Wybieranie z tej samej listy przy każdym żądaniu pozwala na powtórzenia. Przy dwóch równie prawdopodobnych punktach końcowych następny niezależny wybór ma szansę jeden do dwóch na zgodność z poprzednim. Krótka sekwencja z powtórzeniami nie dowodzi, że wybierak zignorował listę.

Wybierz zachowanie, którego naprawdę potrzebujesz

WymaganieReguła wyboru
Każdy wybór jest niezależnyZa każdym razem wybieraj z odpowiedniej listy
Użyj każdego punktu końcowego raz, zanim zaczniesz od nowaPrzetasuj kopię, zużyj ją, a potem rozpocznij nowy przebieg
Unikaj bezpośrednio poprzedniego punktu końcowegoWyklucz ten punkt końcowy przed wyborem

W przypadku ostatniej polityki obsłuż jawnie przypadek jednego punktu końcowego:

candidates = [endpoint for endpoint in eligible if endpoint != previous]
if not candidates:
    raise RuntimeError("No different eligible proxy is available")
selected = random.choice(candidates)

Ten fragment zakłada, że random jest zaimportowany, a lista punktów końcowych została już zweryfikowana. Publiczna pula może zacząć od darmowej listy proxy, gdy jej protokoły pasują do końcowego klienta; ta reguła wyboru nadal kontroluje powtórzenia. Czy czekać, ponownie użyć jedynego punktu końcowego, czy zatrzymać się, jest polityką aplikacji. Nieskończona pętla czekająca na inną losową wartość nie rozwiąże listy zawierającej tylko jeden odrębny wybór.

W współbieżnym dyspozytorze wybór i zapis poprzedniego punktu końcowego również wymagają skoordynowanej własności. W przeciwnym razie dwóch pracowników może oboje wykluczyć starą wartość i wybrać tę samą następną wartość.

Wreszcie ta reguła dotyczy tożsamości punktu końcowego. Dwa różne punkty końcowe mogą prowadzić do jednego publicznego wyjścia, a jeden punkt końcowy dostawcy może prowadzić do kilku wyjść. Zapisz je osobno, zanim uznasz, że rotacja jest zepsuta.

Powiązane artykuły