Верстакфорум практиков
рекламаiprazon: приватные серверные адреса IPv4 и SOCKS5, безлимитный трафик, бесплатный тест до 2 часов
ФорумСбор данных

Медленные сайты в общем прогоне тормозят всё

batchrunner
batchrunner
Участник
сообщений 470
с окт
15 ноября, 14:22первое сообщение

В прогоне сорок площадок, список общий, воркеры разбирают задачи по очереди. Тридцать восемь отвечают за секунду, две тянут по двенадцать. И вот эти две забивают собой почти все воркеры: они сидят и ждут, пока медленный сервер соизволит ответить, а быстрые задачи стоят в хвосте.

По итогу прогон, который должен укладываться в час, идёт четыре. Хочется, чтобы медленные не мешали остальным.

netmon
netmon
Знаток
сообщений 1350
с мая
22 апреля, 17:39#2

Классика. У вас одна общая очередь на разные по скорости источники, значит самый медленный задаёт темп всем.

Разносите по доменам: своя очередь и свой лимит соединений на каждый домен. Тогда медленный сайт тормозит только сам себя.

Полина Ждан
Полина Ждан
Новичок
сообщений 120
с мая, второй сезон
1 сентября, 08:56#3

а как понять сколько воркеров кому дать?

Кирилл Бакин
Кирилл Бакин
Знаток
сообщений 1560
с апр
8 февраля, 11:13#4

По отклику, других способов нет. Померьте медиану на каждом домене и раздайте соединения обратно пропорционально скорости: медленному больше воркеров при том же темпе запросов.

Смысл в том, что число соединений меряет вовсе не нагрузку на сайт. Оно меряет, сколько ожиданий вы держите одновременно. Если домен отвечает за двенадцать секунд и вам нужен один запрос в секунду, вам нужно двенадцать одновременных ожиданий. Быстрому домену на тот же темп хватит одного.

Второй момент, о котором забывают: таймаут. Если у вас на весь прогон стоит общий таймаут в шестьдесят секунд, медленный домен съест минуту на каждой зависшей задаче. Ставьте таймаут от медианы отклика домена: медиана умножить на четыре и сверху потолок. Для быстрых площадок это пять секунд, для медленных сорок. Зависшая задача уходит в повтор, воркер освобождается.

Третье. Медленные площадки почти всегда медленные только на конкретном маршруте. Прежде чем городить очереди, стоит проверить, отвечают ли они так же тяжело с другой точки выхода. У меня из трёх «медленных» доменов два оказались быстрыми, когда запросы пошли другим путём.

медиана отклика по доменам, секунды
медиана отклика по доменам, секунды
batchrunner
batchrunner
Участник
сообщений 470
с окт
15 июля, 14:30#5
Кирилл Бакин: два оказались быстрыми, когда запросы пошли другим путём

Вот это интересно. То есть я мог вообще зря разгонять воркеры? Как проверить быстро, без переписывания прогона?

netmon
netmon
Знаток
сообщений 1350
с мая
22 декабря, 17:47#6

Возьмите тестовый доступ и прогоните тридцать запросов по каждому проблемному домену с двух разных точек выхода, дальше сравните медианы. У меня под такие замеры лежит пакет с безлимитным трафиком на серверных адресах, тест включается за пять минут, и вопрос закрывается до всякой переделки кода.

тридцать замеров по одному домену
тридцать замеров по одному домену
batchrunner
batchrunner
Участник
сообщений 470
с окт
1 мая, 08:04#7

Померил, разница в пять раз на обоих подозреваемых. Развёл очереди по доменам, таймауты сделал от медианы, оставшийся один тяжёлый домен теперь варится в своих восьми воркерах и никому не мешает.

Прогон уложился в семьдесят минут. Спасибо.