状況
アドサービスの入り口部分で、
フロントをさばいているELBのLatencyが、
ピークタイムに不自然な動き、Latencyが1sec超えるなどの遅延。
(何故かMAX3秒以上は遅延しない。)
対応
memcachedへのアクセスをinternal ELB経由で行なっていた部分を
IP直指定とした。
Latencyは 10ms前後で落ち着いた。
このことから、遅延原因はinternal ELBと断定。
ELBの動作
SA様に聞いた所、
ELBは、内部的にEC2を動かして動作させてるとのことなのだが、
そのインスタンスが一定条件を満たした際に、ELBのスケールアウトが行われる。
(スケールアップも有るのかな?)
スケールアウト条件は、対象インスタンスの
CPU Utilization、Network IN/OUTにて判定されるとの事。
小さいデータを件数多く捌く、今回のような使用方法だと
適切にスケールアウトされない事がある。
らしい。
しきい値については聞き漏れだったと思う。
しかしながらブラックボックスぽいな。。
ちなみに、遅延発生時のinternal ELBへのアクセス件数は
※訂正 グラフが跳ね上がる形で、20000〜60000弱のケースまで色々のようだ。
跳ねてるタイミングで、ELBがアカン感じだったのかな。。
やり取りしていたデータ長は
数百バイト〜数キロバイト。10キロバイト前後が最も多いか。
まとめ
とりあえず、ELBで小さいデータを取り扱う際は
上記のことを頭の片隅に。。。
ELBは使わないでhaproxyとかでさばいたり、
プログラム側で対応したりするのが現状のベターな選択肢かと。
CloudWatch上では、Internal ELBが捌ききれていない事を示すグラフなどは確認できなかった。
0 件のコメント:
コメントを投稿