すべてのプロダクト
Search
ドキュメントセンター

Server Load Balancer:QUICを使用してビデオおよびオーディオコンテンツの配信を高速化

最終更新日:Sep 18, 2024

クイックUDPインターネット接続 (QUIC) は、特にネットワーク接続が弱い場合や、Wi-Fiとセルラーネットワーク間で頻繁に接続が切り替えられる場合に、クライアントからのアクセスを高速化できるネットワークプロトコルです。 QUICは、再接続なしで接続多重化を実現し、アクセスを高速化し、データ転送を保護します。

QUICの概要

QUICはSSLと同じレベルのセキュリティを提供し、接続多重化をサポートします。 接続が弱く、ネットワーク待ち時間が長く、パケット損失率が高いシナリオでは、QUICはサービスの可用性を保証します。 QUICは、オペレーティングシステムやカーネルに関係なく、アプリケーション層で異なる輻輳制御アルゴリズムを実装できます。 TCPと比較して、QUICはサービス要件に基づいた柔軟な調整をサポートします。 QUIC は、TCP の最適化でボトルネックが発生した場合の適切な代替手段です。

ショートビデオやライブストリーミングサービスが普及するにつれて、ストリーミングプラットフォームはビジネス要件を満たすために高帯域幅と低ネットワーク遅延を必要とします。 QUICは、ネットワーク遅延を最小限に抑え、ビデオバッファリングを削減し、オーディオおよびビデオコンテンツの配信を高速化し、データ転送を保護します。

サポートされるQUICプロトコルタイプ

Application Load Balancer (ALB) はgQUICとiQUICをサポートしています。 HTTP/3は、iQUICに基づくアプリケーション層プロトコルです。 HTTP/3は、iQUICを使用して、多重化、輻輳制御、損失検出、および再送信を実装します。 HTTP/3は、より高速な接続確立をサポートし、ヘッドオブラインブロッキングの問題を排除します。

ALBは、gQUICバージョンQ46、Q43、およびQ39とHTTP/3 (h3) をサポートしています。

HTTPバージョンネゴシエーションの仕組み

HTTPSリスナーのQUICアップグレードが有効になっている場合、ALBはHTTP/3とgQUICをクライアントにアドバタイズします。 HTTP/3はgQUICよりも優先度が高い。 したがって、HTTP/3を使用するクライアントは、ALBとの接続を確立するときに優先度が高くなります。

  • クライアントがHTTP/3経由でALBとの接続を確立できなかった場合、HTTPSまたはHTTP/2を使用して接続を確立します。

  • クライアントがHTTP/3を介してALBとの接続を確立する場合、クライアントはHTTP/3に関連するCookieを使用します。

  • ALBは、QUICアップグレードが有効かどうかに関係なく、クライアントへの接続を開始できます。

ALBは、Alt-Svc HTTPレスポンスヘッダーを使用して、サポートされているプロトコルをクライアントに通知します。 次のサンプルコードに例を示します。

Alt-Svc : h3=":$quic_port"; ma=3600,quic=":$quic_port"; v="46,43,39"; ma=3600

リスナーに対してQUICアップグレードを有効にすると、クライアントは次のシナリオでHTTP/3の代わりにHTTPSまたはHTTP/2を使用する可能性があります。

  • クライアントでサポートされているHTTP/3バージョンは、ALBでサポートされているHTTP/3バージョンと互換性がありません。

  • ALBは、HTTP/3の有効化を妨げるUDPトラフィック輻輳またはレート制限を検出します。

  • クライアントはHTTP/3をサポートしていません。 したがって、HTTP/3ネゴシエーションは開始されません。

クライアント要件

  • Google Chromeを使用している場合は、ALBへのQUICリクエストを直接開始できます。

  • Google Chromeを使用してQUICリスナーにアクセスする前に、ブラウザがALBで使用されるQUICバージョンをサポートしていることを確認してください。

    • ALBでサポートされている最新のgQUICバージョンはQ46で、Google Chrome 74〜81と互換性があります。

    • ALBでサポートされている最新のHTTP/3バージョンはh3で、Google Chrome 87以降と互換性があります。

  • 自己開発アプリケーションなどの他のクライアントを使用する場合、クライアントは、LSQUICクライアント、Cronet、ngtcp2、およびquicheライブラリなどのQUICをサポートするネットワークライブラリと統合されている必要があります。

