ELB の Cross-Zone Load Balancing という機能


旧来のELB

旧来のELBの有名な話で、マルチAZで均等にリクエストを振り分けるためには各AZに配置するインスタンス数を同数とする必要がありました。
これはELBがAZ毎にLBを置き、その配下のインスタンスにしかリクエストを転送できないアーキテクチャとなっていたためです。

この性質はオートスケールと組み合わせて考えた場合に困ります。
なぜならオートスケール時はAZ間で足並みそろえてスケールされるわけではないため、例えば以下のような設定とした場合、一方のAZでは1台のインスタンス、他方のAZでは5台のインスタンスという状態が発生し得るからです。

<ELBとオートスケール設定>

  • ELBでは2つのAZを管理
  • 各AZ配下のインスタンスは平常時は1台
  • 各AZ配下のインスタンスは高負荷時は最大5台まで増加

Cross-Zone Load Balancing という機能

これまで前述の事項は避けようがなかったのですが、それを解決してくれる「Cross-Zone Load Balancing」という機能が2013年11月にリリースされました。
Elastic Load Balancing Announces Cross-Zone Load Balancing

アーキテクチャとしてはこれまで同様にAZ毎にLBが置かれるようですが、Cross-Zone Load Balancing を有効化すると各LBがAZを跨いでリクエストを転送できるようにしてくれるようです。
したがって、AZ単位ではなくインスタンス単位でリクエストを均等に振り分けることが出来るようになるため、AZ間でインスタンス数を合わる必要がなくなり、オートスケール時も懸念する必要がなくなりました。
ナイスな機能ですね。

ちなみに Cross-Zone Load Balancing は CLI で有効化できるようです。(現時点ではまだマネージメントコンソールは未対応。。。)
Enable or Disable Cross-Zone Load Balancing for Your Load Balancer - Elastic Load Balancing