Прокси B, отново прокси B, после прокси A. Дневникът ви изглежда подозрителен, но случаен избирач има право да прави точно това.

Избирането от същия списък при всяка заявка допуска повторения. При две еднакво вероятни крайни точки следващият независим избор има шанс едно към две да съвпадне с предишния. Кратка последователност с повторения не е доказателство, че избирачът е пренебрегнал списъка.

Изберете поведението, което наистина ви трябва

ИзискванеПравило за избор
Всеки избор е независимИзбирайте от допустимия списък всеки път
Използвайте всяка крайна точка веднъж, преди да започнете отновоРазбъркайте копие, изчерпайте го, след което започнете ново обхождане
Избягвайте непосредствено предишната крайна точкаИзключете тази крайна точка преди избора

За последната политика обработете изрично случая с една крайна точка:

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

Този фрагмент предполага, че random е импортиран и списъкът с крайни точки вече е проверен. Публичен пул може да започне с безплатен списък с проксита, когато протоколите му пасват на крайния клиент; това правило за избор все още контролира повторенията. Дали да се изчака, да се използва отново единствената крайна точка или да се спре, е политика на приложението. Безкраен цикъл, който чака друга случайна стойност, не може да реши списък само с една различна опция.

В паралелен диспечер избирането и записването на предишната крайна точка също изисква координирано владение. Иначе два работника могат да изключат старата стойност и да изберат същата следваща стойност.

Накрая, това правило се отнася до идентичността на крайната точка. Две различни крайни точки могат да водят до един публичен изход, а една крайна точка на доставчик може да води до няколко изхода. Записвайте ги отделно, преди да решите, че ротацията е счупена.

Подобни статии