Архитектура плагинов
Система плагинов PRX построена на среде выполнения WASM, обеспечивающей безопасную, портативную среду исполнения для стороннего кода. На этой странице описывается техническая архитектура.
Среда выполнения
PRX использует среду выполнения Wasmtime для исполнения WASM-плагинов. Каждый экземпляр плагина запускается в собственном WASM-хранилище с изолированной линейной памятью.
┌──────────────────────────────┐
│ Хост PRX │
│ │
│ ┌────────────────────────┐ │
│ │ Среда выполн. WASM │ │
│ │ ┌──────┐ ┌──────┐ │ │
│ │ │Плагин│ │Плагин│ │ │
│ │ │ A │ │ B │ │ │
│ │ └──┬───┘ └──┬───┘ │ │
│ │ │ │ │ │
│ │ API хост-функций │ │
│ └────────────────────────┘ │
└──────────────────────────────┘Граница хост-гость
Плагины взаимодействуют с хостом через определённый набор хост-функций. Граница обеспечивает:
- Типобезопасность -- все параметры функций валидируются
- Ограничения ресурсов -- использование памяти и CPU ограничено
- Проверки разрешений -- каждый вызов хост-функции авторизуется по манифесту разрешений плагина
Модель памяти
Каждый плагин имеет собственное пространство линейной памяти (по умолчанию 64 МБ). Данные между хостом и гостем обмениваются через общие буферы памяти с явной сериализацией.
Жизненный цикл плагина
- Загрузка -- WASM-бинарник загружается и валидируется
- Инициализация -- вызывается функция
init()плагина с конфигурацией - Готовность -- плагин регистрирует свои возможности (инструменты, каналы и т.д.)
- Выполнение -- хост вызывает функции плагина по мере необходимости
- Завершение -- вызывается функция
shutdown()плагина для очистки