Одновременные подключения

Одновременные подключения

Прокси могут исправно работать при небольшой нагрузке и выдавать ошибки после запуска дополнительных потоков или программ. Одна из возможных причин — превышение допустимого количества одновременных подключений.

Этот лимит относится к ограничениям использования прокси. Чтобы понять, что он регулирует и почему достигается, сначала разберём, что такое сетевое соединение и как оно работает через прокси.

Что такое соединение и как оно работает

Сетевое соединение — это связь, которую две программы устанавливают для обмена данными. Например, браузер соединяется с веб-сервером, чтобы запросить страницу и получить её содержимое. Соединение обеспечивает путь для этого обмена, а запрос и ответ — сообщения, которые по нему передаются.

Рассмотрим обычное TCP-соединение. Программа обращается к IP-адресу сервера и порту нужной службы. Стороны обмениваются служебными сообщениями и устанавливают связь. Затем данные передаются небольшими частями — пакетами. TCP отслеживает их доставку, организует повторную передачу потерянных данных и выдаёт получателю данные в правильном порядке. Обе стороны хранят сведения об этом обмене, пока соединение существует.

При работе через обычный TCP-прокси программа сначала подключается к прокси-серверу. Тот устанавливает отдельное соединение с нужным сайтом и передаёт данные между двумя подключениями: от программы к сайту и обратно. Поэтому прокси поддерживает и связь с клиентом, и связь с сервером назначения.

По установленному соединению программа может отправить запрос, получить ответ и затем использовать его для следующего обмена. Например, получение страницы не обязательно закрывает соединение: браузер может сохранить его для дальнейших обращений к серверу. Когда подключение больше не требуется, одна из сторон закрывает его; оно также может оборваться из-за ошибки или быть закрыто по тайм-ауту. До закрытия соединение может существовать и без непрерывной передачи данных.

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

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

Что именно ограничивается

Открытое соединение занимает одно место в соответствующем лимите. Когда оно закрывается и сервис перестаёт его учитывать, место становится доступным для следующего. Ограничивается текущая активность: достижение лимита не означает, что вы израсходовали месячный запас подключений.

Как подключения учитываются в клиентском лимите — отдельное правило сервиса. Два участка связи у прокси не означают автоматического списания двух единиц из квоты.

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

У одной услуги могут одновременно действовать несколько разных ограничений:

Ограничение Что оно регулирует
Одновременные подключения Сколько соединений может оставаться открытыми одновременно
Одновременные запросы Сколько запросов может находиться в обработке одновременно
Запросы в секунду С какой частотой можно отправлять или обрабатывать запросы
Скорость передачи Сколько данных можно передать за секунду
Лимит трафика Сколько данных можно передать за оплаченный период

Поэтому безлимитный трафик ничего не говорит о допустимом количестве одновременных подключений. Отдельно может ограничиваться частота создания новых соединений. Если быстро открывать и закрывать их, можно достигнуть этого ограничения, хотя одновременно открытых соединений будет немного.

Почему число потоков не равно числу соединений

Количество потоков или рабочих задач в программе описывает организацию её работы. Оно не позволяет точно определить, сколько соединений посчитает прокси-сервис. Одна задача может обращаться к нескольким серверам, а асинхронный скрипт способен вести много сетевых операций без отдельного потока операционной системы для каждой из них.

При этом каждый HTTP-запрос не обязательно создаёт новое соединение. Программа может использовать уже открытое, а HTTP/2 позволяет передавать несколько запросов одновременно через одно соединение. Поэтому количество запросов отличается от количества подключений.

Имеет значение и терминология провайдера. Под словами «потоки» или «сессии» сервис может подразумевать открытые соединения либо запросы в обработке. Sticky-сессия, сохраняющая один IP прокси для связанных запросов, не обязательно соответствует одному сетевому соединению. Нужно понимать, что именно учитывает сервис.

Какие программы расходуют общий лимит

Ограничение может относиться к аккаунту, купленному пакету, отдельному IP прокси или определённому шлюзу. Если лимит действует на аккаунт или пакет, в него входят соединения всех программ и устройств, использующих эту услугу. Распределение списка прокси между несколькими компьютерами не создаёт отдельную квоту для каждого компьютера.

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

Количество клиентских IP, с которых разрешён доступ, — ещё одна самостоятельная настройка. Она определяет, из каких сетей можно обращаться к прокси, а не сколько соединений разрешено открыть. Несколько устройств за одним публичным IP могут использовать общее разрешение на доступ и делить выделенную этому IP квоту подключений.

Смена IP прокси, который видит сайт, не обнуляет общий лимит аккаунта. Изменение имени sticky-сессии или протокола также не даёт дополнительных подключений автоматически. Ограничение остаётся привязанным к тому аккаунту, пакету или адресу подключения, по которому провайдер ведёт учёт.

