Разные вопросы и нюансы
1. Как часто серверы «опрашивают» основной?
FRP работает не совсем как «опрос» (poll), а как постоянное TCP-соединение.
Принцип: Клиент (frpc) устанавливает соединение с сервером (frps) при старте и удерживает его открытым. Это не «запрос-ответ», а «труба», которая всегда открыта.
Heartbeat (пульс): Чтобы соединение не разрывалось из-за бездействия или NAT-таймаутов, внутри FRP есть механизм heartbeat. По умолчанию он отправляет маленькие контрольные пакеты примерно каждые 30 секунд. Это минимальная нагрузка на сеть — доли килобайт.
Настройка: Вы можете регулировать это в frpc.toml параметром heartbeatInterval (в секундах). Если сеть очень нестабильная, можно поставить меньше, если всё хорошо — оставить по умолчанию.
2. Сколько серверов можно «повесить» на один основной?
Здесь всё зависит от ресурсов Сервера Б (Стабильного). FRP крайне эффективен, так как написан на Go.
Оперативная память (RAM): Один клиент frpc потребляет очень мало (от 5 до 20 МБ в зависимости от количества прокси). Если у вас 1 ГБ ОЗУ на Сервере Б, вы легко можете держать сотни (200–500+) подключенных серверов.
Процессор (CPU): Пока туннели простаивают, нагрузка близка к нулю. Она вырастает только тогда, когда по туннелю идет реальный трафик (например, вы копируете файлы через SSH или передаёте данные).
Сетевой канал (Bandwidth): Это узкое место. Если 50 серверов начнут одновременно качать гигабайты данных через Сервер Б, он станет "бутылочным горлышком".
Есть ли предел?
Технического лимита внутри FRP практически нет, но есть ограничения операционной системы (Linux):
Лимит файлов (File Descriptors): Каждое соединение — это открытый файл. В Linux по умолчанию лимит обычно 1024, но его легко поднять в настройках ulimit или через системные настройки sysctl.
Суммарная пропускная способность: Один мощный сервер (например, с 2–4 ядрами и 4 ГБ ОЗУ) легко "переварит" 1000+ туннелей в режиме ожидания.
Итого:
Нагрузка на сеть: Мизерная (контрольные пакеты раз в 30 секунд).
Масштабирование: Можно цеплять сотни клиентов.
Совет: Если планируете более 50–100 серверов, обязательно добавьте в настройки [common] параметр maxPoolCount на Сервере Б, чтобы управлять пулом соединений и не забить все порты.
Если планируете подключать целую «ферму» из десятков серверов, лучше заранее выделить отдельный конфиг для каждого или использовать динамическую конфигурацию (когда frps берет настройки из БД или отдельной папки), чтобы не раздувать один файл до бесконечности.