Losowe wybory, przetasowane przebiegi i powtarzające się punkty końcowe proxy
Wybierz między niezależnymi losowymi wyborami, przetasowanym przebiegiem a polityką bez natychmiastowego powtórzenia, zamiast traktować powtórzony punkt końcowy jako zepsuty rotator.
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
| Wymaganie | Reguła wyboru |
|---|---|
| Każdy wybór jest niezależny | Za każdym razem wybieraj z odpowiedniej listy |
| Użyj każdego punktu końcowego raz, zanim zaczniesz od nowa | Przetasuj kopię, zużyj ją, a potem rozpocznij nowy przebieg |
| Unikaj bezpośrednio poprzedniego punktu końcowego | Wyklucz 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.