Proxy B, znovu proxy B, potom proxy A. Váš protokol vypadá podezřele, ale náhodný vybírač smí dělat přesně tohle.

Výběr ze stejného seznamu při každém požadavku umožňuje opakování. Při dvou stejně pravděpodobných koncových bodech má další nezávislá volba šanci jedna ku dvěma, že se shodne s předchozí. Krátká série s opakováními není důkazem, že vybírač seznam ignoroval.

Vyberte chování, které skutečně potřebujete

PožadavekPravidlo výběru
Každá volba je nezávisláPokaždé vybírejte z vhodného seznamu
Každý koncový bod použijte jednou, než začnete znovuZamíchejte kopii, spotřebujte ji a potom začněte další průchod
Vyhněte se bezprostředně předchozímu koncovému boduPřed volbou tento koncový bod vylučte

U poslední politiky výslovně ošetřete případ jediného koncového bodu:

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

Tento úryvek předpokládá, že random je importován a seznam koncových bodů je již ověřen. Veřejný fond může začít s bezplatným seznamem proxy, když jeho protokoly odpovídají budoucímu klientovi; toto pravidlo výběru stále řídí opakování. Zda čekat, znovu použít jediný koncový bod, nebo skončit, je politika aplikace. Nekonečná smyčka čekající na jinou náhodnou hodnotu nemůže vyřešit seznam obsahující jen jednu odlišnou volbu.

V souběžném dispečeru vyžaduje výběr a zaznamenání předchozího koncového bodu také koordinované vlastnictví. Jinak mohou dva pracovníci oba vyloučit starou hodnotu a vybrat stejnou další hodnotu.

Nakonec se toto pravidlo týká identity koncového bodu. Dva různé koncové body mohou vést k jednomu veřejnému výstupu a jeden koncový bod poskytovatele může vést k několika výstupům. Zaznamenejte je odděleně, než rozhodnete, že rotace je rozbitá.

Související články