セッションワーカー
セッションワーカーは、エージェントセッションにプロセスレベルの分離を提供します。すべてのセッションを単一プロセスで実行する代わりに、PRX は専用のワーカープロセスをスポーンして障害を封じ込め、OS レベルでリソース制限を強制できます。
モチベーション
プロセス分離にはいくつかの利点があります:
- 障害封じ込め -- 1 つのセッションでのクラッシュが他のセッションに影響しない
- リソース制限 -- cgroups または OS メカニズムを通じてセッションごとのメモリと CPU 制限を強制
- セキュリティ境界 -- 異なる信頼レベルのセッションが別々のアドレス空間で実行
- グレースフルデグラデーション -- メインプロセスが失敗したワーカーを再起動可能
アーキテクチャ
┌──────────────┐
│ Main Process │
│ (Supervisor) │
│ │
│ ┌──────────┐ │ ┌─────────────┐
│ │ Session A ├─┼───►│ Worker Proc │
│ └──────────┘ │ └─────────────┘
│ ┌──────────┐ │ ┌─────────────┐
│ │ Session B ├─┼───►│ Worker Proc │
│ └──────────┘ │ └─────────────┘
└──────────────┘メインプロセスはスーパーバイザーとして機能し、IPC(Unix ドメインソケットまたはパイプ)を介してワーカーと通信します。
通信プロトコル
ワーカーは IPC チャネル上の長さプレフィックス付き JSON プロトコルを使用してスーパーバイザーと通信します:
- Spawn -- スーパーバイザーがセッション設定をワーカーに送信
- Messages -- ユーザー/エージェントメッセージの双方向ストリーミング
- Heartbeat -- 定期的なヘルスチェック
- Shutdown -- グレースフル終了シグナル
設定
toml
[agent.worker]
enabled = false
ipc_socket_dir = "/tmp/prx-workers"
heartbeat_interval_secs = 10
max_restart_attempts = 3リソース制限
Linux で実行する場合、セッションワーカーは cgroup ベースのリソース制限を適用できます:
toml
[agent.worker.limits]
memory_limit_mb = 256
cpu_shares = 512関連ページ
- エージェントランタイム -- アーキテクチャ概要
- エージェントループ -- コア実行サイクル
- セキュリティサンドボックス -- サンドボックスバックエンド