ロードバランサについて知らなかったので調べてまとめてみました。ついでにAWSのELBについても触れています。
ロードバランサとは何か?
外部からの処理要求を複数の装置に振り分けることで、処理要求先の装置の負荷を分散させる装置。負荷(load)を分散(Balance)させる。一言で言うと「負荷分散装置」。
そしてこれがもたらす効能は主に「可用性」である。
前提としては、処理応答するサーバーが複数台数あること。
どうでもいい例
閑話休題。
ここは駐車場である。駐車場は3エリア(Webサーバ)ありそれぞれに駐車場管理者がおり、またどこの駐車場が空いているかチェックしている振り分け担当者(ロードバランサ)がいる。日曜日になると、大混雑する(アクセス過多)。
振り分け担当者は3つの駐車場がどれくらい空いているかを駐車場管理者と連絡を取って空き具合を確認し、駐車場に来た新しい車を振り分ける役割をしている。
振り分け方法として一番簡単なのは、各駐車場に対して順繰りに車を振り分ける方法だ(ラウンドロビン方式)。駐車場のサイズが全部一緒であれば、このやり方は一定確率でうまくいくだろう。しかし、駐車場のサイズが違う場合は、このやり方ではうまくいかない。適宜駐車場の管理人と連絡し、各々の駐車スペースの占有率等を確認する必要がある(ヘルスチェック)。
...という風に、考えると理解しやすいかもしれない。
以下、ロードバランサ機能を述べる。
だいたい3つくらいである。
- リクエストの振り分け
- セッション維持
- 振り分け先の故障監視
リクエストの振り分け
名前の由来でもある機能。どう振り分けるかという部分でいろいろ違いがある。がシンプルに考えると、優先すべき箇所として大きく2つに分けられる。と思う。
- 通信の状態
- 振り分け先のサーバの状態
前者の場合、コネクションの数やデータ通信量がどうかという部分で振り分ける。後者の場合、CPU、メモリ、応答時間が短い等を優先させる。
セッションの維持
同じユーザから来た処理要求を同じところに振り分けること。これはどうして必要かというと、ログインする必要のあるサービスでは、ログインした次の画面で、別のサーバーに飛ばされると、またログインをやり直してユーザーの認証を行わなければならないからである(ログインしたという情報は基本的に、サーバ間をまたぐことができない。)
というわけで、ログインした後からは同じサーバに接続をし続ける必要があり、それを可能にするため要求元のIPアドレスや、ブラウザにcookieを埋め込んで判別を行っている。
- ヘルスチェック
LBが振り分ける先のサーバが正常に稼働しているか否かを常にチェックする仕組み。これにより、ダウンしているサーバには処理要求を振り分けない戸言うことができるようになる。これは可用性に大いに貢献している。
さて、これがAWSでも提供されているのである。Elastic Load Balancingと呼ばれるサービスだ。
AWS ELBについて
AWSのクラウド上で利用できるロードバランシングサービス。
前提としてはAWSのEC2に振り分ける。
特徴
スケーラブル
ELB自体も負荷の増減に応じて自動でスケーラブルに設定可能。ただこれはアクセス数がスパイクしたときには対応不可能。リクエスト数の急増の場合はHTTP ステータスは503を返すようになっている。
これに対する解決策としてはPre-Warming等がある。
安価な従量課金
そうらしい。正直コストに関して判断できません。。
運用が簡単
管理コンソールでぽちぽち。
セッションの維持
スティッキーセッションと呼ばれる。同じユーザから来たリクエストを全て同じEC2インスタンスに送信する。ELBの独自のセッションCookieにより実現されている。デフォルトでは無効になていおり、自分で有効にする必要がある。
参考
こちらを参考にさせていただきました。
http://www.slideshare.net/AmazonWebServicesJapan/aws-black-belt-online-seminar-elastic-load-balancing
追記) ELBのベストプラクティス
http://aws.amazon.com/articles/1636185810492479