T
Сами модули могут быть реализованы на множестве разных технлогий. Доддерживаемые технологии расширяются динамически, посредством добавления новых драйверов для дапуска того или иного типа модулей.
Сейчас планируются следующие драйверы:
- Unix. Запуск модулей через создание чаилд процесса в ОС.
- Wasm. Запуск
.wasm
модулей.- Docker. Запуск OCI контейнеров, через обращение к докеру.
Для осуществления доставки модулей, реализуется object storage, который является постоянным хранилищем состояния для разворачиваемой архитектуры. Там же хранятся ресурсы, необходимые для запуска модулей (OCI контейнеты, wasm байт-код и прочее). Благодаря возможности сетивой интеграции этих хранилищ, Будет реализована возможность загрузки необходимого модуля из сети (процесс чем-то схож с концепцией proxy из golang).
Для обеспечения взаимодействия межу модулями, используется шина данных реализующая такие виды коммуникации:
- Push. Простая доставка сообщений целевому модулю.
- Req/Res. Доставка сообщения, которое может иметь связанное с ним ответное сообщение (RPC).
- Pub/Sub. Возможность подписаться на события.
Маршрутизация сообщений происходит благодаря координатору. Этот компонент реализует адресацию модулей.
Для экономии ресурсов, существует модуль terminator, который отслеживает дерево зависимх модулей, и при необходимости, убивает те модули, которые не связаны с основным деревом. (Механизм подобен остановке осиротевших процессов в ОС).