Application Load Balancer (ALB) は、シングルゾーンの負荷分散によるリソースのボトルネックを防ぐために、クロスゾーン負荷分散をサポートしています。しかし、金融の定量取引やリアルタイム通信など、遅延の影響を受けやすいビジネスシナリオでは、クロスゾーン負荷分散が不要なネットワーク遅延を引き起こす可能性があります。このような場合、クロスゾーン負荷分散を無効にして、ALB がリージョン内の単一ゾーン内でリクエストを分散するように設定することで、ビジネスにおけるリクエストのアクセス速度を向上させることができます。
概要
デフォルトでは、ALB インスタンスに対してクロスゾーン負荷分散が有効になっています。着信リクエストは、指定されたリージョン内で選択されたすべてのゾーンにデプロイされているバックエンドサービスに分散されます。サーバーグループに対してこの機能を無効にすると、負荷は各単一ゾーン内で分散されます。
ALB サービスのクロスゾーン負荷分散を無効にする前に、各ゾーンに十分なリソースを持つバックエンドサーバーが少なくとも 1 台利用可能であることを確認してください。ビジネスへの意図しない影響を避けるため、この機能を無効にする前に、その仕組みを理解していることを確認してください。
メリット
遅延の削減:リクエストを単一ゾーン内で分散することで、ゾーン間のデータ転送によって生じるネットワーク遅延をなくし、ビジネスにおけるリクエストのアクセス速度を向上させます。
利用シーン
遅延の影響を受けやすいシナリオ:
金融取引:集中的な定量取引では、迅速なトランザクション処理を可能にするために低遅延が求められます。これにより、トランザクションの失敗やタイムアウトのリスクが軽減されます。
リアルタイム通信:ビデオ会議やインスタントメッセージ (IM) では、シームレスでスムーズなユーザーエクスペリエンスのために低遅延が必要です。
モノのインターネット (IoT):リアルタイムのデータ収集では、迅速なデータ分析とリクエストへの素早い応答を可能にするために低遅延が求められます。これにより、データ収集システム全体の効率と精度が向上します。
制限事項
クロスゾーン負荷分散が無効になっているサーバーグループは、標準および WAF 有効の ALB インスタンスにのみ関連付けることができます。基本 ALB インスタンスには関連付けることができません。
クロスゾーン負荷分散が無効になっている場合、[セッション維持] を有効にすることはできません。
IP タイプのサーバーグループで、[リモート IP] が有効になっている場合、クロスゾーン負荷分散を無効にすることはできません。
このパラメーターは、Function Compute タイプのサーバーグループでは利用できません。
シナリオ例
ある企業が、中国 (杭州) リージョンで高可用性ビジネスを展開しており、デフォルトでクロスゾーン負荷分散が有効になっています。ビジネスの変革により、この企業は遅延に対してより高い要件を持つようになりました。
この場合、企業はクロスゾーン負荷分散を無効にすることで、ALB がリージョン内の単一ゾーンにデプロイされたバックエンドサービスにのみリクエストを分散するようにできます。これにより、ネットワーク遅延が削減され、企業のビジネスにおけるリクエストのアクセス速度が向上します。
前提条件
中国 (杭州) リージョンの複数のゾーンに標準 ALB インスタンスが作成されていること。この例では、ALB インスタンスはゾーン H とゾーン K に作成されています。詳細については、「ALB インスタンスの作成と管理」をご参照ください。
サーバーグループが作成されていること。詳細については、「サーバーグループの作成と管理」をご参照ください。
Elastic Compute Service (ECS) インスタンスの ECS01 と ECS02 が、ALB インスタンスに関連付けられたサーバーグループに追加されていること。ECS01 はゾーン H に、ECS02 はゾーン K にデプロイされています。両方のインスタンスにはアプリケーションサービスがデプロイされています。
ALB インスタンスにリスナーが設定され、作成されたサーバーグループが ALB インスタンスに関連付けられていること。詳細については、「HTTP リスナーの追加」、「HTTPS リスナーの追加」、および「QUIC リスナーの追加」をご参照ください。
ドメイン名が登録され、そのドメイン名に対して ICP 登録番号が取得され、カスタムドメイン名を ALB インスタンスのドメイン名にマッピングするための CNAME レコードが設定されていること。詳細については、「ジェネリックドメイン名の登録」、「ICP 登録プロセス」、および「ALB インスタンスの CNAME レコードの設定」をご参照ください。
操作手順
ステップ 1:クロスゾーン負荷分散の無効化
このステップでは、サーバーグループが作成済みであるという前提で、サーバーグループの設定を変更してクロスゾーン負荷分散を無効にする方法について説明します。サーバーグループを作成していない場合は、作成時にクロスゾーン負荷分散を無効にすることができます。
ALB コンソールにログインします。
[サーバーグループ] ページで、管理したいサーバーグループを見つけ、サーバーグループ ID をクリックします。
[詳細] ページの [基本情報] セクションで、[基本情報の変更] をクリックします。
[基本情報の変更] ダイアログボックスで、[詳細設定] をクリックし、[クロスゾーン負荷分散] をオフにしてから、[保存] をクリックします。
(オプション) ステップ 2:クロスゾーン負荷分散が無効になっていることの確認
このステップでは、設定変更が有効であるかどうかのみを確認します。ステップ 3 では、設定変更後の実際のネットワーク遅延をテストします。
ALB インスタンスの [インスタンス詳細] ページの [ゾーン] タブで、[ゾーン H] と [ゾーン K] の Elastic IP アドレス (EIP) をそれぞれコピーします。
ブラウザを使用してゾーン H の EIP (例:
http://<EIP_of_Zone_H>) にアクセスします。ブラウザを複数回更新します。ゾーン H にデプロイされているバックエンドサーバー ECS01 のみにアクセスできます。
ブラウザを使用してゾーン K の EIP (例:
http://<EIP_of_Zone_K>) にアクセスします。ブラウザを複数回更新します。ゾーン K にデプロイされているバックエンドサーバー ECS02 のみにアクセスできます。
ステップ 3:ネットワーク遅延のテスト
テスト結果はリージョンやゾーンによって異なる場合があります。実際のビジネスのテスト結果が優先されます。この例では、パケット遅延を確認します。
テストクライアントとして、ドイツ (フランクフルト) リージョンにインターネットに接続されたインスタンス ECS03 を作成します。テストに使用できる既存のサーバーがある場合は、作成する必要はありません。
テストクライアント ECS03 にログインし、次のコマンドを実行してアクセス遅延をテストします:
curl http://www.example.com -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n"関連するパラメーターは次のとおりです:
time_connect:接続時間。TCP 接続を確立するために消費される時間。単位:秒。
time_starttransfer:データ転送時間。クライアントがバックエンドサーバーにリクエストを送信してから、最初のバイトがクライアントに送信されるまでの時間。単位:秒。
time_total:合計接続時間。クライアントがバックエンドサーバーにリクエストを送信してから、クライアントがバックエンドサーバーから最後のバイトを受信するまでの時間。単位:秒。
クロスゾーン負荷分散が有効な場合の応答時間:

クロスゾーン負荷分散が無効な場合の応答時間:

テスト結果から、クロスゾーン負荷分散を無効にすると、接続時間、データ転送時間、および合計接続時間がすべて短縮されることがわかります。
よくある質問
クロスゾーン負荷分散を無効にした後、503 ステータスコードが返されるのはなぜですか。
考えられる原因は、ご利用の ALB インスタンスに関連付けられたサーバーグループに、ALB インスタンスがデプロイされているゾーン内で利用可能なバックエンドサーバーが存在しないことです。ALB インスタンスはリクエストを転送するバックエンドサーバーがないため、503 ステータスコードが返されます。
クロスゾーン負荷分散を無効にした後、セッション維持機能を有効にできないのはなぜですか。
セッション維持を有効にすると、あるゾーンで ALB インスタンスが受信したリクエストが、別のゾーンのバックエンドサーバーに継続的に転送される可能性があります。クロスゾーン負荷分散を無効にすると、セッション維持は実装できません。
ALB サービスのどのゾーンにもデプロイされていないバックエンドサーバーのヘルスチェックステータスはどうなりますか。
ALB インスタンスのクロスゾーン負荷分散を無効にすると、ALB サービスのどのゾーンにもデプロイされていないバックエンドサーバーは [未使用] と宣言されます。
関連ドキュメント
ALB が利用可能なリージョンとゾーンについては、「リージョンとゾーン」をご参照ください。
設定に関する問題が発生した場合は、「ALB に関するよくある質問」をご参照ください。
ヘルスチェックの異常が発生した場合は、「ALB のヘルスチェック問題のトラブルシューティング」をご参照ください。
API 操作を呼び出してサーバーグループを作成する方法については、「CreateServerGroup」をご参照ください。
API 操作を呼び出してバックエンドサーバーの設定を更新する方法については、「UpdateServerGroupServersAttribute」をご参照ください。
API 操作を呼び出してサーバーグループを一覧表示する方法については、「ListServerGroups」をご参照ください。
API 操作を呼び出してヘルスチェックステータスをクエリする方法については、「GetListenerHealthStatus」をご参照ください。