Change language

Шина сообщений Fujin

Fujin — коммуникационный центр среды выполнения Converged. Он предоставляет браузерам,
доменным сервисам, хранилищам, рабочим процессам, медиасервисам и процессорам единый
способ обмена сообщениями.

Зачем он нужен

Модульной платформе необходимо, чтобы компоненты могли работать независимо. Прямые HTTP-связи
заставили бы каждый сервис знать об адресах, репликах и топологии развертывания.
Fujin заменяет эти связи логическими целями: отправитель указывает, какой узел среды выполнения
должен получить сообщение, а Fujin пересылает его активному соединению,
которое в данный момент владеет этой целью.

отправитель -> логическая цель -> Fujin -> активное соединение -> локальный сервис

Отправитель не знает, где работает получатель. Процесс может перезапуститься или переместиться
на другой узел и снова занять ту же цель без изменения вызывающих его компонентов.

Модель маршрутизации

Fujin принимает одно решение о маршрутизации: сопоставляет цель с соединением. Цель
выбирает процесс, такой как среда выполнения пользовательского интерфейса, доменные сервисы
или Centimanus. Имя сервиса внутри сообщения интерпретируется только после того, как
получивший его процесс примет сообщение.

Важно разделять эти решения. Fujin остается небольшим брокером сообщений,
а не превращается в реестр каждого бизнес-сервиса, хранилища или рабочего процесса.

Три потока

Fujin передает три вида трафика, которые используют общий транспорт, но больше ничего не разделяют.
Обмен сервисными сообщениями передает запросы между узлами. Прием логов получает все,
что отправляют сборщики развертывания, группирует это и передает целыми блоками
в репозитории аналитики, поэтому хранилище видит пакеты, а не поток отдельных строк.
Уведомления пользователей — это бизнес-сообщения, адресованные человеку: заказ
прибыл, задание завершено, письмо ожидает.

Именно третьему потоку требуется отдельное имя. pushrouter — это сервис,
который размещает Fujin, а не маршрутизирует к нему, поскольку доставка является свойством
активных сеансов, которыми Fujin уже владеет: никакой другой процесс не знает,
какие браузеры пользователя подключены в данный момент. В ответ он сообщает,
сколько сеансов получили сообщение, что позволяет вызывающей стороне решить,
нужен ли также надежный канал, и хранит ограниченное окно повторной выдачи,
чтобы переподключившийся браузер увидел пропущенное. Все, что должно пережить перезапуск,
относится к репозиторию, а не сюда.

Уведомления содержат ключи перевода, а не предложения. Сервис, публикующий уведомление,
не знает язык читателя, поэтому отрендеренная строка могла бы быть правильной только для одного из них.

Трафик браузеров и кластера

Нативные узлы подключаются через кластерный транспорт. Браузеры и мобильные клиенты
входят через WebSocket и участвуют в той же модели обмена сообщениями. Это дает
интерактивным интерфейсам события в реальном времени без внедрения второй системы
маршрутизации приложений.

Крупные полезные нагрузки не передаются по управляющему каналу браузера. Клиенты получают
событие доступности и извлекают данные через соответствующий путь к содержимому,
что сохраняет отзывчивость сигнализации в реальном времени.

Контекст и доверие

Общая оболочка сообщения содержит данные корреляции, крайние сроки, ошибки и
доверенную область арендатора. Fujin передает этот контекст, не выводя его
из бизнес-полезной нагрузки и не изменяя его смысл. Получающие сервисы могут применять
правила авторизации и хранения к тому же контексту, который был установлен на границе.

Граница ответственности

Fujin отвечает за подключение и маршрутизацию целей. Он не выполняет бизнес-логику,
не выбирает обработчик внутри другого процесса, не хранит данные предметной области
и не определяет размещение компонентов. Эти обязанности остаются за узлом среды выполнения,
получающим сообщение, и за Ptah как плоскостью управления.