Перейти к основному содержимому
Версия: Новая

Шлюз SALT.BOX

Шлюз SALT.BOX (SALT.BOX Gateway) — это компонент платформы SALT.BOX, реализующий API Gateway для микросервисной архитектуры.
Он обеспечивает маршрутизацию запросов, балансировку нагрузки, проверку работоспособности сервисов, кэширование, а также централизованное управление доступом на основе политик OPA (Open Policy Agent) и системы разрешений приложений («пермишенов»).

Шлюз SALT.BOX работает поверх фреймворка FastAPI, интегрируется с Redis для хранения состояния и кэша, а также с OPA для проверки разрешений.

подсказка

Пермишен (от англ. permission — разрешение, дозволение) — механизм безопасности, предназначенный для защиты конфиденциальности пользователей.

Он ограничивает доступ приложений к различным функциям и данным на устройстве.

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

Компоненты шлюза SALT.BOX:

  • ServiceDAO — слой доступа к данным о сервисах (Redis)
  • ProxyService — основной класс для проксирования запросов, балансировки, проверки доступа
  • BalancingStrategy — фабрика стратегий балансировки
  • AsyncOpaClient — клиент для проверки политик OPA
  • CustomRedisCache — кэширование ответов

Основные возможности​

  • Динамическое обнаружение и управление сервисами (Service Discovery)
  • Балансировка нагрузки (Round Robin, Weighted RR, Random)
  • Проверка работоспособности экземпляров сервисов
  • Кэширование ответов
  • Проксирование статических файлов
  • Управление доступом через OPA и пермишены
  • API для управления сервисами и экземплярами сервисов
  • Swagger/OpenAPI документация для сервисов

Динамическое обнаружение и управление сервисами​

Функции управления сервисами, реализуемые шлюзом SALT.BOX:

  • Регистрация/отключение/удаление сервисов и их экземпляров через API
  • Автоматическое обновление состояния сервисов
  • Поддержка нескольких экземпляров одного сервиса

Регистрация сервиса в Discovery​

Для регистрации нового сервиса (например, Ядро) используется механизм Service Discovery.
Сервис при запуске отправляет информацию о себе (имя, точки подключения («эндпоинты»), тип, стратегия балансировки, разработчик и пр.) шлюзу SALT.BOX через API или напрямую в Redis.

подсказка

Эндпоинт (от англ. endpoint — точка подключения) — конкретный сетевой адрес, URL, который определяет точку доступа к ресурсу или услуге на сервере.

Клиентское приложение обращается к конечной точке для выполнения определённых операций или получения данных.

Регистрация сервиса выполняется по следующему алгоритму:

  • Если сервис с таким именем ещё не зарегистрирован, добавляется один экземпляр сервиса
  • Если сервис уже существует, то добавляется новый экземпляр этого сервиса, при совпадении id сервиса обновляется текущий экземпляр
  • В SDK реализован клиент, который отправляет POST-запрос на /api/discovery/register с описанием сервиса и его экземпляра
  • При регистрации сервис передаёт шлюзу полный список своих эндпоинтов с их настройками: политикой доступа (OPA policy), параметрами кэширования (cache_ttl), partial-query, action и др.
  • После регистрации сервис появляется в списке доступных сервисов шлюза и становится доступен для проксирования
  • На основе зарегистрированных эндпоинтов шлюз осуществляет проверку доступа (через OPA) и кэширование ответов согласно настройкам эндпоинта

Балансировка нагрузки​

Шлюз SALT.BOX поддерживает следующие стратегии балансировки нагрузки:

  • rr — Round Robin (Циклический перебор)
  • wrr — Weighted Round Robin (Взвешенный циклический перебор)
  • rand — Random (Случайная)

Стратегия задаётся для каждого сервиса, её можно менять через API.

Кэширование​

  • Кэшируется только успешные ответы (200 OK), если эндпоинт поддерживает TTL
  • Кэш хранится в Redis, namespace: gate_cache
  • Кэш отключается для Swagger/OpenAPI и приватных эндпоинтов

Проксирование статических файлов​

Для сервисов с настроенным static_host запросы к статическим файлам проксируются напрямую.

Авторизация и управление доступом​

Шлюз SALT.BOX реализует централизованную систему управления доступом на основе OPA (Open Policy Agent) и пермишенов, поддерживающую модель ABAC (Attribute-Based Access Control).

Преимущества решения​

  • ABAC: доступ определяется на основе атрибутов пользователя, ресурса, действия и сервиса
  • Гибкость: политики сгруппированы по сервисам, например: core (Ядро), scheduler (Планировщик), ресурсам, например: задачи (tasks), команды (jobs), коллекции (collections) и действиям, например: read (чтение), create (создание)
  • Масштабируемость: легко добавлять новые сервисы, ресурсы, роли и условия
  • Partial Query: OPA может возвращать фильтр для ограничения данных на уровне запроса