動画配信プラットフォーム Adobe Media Server

Adobe Coldfusion Adobe Media Server 製品に関するご質問・ご購入
HOMEコラム > HDS/HLS フェールオーバーのためのVarnish サンプルコード

HDS/HLS フェールオーバーのための
Varnish サンプルコード2/5

逆プロキシを構成する

逆プロキシは多様多種で、それぞれ独自の長所と短所を持ち合わせています。

 

理想として、選択した逆プロキシは次の機能を有しているべきです。

 

503フェイルオーバー
503フェイルオーバーは、パッケージャーの1つが503応答を返した場合にプロキシがプールの次のパッケージャーに再度要求を送信するプロキシ構成技術です。もし全てのパッケージャーが503応答を返した場合、プロキシはキャッシュ可能な(短時間、例えばフラグメント間隔の半分の間キャッシュされる)エラーを送信します。

 

URLに基づいたバックエンドの選択(HLS用)
HLSではM3U8ファイルはサイズが大きくなる一方である必要があります。つまり、その後の更新では、M3U8はその末尾部分にエントリーを付加することだけが可能です。複数のパッケージャーの前に逆プロキシが存在する時、パッケージャー間の自然な遅延によって続けて要求されるM3U8に微小な変動が起こりえます。結論として、M3U8の要求をリダイレクトするにあたってURLハッシング・スキームを有効にする事が強く推奨します。URLハッシングはURLと特定のパッケージャーを紐付け、これによって恒久的にM3U8が同じパッケージャーにサーブされてその後の更新においてM3U8が大きくなる一方であるよう保証してくれます。


応答のキャッシュ:
HDSとHLSアパッチ・モジュールは要求をキャッシュしない事、そしてパッケージャーは一般にプロキシよりもリソースに制限がある為、パッケージャーのサービング要求の負荷をプロキシに転送(キャッシュ経由で)する事で、通常システム全体に良いスケーラビリティが与えられます。

 

HDSでは、キャッシュの振る舞いを制御する第一のツールはhttpd.confにあるHttpStreamingF4MMaxAge、HttpStreamingBootstrapMaxAge、 HttpStreamingFragMaxAge環境設定変数を微調整する事です。これらの変数はパッケージャーから生成されるHTTP Cache-Control-max-age及びExpiresヘッダを、マニフェスト、ブートストラップ、及びフラグメント要求のそれぞれについて調整します。中間HTTPキャッシュはこれらのヘッダを使って、アセットをどのくらいの間キャッシュすることができるかを判定します。


我々の目標はmax-ageをうまく調整する事です。max-ageは負荷の殆どを吸収できるよう充分に長く、しかし同時に中間キャッシュが無効なデータを送信しない程度に短くなければなりません。

異なるアセットに対するキャッシュ条件

-フラグメント要求は長期間キャッシュされてもよいです。一度フラグメントが生成されると、それは永久的に同じ内容だからです。

 

-ブートストラップ要求は、ブートストラップ・ファイルが新たなフラグメントが生成される度に更新される為、短期間だけキャッシュされるべきです。HttpStreamingFragMaxAgeを断片の半分の持続期間に設定する事が推奨します。これにより中間キャッシュが定期的にブートストラップを取得し、クライアントは新たなフラグメントの存在を認識する事ができます。


-マニフェスト要求は長期間キャッシュされてもよいです。イベント中は、マニフェストに変更が加えられない事が一般的です。


HDSと同様に、HLSも最大のスケーラビリティを得る為、HTTP Cache-Control max-ageを常時必ず設定しなければならなりません。これらの変数はHLSM3U8MaxAgeとHLSTSSegmentMaxAge変数を通じて調整することができ、これらは各々M3U8とTSファイルの寿命を制御します。

 

TSファイルは、フラグメントのHLSアナログ(対応物)です。頻繁に変化しない為、長期間のmax-ageに設定する事ができます。

M3U8ファイルはブートストラップのHLSアナログ(対応物)です。短期間のmax-ageに設定されるべきです。フラグメント間隔の半分が一般に良い値とされています。


注意: オブジェクトのキャッシュ持続時間は将来的なリリースによって変わる可能性があります。