Случайные выборы, перемешанные проходы и повторяющиеся конечные точки прокси
Выбирайте между независимыми случайными выборами, перемешанным проходом и политикой без немедленного повтора, вместо того чтобы считать повторяющуюся конечную точку сломанным ротатором.
Прокси 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 импортирован, а список конечных точек уже проверен. Публичный пул может начать с бесплатного списка прокси, когда его протоколы подходят конечному клиенту; это правило выбора по-прежнему управляет повторами. Ждать, повторно использовать единственную конечную точку или остановиться — это политика приложения. Бесконечный цикл в ожидании другого случайного значения не может решить список, содержащий только один отличный вариант.
В параллельном диспетчере выбор и запись предыдущей конечной точки также требуют согласованного владения. Иначе два работника могут оба исключить старое значение и выбрать одно и то же следующее значение.
Наконец, это правило касается идентичности конечной точки. Две разные конечные точки могут вести к одному публичному выходу, а одна конечная точка провайдера может вести к нескольким выходам. Записывайте их отдельно, прежде чем решить, что ротация сломана.