まえがき

cloudpackサポートです。

Application Load Balancer(以降ALB)のターゲットグループには、ルーティングアルゴリズムが2つあることをご存知でしょうか。
その2つとは、ラウンドロビンと最小の未処理のリクエストです。
ドキュメントの該当部分を引用します。

デフォルトでは、ラウンドロビンルーティングアルゴリズムがターゲットグループレベルのリクエストのルーティングに使用されます。最小未処理リクエストルーティングアルゴリズムを指定できます。

参考画像

今回は、それぞれのルーティングアルゴリズムについてご紹介し、簡単な検証をしてみます。

ラウンドロビン

ラウンドロビンは、ターゲットグループの作成時にデフォルトで選択されているルーティングアルゴリズムです。
ラウンドロビンでは、リクエストを均等にターゲットグループ配下のインスタンスにルーティングします。
その際、ルーティング先インスタンスの負荷状況は考慮しません。

最小の未処理のリクエスト

最小の未処理のリクエストは、ターゲットグループの作成後に属性の編集をすることで選択できるルーティングアルゴリズムです。
最小の未処理のリクエストでは、リクエストが到達した時点で最も未処理のリクエストが少ないインスタンスにルーティングします。

検証

ラウンドロビンと最小の未処理のリクエストの簡単な検証をしてみます。

検証内容

  • 以下の構成図通りの環境を用意し、WordPressをインストール

  • abコマンドでリクエストを投げ、ラウンドロビン・最小の未処理のリクエストでリクエスト数に差がでるか確認する
  • 実行するabコマンドは、同時リクエスト数を10 とし、1000回までリクエストする

今回は、3パターンの検証をしてみます。

  1. c5.largeを2台用意し、ラウンドロビンでリクエスト数を確認
  2. c5.largeを2台用意し、最小の未処理のリクエストでリクエスト数を確認
  3. c5.largeとc5.xlargeを1台ずつ用意し、最小の未処理のリクエストでリクエスト数を確認

検証結果

1. c5.largeを2台用意し、ラウンドロビンでリクエスト数を確認

[root@ip-192-168-0-97 httpd]# ec2-metadata -t -z && wc -l example.com-access_log
instance-type: c5.large
placement: ap-northeast-1a
500 example.com-access_log
[root@ip-192-168-0-97 httpd]#

[root@ip-192-168-1-81 httpd]# ec2-metadata -t -z && wc -l example.com-access_log
instance-type: c5.large
placement: ap-northeast-1c
500 example.com-access_log
[root@ip-192-168-1-81 httpd]#

均等に割り振られ、リクエスト数に差はでませんでした。

2. c5.largeを2台用意し、最小の未処理のリクエストでリクエスト数を確認

[root@ip-192-168-0-97 httpd]# ec2-metadata -t -z && wc -l example.com-access_log
instance-type: c5.large
placement: ap-northeast-1a
513 example.com-access_log
[root@ip-192-168-0-97 httpd]#

[root@ip-192-168-1-81 httpd]# ec2-metadata -t -z && wc -l example.com-access_log
instance-type: c5.large
placement: ap-northeast-1c
487 example.com-access_log
[root@ip-192-168-1-81 httpd]#

ラウンドロビンに比べ、多少ではありますがリクエスト数に差がでました。
おそらくRDSが ap-northeast-1a にあるため、AZ間のレイテンシーが処理速度に影響し、リクエスト数に多少の差がでたのかもしれません。
複数回実行しましたが、いずれも ap-northeast-1a にあるインスタンスのほうにリクエストが多くきていました。

3. c5.largeとc5.xlargeを1台ずつ用意し、最小の未処理のリクエストでリクエスト数を確認

[root@ip-192-168-0-97 httpd]# ec2-metadata -t -z && wc -l example.com-access_log
instance-type: c5.xlarge
placement: ap-northeast-1a
642 example.com-access_log
[root@ip-192-168-0-97 httpd]#

[root@ip-192-168-1-81 httpd]# ec2-metadata -t -z && wc -l example.com-access_log
instance-type: c5.large
placement: ap-northeast-1c
358 example.com-access_log
[root@ip-192-168-1-81 httpd]#

c5.xlarge のほうが処理性能が良いため、リクエスト数に大きく差がでたようです。
複数回実行しましたが、いずれも c5.xlarge のインスタンスにリクエストが多くきていました。

おわりに

今回は、ALBのターゲットグループで選択できるルーティングアルゴリズムの違いをご紹介しました。
ワークロードに適したルーティングアルゴリズムを選択することで、ターゲットインスタンスの負荷状況が改善する可能性がございます。
これを機にルーティングアルゴリズムの見直しをしてみてはいかがでしょうか。