サンプルシナリオ

Google Chromeを使用してALBにアクセスすると、ALBはリスナーに関連付けられているドメイン名example.comに基づいてバックエンドサーバーにリクエストを転送します。 リクエストの配信に使用されるリスナーは、次のシナリオで異なります。

  • HTTPSリスナーとQUICリスナーが設定されている場合は、QUICリスナーが使用されます。 ブラウザからexample.comにアクセスすると、ALBのQUICリスナーがデフォルトのバックエンドサーバーグループRS1にリクエストを配信します。

  • QUICリスナーが使用できない場合、HTTPSリスナーが自動的に引き継ぎます。 ブラウザからexample.comにアクセスすると、ALBのHTTPSリスナーがデフォルトのバックエンドサーバーグループRS1にリクエストを配信します。

前提条件

  • ALBインスタンスが作成されました。 詳細については、「ALBインスタンスの作成」をご参照ください。

  • RS1という名前のサーバーグループが作成されます。 詳細については、「サーバーグループの作成と管理」をご参照ください。

  • ECS01という名前のElastic Compute Service (ECS) インスタンスがサーバーグループRS1に追加されます。 NGINXビデオサービスはECS01でホストされます。

  • SSL証明書がALBインスタンスにデプロイされています。 証明書はドメイン名example.comに関連付けられています。

ステップ1: QUICリスナーの作成

  1. ALBコンソールにログインします。

  2. 上部のナビゲーションバーで、ALBインスタンスがデプロイされています。

  3. [インスタンス] ページで、管理するALBインスタンスのIDをクリックします。 [リスナー] タブで、[リスナーの作成] をクリックします。

  4. リスナーの設定ウィザードページで、次のパラメーターを設定し、次へをクリックします。

    パラメーター

    説明

    リスナープロトコルの選択

    リスナープロトコルを選択します。

    この例では、QUICが選択されています。

    リスナーポート

    ALBインスタンスがリッスンするポートを選択します。 ALBインスタンスはポートをリッスンし、リクエストをバックエンドサーバーに転送します。

    有効な値: -1 から 65535

    説明

    同じALBインスタンスで、同じプロトコルを使用するリスナーのポートは一意である必要があります。 HTTPリスナーとHTTPSリスナーは異なるポートを使用する必要があります。

    リスナー名

    リスナーの名前を入力します。

    タグ

    [タグキー] および [タグ値] パラメーターを設定して、タグを追加します。 1つ以上のタグを追加できます。

    タグを指定した後、[リスナー] タブのタグでリスナーをフィルタリングできます。

    詳細設定

    [変更] をクリックして、詳細設定を設定できます。

    アイドル接続タイムアウト期間

    アイドル接続のタイムアウト期間を指定します。 単位は秒です。 有効な値: 1 ~ 60。 より長いタイムアウト期間を指定するには、Quota Centerコンソールに移動します。

    指定されたタイムアウト期間内にリクエストが受信されない場合、ALBは接続を閉じます。 別の要求が受信されると、ALBは新しい接続を確立する。

    接続要求タイムアウト

    リクエストのタイムアウト時間を指定します。 単位は秒です。 有効な値: 1 ~ 180 より長いタイムアウト期間を指定するには、Quota Centerコンソールに移動します。

    リクエストタイムアウト期間内にバックエンドサーバーから応答が受信されない場合、ALBはHTTP 504エラーコードをクライアントに返します。

    圧縮

    圧縮を有効にすると、特定の種類のファイルが圧縮されます。 圧縮を無効にすると、ファイルは圧縮されません。

    Brotliはすべてのファイルタイプをサポートします。 GZIPは、text/xmltext/plaintext/cssapplication/javascriptapplication/x-javascriptapplication/rss + xmlapplication/atom + xmlapplication/xmlapplication/jsonのファイルタイプをサポートしています。

    HTTPヘッダーの追加

    次のオプションを選択できます。

    • ALB IDを取得するSLB-IDの追加: ALBインスタンスのIDを保持するためにSLB-IDヘッダーを追加します。

    • X-Forwarded-Protoを追加してリスニングプロトコルを取得: X-Forwarded-Protoヘッダーを追加して、リスナープロトコルを保持します。

    • X-Forwarded-Portをリスニングポートの取得に追加: X-Forwarded-Portヘッダーを追加して、リスナーポートを保持します。

  5. では、SSL証明書の設定ステップ、サーバー証明書を選択し、次へ.

  6. では、サーバーグループの選択ステップ、選択サーバータイプサーバーグループを選択し、バックエンドサーバーを表示し、次へ.

  7. では、構成レビューステップ、設定を確認し、送信.

