Проблема
При недоступности прямых Telegram IP fallback многократно повторяет direct_tcp dial к одному и тому же адресу.
В логах 2026-09-01 повторяются подключения к:
149.154.167.51:443 (DC2);
149.154.175.50:443 (DC1).
Каждая попытка заканчивается i/o timeout, но следующие MTProto route request снова запускают тот же TCP dial через несколько секунд.
Для direct_ws уже виден IP cooldown (reason=direct_ip_cooldown), а direct_tcp продолжает тратить время на заведомо недоступный target.
native/tgwsproxy/mtproto_direct_route.go сейчас выполняет обычный net.Dialer.DialContext() с timeout 10 секунд без target health/circuit breaker.
Последствия
- лишняя задержка каждого reconnect;
- много одновременно висящих TCP dial;
- повторная нагрузка на одну и ту же заблокированную сеть/адрес;
- шум в логах;
- fallback цепочка медленнее возвращается к потенциально рабочим маршрутам.
Предлагаемое изменение
Добавить health/cooldown для direct TCP target, минимум по ключу:
После timeout/network unreachable/connection refused применять reason-aware backoff. Успешное подключение должно сбрасывать consecutive failures.
Желательно переиспользовать общую модель direct IP health между direct_ws и direct_tcp, если семантика ошибок позволяет, либо хранить transport-specific health.
Критерии готовности
Связанные файлы
native/tgwsproxy/mtproto_direct_route.go
- код direct WebSocket cooldown (для возможного переиспользования)
- MTProto route-chain/fallback telemetry
Проблема
При недоступности прямых Telegram IP fallback многократно повторяет
direct_tcpdial к одному и тому же адресу.В логах 2026-09-01 повторяются подключения к:
149.154.167.51:443(DC2);149.154.175.50:443(DC1).Каждая попытка заканчивается
i/o timeout, но следующие MTProto route request снова запускают тот же TCP dial через несколько секунд.Для
direct_wsуже виден IP cooldown (reason=direct_ip_cooldown), аdirect_tcpпродолжает тратить время на заведомо недоступный target.native/tgwsproxy/mtproto_direct_route.goсейчас выполняет обычныйnet.Dialer.DialContext()с timeout 10 секунд без target health/circuit breaker.Последствия
Предлагаемое изменение
Добавить health/cooldown для direct TCP target, минимум по ключу:
После
timeout/network unreachable/connection refused применять reason-aware backoff. Успешное подключение должно сбрасывать consecutive failures.Желательно переиспользовать общую модель direct IP health между
direct_wsиdirect_tcp, если семантика ошибок позволяет, либо хранить transport-specific health.Критерии готовности
direct_tcp_ip_cooldown;direct_tcpиз-за cooldown.Связанные файлы
native/tgwsproxy/mtproto_direct_route.go