Випадкові вибори, перемішані проходи та повторювані кінцеві точки проксі
Виберіть між незалежними випадковими виборами, перемішаним проходом і політикою без негайного повтору, замість того щоб вважати повторювану кінцеву точку зламаним ротатором.
Проксі 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 імпортовано, а список кінцевих точок уже перевірено. Публічний пул може почати з безкоштовного списку проксі, коли його протоколи підходять кінцевому клієнту; це правило вибору досі керує повторами. Чекати, повторно використовувати єдину кінцеву точку чи зупинитися — це політика застосунку. Нескінченний цикл, що чекає на інше випадкове значення, не може розв'язати список, який містить лише один відмінний варіант.
У паралельному диспетчері вибір і запис попередньої кінцевої точки також потребують узгодженого володіння. Інакше два працівники можуть обидва виключити старе значення й вибрати те саме наступне значення.
Нарешті, це правило стосується ідентичності кінцевої точки. Дві різні кінцеві точки можуть вести до одного публічного виходу, а одна кінцева точка постачальника може вести до кількох виходів. Записуйте їх окремо, перш ніж вирішити, що ротація зламана.