ステップ2: HTTPSリスナーの作成

HTTPSリスナーを作成するときは、QUICアップグレードを有効にして、作成したQUICリスナーをHTTPSリスナーに関連付けます。

  1. [インスタンス] ページで、[ステップ1] でQUICリスナーを作成したALBインスタンスを見つけ、そのIDをクリックします。

  2. インスタンスの詳細タブをクリックし、リスナータブをクリックし、リスナーの作成をクリックします。

  3. リスナーの設定ステップで、次のパラメータを設定し、次へをクリックします。

    パラメーター

    説明

    リスナープロトコルの選択

    リスナープロトコルを選択します。

    この例では、HTTPSが選択されています。

    リスナーポート

    ALBインスタンスがリッスンするポートを入力します。 ALBインスタンスはポートをリッスンし、リクエストをバックエンドサーバーに転送します。 この例では、ポート443が使用される。 ほとんどの場合、ポート80はHTTPに使用され、ポート443はHTTPSに使用されます。

    有効な値: -1 から 65535

    説明

    ALBインスタンスがリッスンするポートは一意である必要があります。

    リスナー名

    リスナーの名前を入力します。 名前は2 ~ 256文字で、英数字、ピリオド (.) 、アンダースコア (_) 、ハイフン (-) 、コンマ (,) 、セミコロン (;) 、スラッシュ (/) 、アット記号 (@) を使用できます。

    詳細設定

    詳細設定の横にある [変更] をクリックして、詳細設定を設定できます。

    HTTP/2の有効化

    HTTP/2を有効にするかどうかを指定します。

    アイドル接続タイムアウト期間

    アイドル接続のタイムアウト期間を指定します。 単位は秒です。 有効な値: 1 ~ 60。

    指定されたタイムアウト期間内にリクエストが受信されない場合、SLBは接続を閉じます。 要求が受信されると、SLBは新しい接続を確立する。

    説明

    この機能はHTTP/2リクエストでは使用できません。

    接続要求タイムアウト

    リクエストのタイムアウト時間を指定します。 単位は秒です。 有効な値: 1 ~ 180

    リクエストタイムアウト期間内にバックエンドサーバーから応答が受信されない場合、ALBはHTTP 504エラーコードをクライアントに返します。

    圧縮

    圧縮を有効にすると、特定のタイプのファイルが圧縮されます。 圧縮を無効にすると、ファイルは圧縮されません。

    Brotliはすべてのファイルタイプをサポートします。 Gzipは、text/xmltext/plaintext/cssapplication/javascriptapplication/x-javascriptapplication/rss + xmlapplication/atom + xmlapplication/xmlapplication/jsonのファイルタイプをサポートしています。

    HTTPヘッダーの追加

    追加するHTTPヘッダーを選択します。 有効な値:

    • ALBがX-Forwarded-For HeaderでクライアントIPをフィルタリングできるようにする: クライアントIPアドレスを取得します。

    • ALB IDを取得するSLB-IDの追加: ALBインスタンスのIDを取得します。

    • Add X-Forwarded-Proto to Retrieve Listening Protocol: リスナープロトコルを取得します。

    • X-Forwarded-Clientcert-subjectdnをクライアントサーバー証明書の所有者情報の取得: クライアント証明書に関する所有者情報を取得します。

    • X-Forwarded-Clientcert-issuerdnを追加してクライアント証明書発行者情報を取得: クライアント証明書を発行する権限に関する情報を取得します。

    • Add X-Forwarded-Clientcert-fingerprint to Retrieve Fingerprint of Client Certificate: クライアント証明書のフィンガープリントを取得します。

    • クライアント証明書の検証結果を取得するためにX-Forwarded-Clientcert-clientverifyを追加: クライアント証明書の検証結果を取得します。

    • [X-Forwarded-Portをリスニングポートの取得]: リスナーポートを取得します。

    • [X-Forwarded-Client-srcportをクライアントポートの取得]: クライアントポートを取得します。

    QUICアップデート

    QUICアップグレードを有効にするかどうかを指定します。 この機能を使用するには、[関連するQUICリスナー] ドロップダウンリストからQUICリスナーを選択する必要があります。

  4. SSL証明書の設定ステップで、サーバー証明書を選択し、次へをクリックします。

    説明

    TLSセキュリティポリシーを設定するには、[詳細設定] の横にある [変更] をクリックします。

  5. サーバーグループの選択ステップで、選択サーバータイプサーバーグループを選択し、バックエンドサーバーを表示し、次へをクリックします。

  6. 構成レビューステップで、設定を確認し、送信をクリックします。

