CreateYourVPN Academy
Курс: как всё устроено

Маршруты и балансировка нагрузки

Что такое маршрут в CreateYourVPN, как создать его за минуту, зачем нужны пустые маршруты и как система распределяет пользователей по серверам.

Маршрут — это мостик между вашей инфраструктурой и тем, что видит пользователь. Вы управляете серверами и инбаундами, а пользователь в приложении видит короткий список «серверов» — и каждая позиция этого списка на самом деле маршрут.

Маршрут = одна строчка в приложении пользователя

Маршрут — это группа инбаундов под одним именем в подписке клиента. Правило простое:

Один непустой маршрут = одна позиция в списке серверов у пользователя.

Внутри маршрута может стоять один инбаунд, а может — десять на разных серверах. Пользователь этого не видит: он выбирает «🇺🇸 США», а на какой конкретно сервер он попадёт, решает балансировщик — о нём чуть ниже.

При этом имя, которое видит пользователь, — это имя выбранного инбаунда: назвали инбаунды понятно («🇺🇸 Нью-Йорк», «🇺🇸 Даллас») — пользователь увидит именно их.

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

Создаём маршрут

На странице кластера в разделе «Маршруты» нажмите «Новый маршрут». В мастере три секции:

  1. Как клиент увидит этот маршрут — название (например, 🇺🇸 США) и флаг. Это «вывеска» маршрута.
  2. Алгоритм балансировки — «Наименее загруженный по трафику» (по умолчанию) или «Round-robin». Разница — ниже.
  3. Инбаунды в пуле — какие инбаунды входят в маршрут. Секция необязательная: можно создать пустой маршрут и наполнить его позже перетаскиванием.

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

Диаграмма топологии: маршруты наглядно

На странице кластера маршруты видны на живой схеме: слева серверы с инбаундами, справа — коробки маршрутов. Инбаунды можно перетаскивать мышкой: схватили инбаунд, бросили в другой маршрут — готово. Есть и зона «Без маршрута» — бросьте инбаунд туда, чтобы отвязать его от всех маршрутов.

Сами коробки маршрутов тоже можно переставлять (за ручку перетаскивания или стрелками) — это чисто визуальный порядок для вашего удобства.

Пустые маршруты

Маршрут без единого инбаунда рисуется пунктиром и не имеет «трубы» к распределяющему узлу — это подсказка, что пользователи его не видят. Пустые маршруты удобны как заготовки: создали «🇯🇵 Япония» заранее, а когда появится японский сервер — перетащили инбаунд, и маршрут ожил.

Обратная ситуация тоже подсвечивается: если у вас есть инбаунды вне маршрутов, панель предупредит — «инбаундов не привязано ни к одному маршруту — клиенты их не видят».

Балансировка: кто попадёт на какой сервер

Когда пользователь запрашивает подключение, система для каждого маршрута выбирает один инбаунд из пула — живьём, по свежим метрикам серверов (тем самым из урока 3). Алгоритма два:

«Наименее загруженный по трафику» (по умолчанию)

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

Ёмкость канала система оценивает сама — по наблюдаемым пикам реального трафика (пик постепенно «остывает», если сервер давно не нагружали).

«Round-robin»

Простое правило: новый пользователь идёт на сервер, где сейчас меньше всего людей — с поправкой на коэффициент сервера. Коэффициент — это вес: сервер с коэффициентом 2.0 считается «вдвое вместительнее» и получит примерно вдвое больше пользователей, чем сосед с 1.0. Так можно честно нагружать разномощные машины.

Если у какого-то сервера в пуле ещё нет оценки ёмкости (например, сервер совсем новый и пиков трафика пока не видел), маршрут аккуратно переключается на round-robin — чтобы решения всегда принимались по данным, которые есть.

Когда происходит перебалансировка

Постоянно — и сама. Выбор сервера пересчитывается при каждом обращении по свежим метрикам: нагрузка сместилась — новые пользователи начинают приземляться на более свободные серверы. При этом за конкретным пользователем система старается закреплять один и тот же выбор при равных условиях, чтобы его «сервер» не скакал туда-сюда.

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

Запомнить

  • Маршрут — «вывеска» для группы инбаундов; непустой маршрут = строчка в приложении пользователя.
  • Один инбаунд — только в одном маршруте. Инбаунд вне маршрутов невидим для клиентов.
  • Пустые маршруты — нормальная заготовка: пунктирная коробка, скрыт от пользователей.
  • Два алгоритма: по свободной полосе (умный, по умолчанию) и round-robin с весами.
  • Балансировка живая: пересчитывается при каждом подключении по текущим метрикам.

Дальше

On this page