デフォルトでは、すべてのワーカーが 1 つの NATS サーバーを共有します。プールを宣言すると、特定のワーカー群に専用の NATS サーバーが割り当てられ、1 台のサーバーがダウンしても影響を受けるのはそのサーバーに接続されたワーカーだけになります。
プール名は固定で、default、stt、tts、agent のいずれかです。default プールは常に存在するため、設定を上書きしたい場合にのみ宣言します。それ以外の宣言されたプールには、それぞれ nats-server-<name> の Deployment と Service が用意されます。宣言されていないプールを参照するワーカーがあると、helm upgrade はレンダリング時に失敗し、宣言すべきプール名を出力します。
プールのフィールド
プールのトポロジー、トランスポート、または出力接続数を変更すると、helm upgrade で API が自動的にロールされます。プールを導入するアップグレードでは、API のロールアウトが 1 回発生することを想定してください。
プール間でワーカーをシャードする
ワーカーを 2 つのプールに分散しておくと、NATS Pod がクラッシュしてもデプロイメントは稼働を続けます。もう一方のプール側でリクエストは処理され続けます。この状態では利用可能な容量がおおむね半分になるため、Pod が復旧するまではレイテンシーの増加やキューイングが発生することが想定されます。
TTS の場合、API は tts プールと default プールに対して、それぞれの利用可能なワーカー容量に応じてリクエストを分配します。そのため通常運用ではどちらのプールも負荷を分担します。この動作にはリリースタグ sonic-20260713 以降が必要です。それより前のタグでは tts プールがプライマリで、default はフォールバックとなります。STT および agent のプールは常に、専用プールをプライマリ、default をフォールバックとして扱います。
トランスポート
プールはデフォルトで、タスクごとのストリーミング I/O を NATS 上で伝送します。transport: grpc を設定すると、そのトラフィックはワーカーから API へのポート 50051 の直接 gRPC 接続に切り替わり、TTFA と RTF が改善します。NATS はそのままタスクの割り当てとハートビートを伝送します。宣言するすべてのプールで設定してください。
Terraform モジュールは、フィールド名を snake_case にした形で Helm チャートのスキーマをそのまま反映します。natsPool を設定するワーカーには、対応する nats_pools エントリが必要です。
natsPool を未設定にするとデフォルトプールが使用されます。"default" を明示的に設定することは拒否されます。