ステップ3: CNAMEレコードの作成

CNAMEレコードを使用して、ドメイン名example.comALBのpublicdomain名にマップします。

  1. ALBコンソール にログインします。

  2. 上部のナビゲーションバーで、リージョンを選択します。

  3. を検索するFind theALBドメイン名を管理およびコピーするインスタンス。

  4. CNAMEレコードを作成するには、次の操作を実行します。

    1. Alibaba Cloud DNSコンソール にログインします。

    2. DNSの管理ページで、ドメイン名の追加 をクリックします。

    3. ドメイン名の追加ダイアログボックスで、ホストのドメイン名を入力し、OKをクリックします。

      重要

      CNAMEレコードを作成する前に、TXTレコードを使用してドメイン名の所有権を確認する必要があります。

    4. 管理するドメイン名を見つけて、をクリックします。DNS設定で、アクション列を作成します。

    5. DNS設定ページで、レコードの追加をクリックします。

    6. DNSレコードの追加パネルで、次のパラメータを設定し、OKをクリックします。

      パラメーター

      説明

      レコードタイプ

      ドロップダウンリストから [CNAME] を選択します。

      ホスト名

      ドメイン名のプレフィックスを入力します。

      DNSリクエストソース

      [デフォルト] を選択します。

      レコード値

      ALBインスタンスのドメイン名であるCNAMEを入力します。

      TTL

      DNSサーバーにキャッシュされるCNAMEレコードの有効期限 (TTL) 値を選択します。 この例では、デフォルト値が使用されます。

      説明
      • CNAMEレコードを作成すると、すぐに有効になります。 レコードを変更すると、レコードはレコードのTTLに基づいて有効になります。 デフォルトでは、TTLは10分です。

      • 作成するCNAMEレコードが既存のレコードと競合する場合は、別のドメイン名を指定することを推奨します。 詳細については、「競合するDNSレコードのルール」をご参照ください。

ステップ4: 結果を確認する

この例では、Windowsクライアントが使用されます。 ALBインスタンスにアクセスするには、ブラウザにexample.comを入力します。 この例では、NGINXビデオサービスがサーバグループRS1のECS01にデプロイされている。

  • HTTPSリスナーとQUICリスナーが設定されており、ブラウザにexample.comを入力してF12を押すと、現在のwebページのプロトコルHTTP/3として表示されます。 応答時間は93ミリ秒です。

    quic

  • QUICリスナーが使用できない場合、ブラウザにexample.comを入力してF12キーを押すと、現在のwebページのプロトコルHTTP/2として表示されます。 応答時間は148ミリ秒です。

    https

結果は、HTTP/3がビデオサービスへのクライアントアクセスを高速化することを示しています。