2&>1

AWSとかGCPとかGolangとかとか

Akamai構成のKeepAlive設定を決めた

AkamaiCDNが前段にあるシステムで後ろに控えるALBやApacheのKeepAlive設定を検証しました。

さらには先日リリースされた以下機能でALBに追加された項目を確認。

aws.amazon.com

項目名は以下の2つが関連する。

「Connection idle timeout」

「HTTP client keepalive duration」

項目の意味合いとしはこんな感じ

実際にはどのような挙動になるのかを確認する

Connection idle timeout

ClientとTargetに対してidle状態(無通信状態)でコネクションを保持する時間

HTTP client keepalive duration

Clientに対してのkeepalive時間

(この時間だけはなにがあろうとコネクションを残しておくということ)

確認手順

ALBに対してtelnetでアクセス

 telnet test-local-frt-alb01-1038675640.ap-northeast-1.elb.amazonaws.com 80
telnet test-local-frt-alb01-1038675640.ap-northeast-1.elb.amazonaws.com 80
Trying 54.95.144.247...
Connected to test-local-frt-alb01-1038675640.ap-northeast-1.elb.amazonaws.com.
Escape character is '^]'.
GET / HTTP/1.1     ←入力
Host: localhost  ←入力
         ←エンター入力
HTTP/1.1 200 OK
Date: Tue, 09 Apr 2024 01:26:24 GMT
Content-Type: text/html; charset=UTF-8
Content-Length: 12
Connection: keep-alive
Server: Apache/2.4.58 (Amazon Linux)
Last-Modified: Mon, 08 Apr 2024 09:24:32 GMT
ETag: "c-615925f82a5c5"
Accept-Ranges: bytes

test server

「test server」の表示でるとHTTPアクセス成功

「Connection closed by foreign host.」 の表示が出るまでは同じコネクションで通信していることになる

設定値は以下

確認1

初回アクセスから20秒放置すると「Connection closed by foreign host.」が出力されて切断

確認2

初回アクセスから60秒放置しても切断されず。 120秒放置すると「Connection closed by foreign host.」が出力されて切断

60秒以降120秒までの間にアクセスするとステータス成功した後「Connection closed by foreign host.」が出力されて切断

結果

「Connection idle timeout」は強制的に切断される

「HTTP client keepalive duration」は強制切断はされない

Apache側のkeepaliv値により違いはクライアント側の挙動では確認できず。

ただしALB-Apache間ではコネクションの切断再接続は起きていると想像。

(パケットキャプチャーなどでみると都度都度コネクションの張り直しが発生しているはず)

Akamai含めての設定値

セオリーとしては前段システムのkeepaliveは長く、後ろは短く。

後ろが長いと後ろ側だけ成功してて前には失敗が返ってしまう可能性があるため。

今回はAkamaiでの処理を最優先で発揮させるためにakamai-alb間のコネクションを最大限つなげる

ALBでのHTTPステータスコードとTargetでのHTTPステータスコードを監視しておくことでkeepaliveによる返り値の違いを把握できる。

Akamai Community