OpenAIが9億ユーザーに低遅延音声AIを提供する方法
本記事では、OpenAIがWebRTCと革新的なアーキテクチャ分割を活用して、9億ユーザーに低遅延の音声AIを提供する方法を詳述します。Kubernetes上でのWebRTC展開の課題を分析し、ステートレスリレーとステートフルトランシーバーの分離、ICE ufragを使ったルーティング、グローバルリレーによるレイテンシー削減を紹介します。
OpenAIは毎週9億ユーザーに音声AIサービスを提供しており、低遅延を実現するためにWebRTCプロトコルを採用しています。WebRTCは安定したIPとポートを持つサーバー向けに設計されていますが、Kubernetesはアドレスを使い捨てとみなすため、デプロイに課題が生じます。従来の解決策はSFU(選択的転送ユニット)ですが、OpenAIのトラフィックは主にユーザーとモデルの1対1の会話であるため、より効率的なアーキテクチャが選択されました。
このアーキテクチャはシステムを2つの部分に分割します。地理的エッジでプロトコル対応のパケットルーティングを行うステートレスリレーと、すべてのWebRTC状態を管理するステートフルトランシーバーです。両者を結びつける鍵は、接続確立中に交換されるICEユーザー名フラグメント(ufrag)です。リレーは新しいセッションの最初のSTUNバインディング要求からufragを読み取り、ルーティングメタデータをデコードして、正しいトランシーバーにパケットを転送します。これにより、ホットパスでのデータベースルックアップを回避し、レイテンシーを低減します。最初のパケット以降は、確立されたセッションマッピングに従って転送され、ufragの解析は不要になります。
シグナリング段階では、トランシーバーが共有リレーVIPとUDPポートを生成し、クライアントはその安定したアドレスにパケットを送信します。リレーは送信元アドレスからトランシーバー宛先へのインメモリマップを維持し、Redisキャッシュで迅速なリカバリを可能にします。レイテンシーをさらに削減するため、OpenAIはグローバルリレーを展開しました。これは世界中に分散されたリレーエントリポイントであり、すべて同じパケット転送動作を実行します。地理的な分散により、クライアントからOpenAIネットワークへの最初のホップが短縮され、レイテンシーが低下し、安定性が向上します。
アーキテクチャ以外にも、OpenAIはソケットレベルの最適化として共有UDPソケットを使用してポート枯渇を回避し、ユーザースペースGo実装によるパフォーマンス向上を実現しています。SFUやTURNなどの代替案も検討されましたが、1対1の会話に最適化されたこの中継‑トランシーバー分離アーキテクチャが採用されました。全体として、OpenAIはWebRTCの既存のフィールドを活用したルーティングにより、データベース依存を排除し、グローバルに低遅延でスケーラブルな音声AIシステムを構築しています。