Формулировки вроде «50K подключений» или «100 одновременных потоков», которые часто встречаются в прокси-тарифах, говорят об одном: количество TCP-соединений, которые вы можете держать открытыми одновременно. Этот лимит напрямую определяет, насколько быстро вы сможете работать, а при его превышении сообщения об ошибках чаще всего вводят в заблуждение.
В этой статье мы разбираем, что такое параллелизм, как рассчитывается правильное значение и как диагностировать превышение лимита.
Параллелизм и скорость запросов — не одно и то же
Два понятия постоянно путают:
Простая форма закона Литтла: скорость запросов = параллелизм ÷ средняя длительность запроса. Если у вас 20 одновременных соединений и каждый запрос занимает в среднем 500 мс, вы можете отправлять 40 запросов в секунду. Если длительность запроса вырастет до 2 секунд, при том же параллелизме вы отправите лишь 10 запросов в секунду.
Медленный прокси замедляет вашу работу, не увеличивая параллелизм. Поэтому задержка чаще оказывается более определяющей, чем лимит параллелизма.
Где применяется лимит?
Лимит параллелизма существует не в одном месте, а сразу в нескольких точках цепочки:
Открыть 200 потоков у себя бесполезно, если провайдер ограничивает вас 50; лишнее будет ждать в очереди или получать ошибку.
Признаки превышения лимита
При превышении лимита параллелизма вы не получите чёткого сообщения «лимит превышен». Типичные признаки такие:
Критическое различие: 429 приходит от цели, сброс соединения — от прокси, а EMFILE — от вашей собственной машины. Все три требуют разных решений.
Как найти правильный параллелизм
Вместо теоретического расчёта надёжнее экспериментальный подход. Проведите ступенчатый нагрузочный тест:
Начните с малого
Отправьте 200 запросов при 5 одновременных соединениях. Зафиксируйте среднюю длительность и долю успешных запросов.
Удваивайте
Двигайтесь так: 10, 20, 40, 80… На каждом шаге повторяйте те же измерения.
Найдите точку перелома
Момент, когда общая пропускная способность (запросов/с) перестаёт расти, а средняя длительность начинает увеличиваться, означает, что вы близко к реальному лимиту.
Работайте на 70% от него
Используйте в продакшене примерно 70% от точки перелома. Этот запас защищает от колебаний в течение суток.
Кривая пропускной способности выходит на плато между 40 и 80, а задержка взлетает. После этой точки увеличение параллелизма лишь добавляет время ожидания.
Почему важен пул соединений (keep-alive)?
Выполнять новое TCP- и TLS-рукопожатие для каждого запроса дорого и по задержке, и по параллелизму. Повторное использование соединения (keep-alive) даёт при том же параллелизме гораздо более высокую пропускную способность:
Размер клиентского пула не должен превышать параллелизм, разрешённый провайдером. Если превысит, лишние соединения будут устанавливаться и сразу закрываться, а стоимость рукопожатия уйдёт впустую.
Связь параллелизма и количества IP
Увеличение параллелизма повышает и плотность запросов, выходящих с одного IP. Если целевой сайт применяет ограничение скорости на IP, рост параллелизма через один IP напрямую ведёт к блокировке. Правильный подход — масштабировать параллелизм вместе с количеством IP .
Не превышайте 1–2 одновременных соединения на один IP на одну цель. Если вы хотите отправлять 60 одновременных запросов, вам нужно минимум 30–60 разных выходных IP. Для расчёта размера пула в нашей статье о пуле прокси смотрите.
Управление скоростью, дружественное к цели
Не менее важная тема, чем параллелизм, — распределение запросов во времени. Вместо отправки 40 запросов одновременно лучше распределить их с небольшими задержками: это и выглядит на цели естественнее, и предотвращает накопление очереди.
- Добавьте jitter: Случайная пауза 150–350 мс вместо фиксированных 200 мс снижает роботизированный след.
- Используйте token bucket: Ведро токенов, выдающее N запросов в секунду, предотвращает резкие всплески.
- Применяйте отступ (backoff): Получив 429, постепенно снижайте параллелизм, а после возврата успеха медленно увеличивайте.
- Ведите отдельную очередь на каждую цель: Замедление одного сайта не должно влиять на другие.
Типичные лимиты для разных типов прокси
| Тип | Типичная параллельность | Ограничивающий фактор |
|---|---|---|
| Datacenter | Высокий — сотни | Пропускная способность и ограничение скорости на цели |
| ISP | Средний-высокий | Толерантность цели к одному IP |
| Residential | Средний — зависит от тарифа | Квота аккаунта у провайдера |
| Мобильные | Низкая | Одно устройство и соединение оператора |
Мобильные прокси выходят через один физический модем, поэтому по своей природе дают низкий параллелизм; зато они обладают самым высоким уровнем доверия. Подробнее — в нашей статье о мобильных прокси можно посмотреть.
Резюме
Параллелизм определяет скорость не сам по себе, а вместе с задержкой. Путь к правильному значению лежит через экспериментальный нагрузочный тест: найдите точку, где пропускная способность выходит на плато, а задержка взлетает, и работайте на 70% от неё. Зафиксируйте пул соединений на этом значении, масштабируйте параллелизм вместе с количеством IP и отступайте при получении 429. Чтобы измерить задержку ваших текущих прокси, тест пинга и проверка proxy вы можете воспользоваться нашими инструментами.