Amazonの動画配信サービス「Prime Video」は、運用コストの削減とスケーラビリティの問題を解決するために、Audio/Videoの品質検査ソリューションを再構築した経緯を説明している。EC2とECSにワークロードを移行した結果、運用コストの90%削減を達成したという。
Prime Videoのビデオ品質分析(VQA)チームは、Audio/Videoストリームの品質を検査するためのオリジナルツールを作成し、さまざまなユーザーエクスペリエンス・クオリティの課題を検出して適切な修復措置を適用している。
このソリューションの初期アーキテクチャはサーバーレス・インフラスタックの上に実装され、分析プロセス全体のステップを実行するマイクロサービスに基づいていた。このマイクロサービスはAudio/Videoストリームをビデオフレームや復号化されたオーディオバッファに分割したり、機械学習アルゴリズムを使用してフレームやオーディオバッファを分析したりすることにより、さまざまなストリームの欠陥を検出する。AWS Step Functionsは主要なプロセスオーケストレーションメカニズムとして使用され、複数のLambda関数の実行をコーディネートする。中間作業項目を含むすべてのAudio/VideoデータはAWS S3バケットに保存され、分析結果の配信にはAWS SNSトピックを用いている。
チームは水平方向のスケーラビリティを可能にする分散アーキテクチャを設計し、サーバーレスコンピューティングとストレージを活用して、実装のタイムラインの短縮を実現した。しばらくソリューションを運用した後、アーキテクチャが想定される負荷の5%程度しかサポートできないことが判明し、問題に直面するようになった。
Prime VideoのシニアソフトウェアエンジニアであるMarcin Kolny氏は、オリジナルアーキテクチャに対するチームの評価を語る。
多くのストリームをサービスに取り込む中で、インフラを大規模に運用することは非常にコストがかかることに気づいた。またスケーリングのボトルネックもあり、何千ものストリームを監視することができないことがわかった。そこでコストとスケーリングのボトルネックに着目し、既存サービスのアーキテクチャを見直すことにした。
運用コストが高いのは中間ワークアイテム(ビデオフレームやオーディオバッファ)を格納するS3バケットへの読み書きの量が多くステップ関数の状態遷移が多いことが原因だった。
もう1つの課題はプロセスのオーケストレーションが、分析されたAudio/Videoストリームの各秒に対して複数の状態遷移を伴うため、全体の状態遷移数のアカウント限界に達していたことである。
最終的にチームは、すべてのビジネスロジックを1つのアプリケーションプロセスに統合することにした。Kolny氏は変更後の設計を次のようにまとめている。
分散型のアプローチでは我々のような特殊なユースケースにはあまりメリットがないことがわかったので、すべてのコンポーネントを1つのプロセスにまとめました。これにより、ビデオフレームの中間ストレージとしてS3バケットを使用する必要がなくなり、データ転送はメモリ上で行われるようになったのです。また、単一のインスタンス内でコンポーネントを制御するオーケストレーションも実装しました。
その結果、ストリーム解析プロセス全体がEC2上のECSで実行され、検出を担うインスタンスのグループは、新しいインスタンスを追加する際に垂直スケーリングの限界にぶつからないように、異なるECSタスクに分散されている。
出典: https://www.primevideotech.com/video-streaming/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90
改修したアーキテクチャを展開した後、Prime Videoチームはコストを大幅に削減(90%減)を実現した。さらにEC2のコスト削減プランを適用して未来のコスト削減も確保した。またアーキテクチャの変更により、顧客が視聴するすべてのストリームをソリューションで処理することを妨げていた予期せぬスケーラビリティの制限にも対応したのである。