Почему открытые соединения накапливаются

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

Пользователь запускает пять профилей условной соцсети в антидетект-браузере. На ноутбуке показан список профилей. От каждого профиля к общему прокси идёт группа из восьми подключений: всего сорок. Ещё десять ранее открытых подключений остаются занятыми. Вместе они занимают все пятьдесят подключений условного лимита. Счётчик растёт с запуском профилей. Следующие два окна открываются, но показывают ошибку загрузки, поскольку новые подключения не принимаются. Схема показывает обычную параллельную работу, а не ошибку программы. Цифры выбраны для этой схемы, а не взяты из пакета ProxyCompass. Восемь подключений не являются нормой для каждого профиля. Линия с числом восемь обозначает группу подключений, а не один запрос.

Медленный ответ сайта дольше занимает соединение. Если программа продолжает запускать новые задачи с прежней частотой, незавершённая работа накапливается. Если же количество параллельных задач зафиксировано, замедление сайта обычно приводит к меньшему числу выполненных задач за минуту. Оба случая возможны без каких-либо изменений в пакете прокси.

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

Некоторые соединения специально сохраняются между запросами. Обычно это называют keep-alive. Повторное использование избавляет от создания нового подключения для каждого запроса, но простаивающее соединение может продолжать занимать место, если провайдер считает открытые подключения. Возврат соединения в пул программы означает, что его снова можно использовать; он не обязательно означает закрытие подключения у прокси.

Отдельная проблема — ошибки освобождения соединений. Они могут встречаться как в готовых программах, так и в самописных скриптах. Например, программа начинает читать ответ, сталкивается со сбоем и запускает новый запрос, не завершив и не закрыв предыдущий ответ. Если новые подключения продолжают открываться, а старые остаются занятыми, программа исчерпывает лимит без увеличения полезной работы. Поэтому освобождение соединений нужно проверять и после ошибок или отмены задач, а не только после успешных запросов.

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

Почему прокси то работают, то перестают работать

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

Одно из объяснений — заполненная общая квота. Уже установленные соединения могут продолжать работать, а новые попытки отклоняются или остаются в ожидании. Когда прежние подключения закрываются, некоторые новые проходят. Другие снова получают отказ, как только свободные места заканчиваются. Результат меняется из-за конкуренции за общий лимит, хотя постоянной группы неисправных IP нет.

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

Чтобы проверить это объяснение, сопоставьте ошибки с количеством подключений и временно снизьте параллельную нагрузку во всех программах, которые делят квоту. Если ниже лимита сбои исчезают, а при его заполнении возвращаются, ограничение подключений — вероятная причина. Похожие перебои бывают и из-за сайта или сети. Один тайм-аут либо ответ HTTP 429, 502 или 503 сам по себе не доказывает превышение лимита прокси: важны источник ошибки и её пояснение.

Как укладываться в лимит с пользой

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

  1. Распределите общий запас подключений между программами. Оставьте место для другой активности и коротких всплесков. Если несколько процессов используют один пакет, разрешение каждому из них занять весь лимит может привести к перегрузке при совместном запуске.
  2. Управляйте и задачами, и соединениями. Пул соединений хранит подключения для повторного использования. Проверьте, задаёт ли его размер жёсткий предел или только количество сохраняемых подключений: некоторые клиенты открывают дополнительные соединения, если не включён режим ожидания. Сохраняйте корректное завершение ответов и тайм-ауты, в том числе при сбое задачи.
  3. Распределяйте запуски и повторные попытки во времени. Одновременный старт всех браузеров или немедленное повторение всех неудачных запросов создаёт новый пик. Ограничьте количество повторов, увеличивайте задержку между ними и учитывайте их в общей нагрузке. Тайм-аут также не доказывает, что отправленное действие не выполнилось: повтор покупки или изменения данных требует отдельной проверки.
  4. Смотрите на выполненную работу. Больше потоков полезно, пока растёт число успешных результатов за единицу времени. Когда увеличиваются в основном ожидание и ошибки, меньшее значение может позволить закончить ту же работу быстрее. Если график в панели усредняет активность, короткие пики могут быть менее заметны, чем в журнале ошибок программы.

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

Когда стоит увеличить лимит

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

Покупка должна увеличивать именно то ограничение, в которое упирается работа. Дополнительные IP помогают при лимите на адрес, если нагрузку можно распределить между ними. При общем лимите пакета новый пакет или дополнительная опция должны увеличивать эту общую квоту. Само по себе увеличение количества IP ещё не доказывает, что подключений станет больше.

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

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

Вернуться в базу знаний