Эксплуатация нод

Два хоста на одну ноду: почему часть пользователей тупит

«Быстрый» и «Сильный» варианты одной локации в подписке заставляют клиент метаться между записями. Один инбаунд — один видимый хост.

5 мин чтения Обновлено · Dele Deleev

Симптом

У части пользователей — в разобранном случае сотня-полторы — подключение «тупит»: дёргается, не встаёт с первого раза, конфликтует. У остальных всё в порядке. Локация в целом выглядит проблемной, хотя сама нода жива и трафик по ней идёт.

Причина

На одну физическую ноду (один сетевой адрес) в подписке выдано два клиентских хоста-локации. Например «Быстрый» (:443, vision) и «Сильный» (:8443, xhttp), оба указывают на один и тот же address. Клиент получает две записи фактически одной локации и начинает метаться между ними — переключается, переустанавливает соединение. У части пользователей это выливается в устойчивый тупняк.

Важное исключение: скрытые хосты-плечи балансировщика (isHidden: true) — не дубль. Они не выдаются пользователю как отдельная локация и спокойно сосуществуют с видимым хостом на той же ноде.

Решение

  • Правило: один инбаунд ноды = один видимый клиентский хост в подписке. Не плодить «быстрый/сильный» варианты одной ноды как две локации.
  • При жалобах на тупняк у части пользователей — сгруппировать хосты по address и проверить, нет ли двух видимых хостов на один адрес (скрытые плечи балансировщика не считаются).
  • Лечится отключением лишнего дубля: остаётся один видимый хост на ноду.

Вывод. Если клиенту отдать две записи, указывающие на один ресурс, он не «выберет лучшую» — он будет метаться. Дублирование одного бэкенда под видом двух вариантов выбора создаёт недетерминированное поведение клиента. В любых списках эндпоинтов избегайте скрытых дублей одного адреса; если несколько записей ведут в одно место — это должно быть осознанной ролью (скрытое плечо балансировщика), а не случайностью.

Частые вопросы

Частые вопросы

Почему подключение тупит только у части пользователей на одной локации?
Обычно на одну физическую ноду в подписке выдано два клиентских хоста-локации, например «Быстрый» и «Сильный», указывающих на один и тот же адрес. Клиент получает две записи одной локации и начинает метаться между ними, переключаясь и переустанавливая соединение.
Сколько видимых хостов должно быть на одну ноду в подписке?
Один инбаунд ноды должен соответствовать одному видимому клиентскому хосту в подписке. Не стоит делать «быстрый/сильный» варианты одной ноды как две отдельные локации.
Считаются ли скрытые хосты-плечи балансировщика дублем?
Нет, скрытые хосты с isHidden: true — исключение: они не выдаются пользователю как отдельная локация и спокойно сосуществуют с видимым хостом на той же ноде.
Как найти лишний дубль хоста при жалобах на тупняк?
Нужно сгруппировать хосты по адресу и проверить, нет ли двух видимых хостов на один и тот же address — скрытые плечи балансировщика при этом не считаются дублем.
Как лечится проблема двух хостов на одной ноде?
Лишний видимый дубль отключается, на ноде остаётся один видимый хост — это устраняет недетерминированное поведение клиента.
Похожее

Ещё в базе знаний

Подключите рабочий VPN

Инструкции базы знаний написаны под ключи VPN PRO: ключ выдаёт Telegram-бот за минуту, работоспособность гарантируем. 3 дня бесплатно, без карты.

Гарантия работоспособности · оплата СБП, картой МИР или криптовалютой