Как устроена Nexora
Nexora состоит из двух частей: одной панели, которая всё решает, и любого числа узлов, которые несут трафик ваших пользователей. Этот раздел объясняет, как они устроены внутри, на случай, если вы хотите понять, почему что-то ведёт себя так, а не иначе. Чтобы вести сервис, он не нужен; для этого есть раздел Работа с панелью.
Уровень управления: панель
Панель — это одна программа с веб-интерфейсом. В ней четыре вещи:
- База данных, единственный источник истины. Каждый администратор, пользователь, тариф, инбаунд, шаблон, узел, туннель, сертификат и настройка хранятся там, в SQLite или PostgreSQL. У узлов нет собственной копии; если они расходятся, права панель, и узел меняется под неё.
- Планировщик. Периодическую работу панель делает сама, в фиксированном ритме (ниже).
- API. Веб-интерфейс, ваши скрипты и дополнения пользуются одним и тем же API, каждый со своими правами.
- Служба подписок. Приложения пользователей получают конфигурацию по адресу своей подписки. Она может работать на собственных доменах, отдельно от адреса, по которому вы управляете панелью.
Ритм панели
| Каждые | Панель |
|---|---|
| 10 секунд | объединяет адреса, которые видел каждый узел, и отправляет таблицу адресов пользователей обратно туда, где она изменилась |
| 15 секунд | проверяет каждый узел (heartbeat) и заново отправляет конфигурацию узлу, который её не обслуживает |
| 30 секунд | собирает счётчики трафика со всех узлов |
| минуту | применяет квоты, даты окончания, циклы сброса и лимиты узлов; проверяет состояние дополнений |
| 5 минут | снимает показания диска, памяти и нагрузки каждого узла |
| 10 минут | сравнивает маршрутизацию, DNS и наборы правил на каждом узле с тем, что он должен запускать |
| час | обновляет наборы правил, которым пора, удаляет старые записи, сжимает историю состояния, перечитывает манифесты дополнений |
| 6 часов | продлевает сертификаты, которым пора |
Уровень данных: узлы
Узел — это сервер, который несёт трафик. Он не хранит состояния:
- У него нет базы данных. Инбаунды, аутбаунды, эндпоинты, маршрутизация, пользователи и лимиты приходят от панели и хранятся в памяти.
- На диске он держит только собственную TLS-идентичность и кэш файлов, которые можно получить заново, например наборы правил, присланные панелью.
- После перезапуска он ничего не обслуживает, пока панель снова не пришлёт конфигурацию, а следующий heartbeat делает это за секунды.
- Он обслуживает, только пока до него доходит его панель. Отрезанный от панели примерно на три минуты, он перестаёт обслуживать. См. Узел и его панель.
Узел обслуживает свой шаблон: инбаунды, аутбаунды, эндпоинты, наборы правил и маршрутизацию из него, а также пользователей, которые входят в этот шаблон.
Как они общаются
Панель подключается к каждому узлу по HTTPS на управляющий порт узла (по умолчанию 62050), с взаимным TLS:
- Узел принимает только клиентский сертификат панели, полученный при установке.
- Панель запоминает собственный сертификат узла при первом подключении и потом принимает только его. Это доверие при первом использовании: другой сертификат на том же адресе отклоняется.
После установки узла соединение всегда открывает панель, никогда наоборот. По этому каналу панель отправляет конфигурацию и изменения и читает состояние, счётчики, предупреждения и показатели хоста. Изменение отправляется только как это изменение, без перезапуска узла; см. Изменения без перезапусков.
Пользователи обращаются только к узлам и адресу подписки
Ваши клиенты никогда не обращаются к панели. Их приложение получает конфигурацию по адресу подписки, а затем подключается к адресам для ссылок узлов. Собственный адрес панели, её страницу входа и её API не нужно знать никому, кроме вас и ваших сотрудников.
Дополнения работают рядом с панелью
Дополнение, например Nexora Shop или уведомитель, — это отдельная программа со своим процессом, базой данных и интерфейсом. С панелью оно работает только по сети: API-токен с одобренными вами правами и вебхук, который получает запрошенные им события. Панель никогда не запускает код дополнения. См. Платформа дополнений и Шина событий.
Страницы этого раздела
| Страница | Что она объясняет |
|---|---|
| Путь пакета | одно соединение через узел, этап за этапом |
| Изменения без перезапусков | как изменение доходит до узлов без перезапусков |
| Узел и его панель | доверие, сессии, heartbeat и что делает узел без своей панели |
| Внутри туннеля | ретрансляторы, исходные узлы и пул сессий внутри туннеля |
| От шаблона до ссылки | как ссылки пользователя строятся из шаблонов, адресов и фронтов |
| Трафик, квоты и лимиты | подсчёт трафика, квоты, лимиты и лимиты реселлеров |
| Шина событий | шина событий и повтор доставок |
| Платформа дополнений | регистрация, согласие, выдача прав и обновления дополнений |
| Выпуск и продление сертификатов | кто выпускает сертификаты и как они продлеваются и перезагружаются |
| Модель безопасности | модель безопасности, от взаимного TLS до ролей и аудита |
| Мониторинг и метрики | история состояния, живые соединения и эндпоинт метрик |
