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