プラグインアーキテクチャ
PRX プラグインシステムは、サードパーティコードにセキュアでポータブルな実行環境を提供する WASM ランタイムの上に構築されています。このページでは技術アーキテクチャについて説明します。
ランタイム
PRX は Wasmtime ランタイムを使用して WASM プラグインを実行します。各プラグインインスタンスは分離されたリニアメモリを持つ独自の WASM ストアで実行されます。
┌──────────────────────────────┐
│ PRX Host │
│ │
│ ┌────────────────────────┐ │
│ │ WASM Runtime │ │
│ │ ┌──────┐ ┌──────┐ │ │
│ │ │Plugin│ │Plugin│ │ │
│ │ │ A │ │ B │ │ │
│ │ └──┬───┘ └──┬───┘ │ │
│ │ │ │ │ │
│ │ Host Functions API │ │
│ └────────────────────────┘ │
└──────────────────────────────┘ホスト-ゲスト境界
プラグインは定義されたホスト関数のセットを通じてホストと通信します。境界は以下を適用します:
- 型安全性 -- すべての関数パラメータが検証される
- リソース制限 -- メモリと CPU 使用量が制限される
- 権限チェック -- 各ホスト関数呼び出しがプラグインの権限マニフェストに対して認可される
メモリモデル
各プラグインは独自のリニアメモリ空間(デフォルト 64 MB)を持ちます。ホストとゲスト間のデータは、明示的なシリアライゼーションを伴う共有メモリバッファを通じて交換されます。
プラグインライフサイクル
- ロード -- WASM バイナリがロードされ検証される
- 初期化 -- プラグインの
init()関数が設定と共に呼び出される - レディ -- プラグインがその機能(ツール、チャネル等)を登録
- 実行 -- ホストが必要に応じてプラグイン関数を呼び出す
- シャットダウン -- クリーンアップのためにプラグインの
shutdown()関数が呼び出される