Архитектура Cluster

Localzet Cluster использует архитектуру Gateway-Worker для разделения ответственности между компонентами и обеспечения горизонтального масштабирования.

Компоненты системы

Cluster состоит из трех основных компонентов:

1. Gateway (Шлюз)

Gateway обрабатывает все клиентские соединения и маршрутизирует сообщения в Business Worker'ы.

Основные функции:

  • Прием клиентских соединений (WebSocket, TCP и т.д.)
  • Маршрутизация сообщений к Business Worker'ам
  • Управление соединениями (client_id, группы, UID)
  • Обработка сессий на уровне Gateway

Характеристики:

  • Можно запускать несколько экземпляров для распределения нагрузки
  • Каждый Gateway процесс имеет уникальный внутренний порт
  • Gateway не содержит бизнес-логику приложения

2. Business Worker

Business Worker обрабатывает бизнес-логику приложения. Получает события от Gateway и выполняет необходимые действия.

Основные функции:

  • Обработка событий подключения/отключения клиентов
  • Обработка сообщений от клиентов
  • Выполнение бизнес-логики
  • Взаимодействие с базой данных и внешними сервисами

Характеристики:

  • Можно запускать несколько экземпляров для параллельной обработки
  • Не имеет прямых соединений с клиентами
  • Общается с Gateway через внутренний протокол

3. Register (Регистратор)

Register обеспечивает service discovery и координацию между компонентами.

Основные функции:

  • Регистрация Gateway серверов
  • Распространение списка Gateway адресов
  • Координация подключений Business Worker'ов

Характеристики:

  • Запускается в единственном экземпляре (или с репликацией)
  • Использует простой текстовый протокол для общения
  • Поддерживает аутентификацию через secret key

Поток данных

Подключение клиента

  1. Клиент подключается к Gateway
  2. Gateway генерирует уникальный client_id
  3. Gateway отправляет событие onConnect в Business Worker
  4. Business Worker обрабатывает подключение и может установить сессию

Обработка сообщений

  1. Клиент отправляет сообщение в Gateway
  2. Gateway маршрутизирует сообщение в один из Business Worker'ов (по алгоритму роутинга)
  3. Business Worker обрабатывает сообщение
  4. Если нужно отправить ответ, используется Gateway API для отправки клиенту

Отключение клиента

  1. Клиент отключается от Gateway
  2. Gateway отправляет событие onClose в Business Worker
  3. Business Worker обрабатывает отключение
  4. Gateway очищает все данные о соединении (группы, UID, сессии)

Протокол обмена данными

Gateway и Business Worker общаются через двоичный протокол Cluster (Federation), который оптимизирован для высокой производительности.

Особенности протокола:

  • Бинарный формат для минимального размера пакетов
  • Поддержка сериализации данных
  • Флаги для оптимизации (raw данные, скалярные значения)
  • Встроенная информация о соединении (IP, порт, connection_id)

Масштабирование

Горизонтальное масштабирование

  • Gateway: Запустите несколько Gateway процессов на разных серверах или портах
  • Business Worker: Увеличьте количество процессов для обработки большей нагрузки
  • Register: Может быть реплицирован для отказоустойчивости

Распределение нагрузки

  • Gateway: Использует балансировку на уровне Load Balancer или DNS
  • Business Worker: Использует роутинг (по умолчанию - привязка к серверу, можно настроить случайный)

Безопасность

  • Secret Key: Все компоненты должны использовать одинаковый secretKey для аутентификации
  • Внутренняя сеть: Gateway и Business Worker общаются через внутреннюю сеть
  • Клиентская аутентификация: Может быть реализована на уровне Business Worker

Отказоустойчивость

  • При падении Business Worker, Gateway автоматически прекращает маршрутизацию на него
  • При падении Gateway, клиенты могут переподключиться к другому Gateway
  • Register автоматически удаляет неактивные Gateway из списка