タイトル

Need for Answer

2018年6月28日木曜日

Elastic Load BalancingのCLBとALBは何がちがうのか(TCP的に)

ALB使ってますか!
正直CLBで良いんじゃない…って人、多いと思います!

CLBはL4でALBはL7…とか色々あると思いますが、あまり注目されてないポイントとして「TCP Keepaliveされるか?」というのがあります

[ユーザー]-[ELB]-[APサーバー]

という構成があるとします。

[ELB=CLB]
ユーザーアクセスが終了したあと、ELB-APサーバー間で数秒間TCP Keepaliveされます。正確に言うと「ESTABLISHED」のままになります。これはHTTP/TCPどちらで死活監視しても一緒です。

[ELB=ALB]
ユーザーアクセスが終了したあと、即時に「TIME_WAIT」に移行します。

これによって何が違うのか?というおはなしなのですが、APサーバーがdjangoやrailsのようなアプリケーション・サーバーの場合に非常に困ることになります。

ユーザー通信が終了しているにもかかわらず、そのプロセスがCLBのKeepaliveによって開放されないため、次の通信に即時に使えない状態になります。それが積み重なった結果、APサーバーのプロセスがCLBによって使い潰されます。

要は『ECSのバランサーにCLBを使わないほうがいい』というおはなしです

0 件のコメント:

コメントを投稿