Application Load Balancer (ALB) は、単一のアベイラビリティゾーンにおけるリソースのボトルネックを防ぐために、クロスゾーン負荷分散をサポートしています。しかし、定量金融取引やリアルタイム通信など、遅延の影響を受けやすいシナリオでは、この機能により余分な遅延が発生する可能性があります。クロスゾーン負荷分散を無効にすることで、ALB が同じアベイラビリティゾーン内のバックエンドサーバーにのみトラフィックを分散するように設定できます。このアプローチにより、ゾーン間のデータ転送が回避され、遅延が削減され、アプリケーションの応答性が向上します。
仕組み
デフォルトでは、ALB インスタンスに対してクロスゾーン負荷分散が有効になっています。着信リクエストは、指定されたリージョン内で選択されたすべてのアベイラビリティゾーンにデプロイされたバックエンドサービスに分散されます。サーバーグループでこの機能を無効にすると、負荷は各シングルゾーン内で分散されます。
クロスゾーン負荷分散を無効にする前に、サービスの中断を防ぐため、ご利用の ALB インスタンスが使用する各アベイラビリティゾーンに十分なバックエンドサーバーリソースがあることを確認してください。
主な特徴
遅延の削減:同じアベイラビリティゾーン内でトラフィックを分散することで、ゾーン間のデータ転送遅延が削減され、アプリケーションの応答速度が向上します。
利用シーン
この機能は、低遅延が求められるシナリオに最適です。
-
金融取引:高頻度の定量取引において、低遅延は迅速なトランザクション処理を可能にし、障害やタイムアウトのリスクを低減します。
-
リアルタイム通信:ビデオ会議やインスタントメッセージ (IM) などのアプリケーションにおいて、低遅延はスムーズなユーザーエクスペリエンスを保証します。
-
モノのインターネット (IoT):リアルタイムデータ収集などのシナリオにおいて、低遅延はタイムリーなデータ分析と応答を保証し、システム全体の効率と精度を向上させます。
制限事項
-
クロスゾーン負荷分散の無効化をサポートしているのは、標準および WAF 対応の ALB インスタンスのみです。この機能は、ベーシック ALB インスタンスでは利用できません。
-
クロスゾーン負荷分散が無効になっている場合、セッション維持を有効にすることはできません。
-
リモート IP が有効になっている IP ベースのサーバーグループでは、クロスゾーン負荷分散を無効にすることはできません。
-
この設定は、Function Compute タイプのサーバーグループには適用されません。
シナリオ例
ある企業が、中国 (杭州) リージョンに高可用性アプリケーションをデプロイしており、デフォルトでクロスゾーン負荷分散が有効になっています。ビジネス要件の変更により、アプリケーションにはより低い遅延が求められるようになりました。
この新しい要件を満たすため、企業はクロスゾーン負荷分散を無効にします。これにより、ALB インスタンスは同じアベイラビリティゾーン内のバックエンドサーバーにのみトラフィックをルーティングするように設定され、遅延が削減され、アプリケーションの速度が向上します。
前提条件
-
中国 (杭州) リージョンで標準 ALB インスタンスを作成し、作成時に複数のアベイラビリティゾーン (例:ゾーン H とゾーン K) を選択済みであること。詳細については、「ALB インスタンスの作成と管理」をご参照ください。
-
サーバーグループを作成済みであること。
-
ECS インスタンス ECS01 と ECS02 をサーバーグループに追加済みであること。ECS01 はアベイラビリティゾーン H に、ECS02 はアベイラビリティゾーン K に配置され、両方のインスタンスにアプリケーションサービスがデプロイされていること。
-
インスタンスにリスナーを設定し、作成したサーバーグループを関連付けていること。詳細については、「HTTP リスナーの追加」、「HTTPS リスナーの追加」、または「QUIC リスナーの追加」をご参照ください。
-
ドメイン名を登録し、ICP 登録を完了し、ドメイン名が ALB インスタンスを指すように CNAME レコードを設定済みであること。
操作手順
ステップ1:クロスゾーン負荷分散の無効化
このトピックでは、既存のサーバーグループでクロスゾーン負荷分散を無効にする方法を説明します。この機能は、サーバーグループの作成中に無効にすることもできます。
-
サーバーグループ ページで、対象のサーバーグループを見つけてその ID をクリックします。
-
詳細 ページで、基本情報 セクションの 基本情報の変更 をクリックします。
-
基本情報の変更 ダイアログボックスで、詳細設定 をクリックし、クロスゾーン負荷分散 スイッチをオフにしてから、保存 をクリックします。
(任意) ステップ2:トラフィックルーティングの検証
この検証はデモンストレーションのみを目的としています。本番環境では、ドメイン名を使用してサービスにアクセスし、「ステップ3」で説明されているように遅延をテストしてください。
対象インスタンスの インスタンスの詳細 ページの ゾーン セクションで、ゾーン H とゾーン K の EIP (Elastic IP) をコピーします。
-
ブラウザを使用してアベイラビリティゾーン H の EIP (例:
http://<elastic IP address>) にアクセスします。ブラウザを複数回更新します。アベイラビリティゾーン H のバックエンドサーバー ECS01 にのみアクセスできます。ページには
Hello World ! This is ECS01.と表示されます。 -
ブラウザを使用してアベイラビリティゾーン K の EIP (例:
http://<elastic IP address>) にアクセスします。ブラウザを複数回更新します。アベイラビリティゾーン K のバックエンドサーバー ECS02 にのみアクセスできます。Hello World ! This is ECS02.
ステップ3:遅延のテスト
テスト結果は、リージョンやアベイラビリティゾーンによって異なる場合があります。以下の結果はデモンストレーションのみを目的としており、実際の結果とは異なる場合があります。
-
テストクライアントとして使用するために、ドイツ (フランクフルト) リージョンにインターネット向けの ECS インスタンス (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:最初のバイトまでの時間 (TTFB)。クライアントがリクエストを送信してから、バックエンドサーバーから最初の応答バイトを受信するまでの時間 (秒)。
-
time_total:合計時間。クライアントがリクエストを送信してから、バックエンドサーバーが応答を完了するまでの時間 (秒)。
クロスゾーン負荷分散が有効な場合の応答時間:
[ecs-assist-user@xxx ~]$ curl http://xxx -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" Hello World ! This is ECS02. time_connect: 0.170654 time_starttransfer: 0.347200 time_total: 0.347234 [ecs-assist-user@xxx ~]$ curl http://xxx -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" Hello World ! This is ECS01. time_connect: 0.178056 time_starttransfer: 0.357358 time_total: 0.357397クロスゾーン負荷分散が無効な場合の応答時間:
[ecs-assist-user@xxx ~]$ curl http://xxx -s -w "time_connect: %{time_connect}\ntime_starttransfer: %{time_starttransfer}\ntime_total: %{time_total}\n" Hello World ! This is ECS01. time_connect: 0.152544 time_starttransfer: 0.307768 time_total: 0.307797テスト結果から、クロスゾーン負荷分散を無効にすると、接続時間、TTFB、合計時間が短縮されることがわかります。
-
よくある質問
503 エラーが返されるのはなぜですか?
このエラーは、リクエストを受信したアベイラビリティゾーンに関連付けられたサーバーグループ内に、利用可能なバックエンドサーバーがない場合に発生します。リクエストを転送できないため、ALB インスタンスは 503 エラーを返します。
セッション維持がサポートされていないのはなぜですか?
セッション維持では、例えばゾーン A からゾーン B の特定のサーバーへといった、アベイラビリティゾーンをまたいだリクエストのルーティングが必要です。クロスゾーン負荷分散を無効にするとこのルーティングが妨げられるため、2つの機能は互換性がありません。
クロスゾーンサーバーのヘルスステータスはどうなりますか?
クロスゾーン負荷分散が無効になっている場合、ヘルスチェックは同じアベイラビリティゾーン内でのみ実行されます。そのため、異なるアベイラビリティゾーンにあるバックエンドサーバーのヘルスチェックステータスは [未使用] になります。
参考
-
ALB がサポートするリージョンとゾーンについては、「リージョンとゾーン」をご参照ください。
-
設定中に問題が発生した場合は、「ALB に関するよくある質問」をご参照ください。
-
ヘルスチェックで問題が発生した場合は、「ALB のヘルスチェックに関する問題のトラブルシューティング」をご参照ください。
-
CreateServerGroup:サーバーグループの作成
-
UpdateServerGroupServersAttribute:バックエンドサーバー設定の更新
-
ListServerGroups:サーバーグループの照会
-
GetListenerHealthStatus:ヘルスチェックステータスの照会