Webサーバーをスケーリングと冗長化のためにロードバランサ (LB) を
使用するシステムは珍しくないと思う。
ただ、手元の有り合わせの環境で簡単な性能検証をする際には
ネットワーク機材をそろえる事が難しい事も多い。
そんな時、私はpoundを使用していた。
pound は 適当な Linux サーバーにインストールすればすぐに使用できる。
でも、最近 pound では性能が不足する事が出てきた。
LB は、HTTP の通信を右から左に流すだけの物。
正直、そんなにリソースを使用するとも思えないのだが、
性能を測定したいサーバーよりも先に LB にボトルネックが来てしまう事は困る。
mpstat を見てみると、マルチコアのサーバーにインストールしているにも関わらず、
1個しかコアを使用していない模様。
これでは、サーバーを増強しても簡単には LB がスケーリングするとは思えない。
というわけで、Linux のプログラムとして動作する他の LB を探してみた。
十分な性能がでそうな候補として上がったのが、以下の 3個。
上記 3個の LB は、その通りの性能が出れば私の性能検証には十分すぎる。
せっかくなので、振り分け方法も調べてみた。
実際にインストールして色々と試したが、次回の性能検証では HAProxy を
使用する事に決めた。
っていうか、最近のアプリケーションタイプ LB って、ずいぶん性能が良いようだ。
これじゃ、LB 売ってる会社は大変だろうな。
使用するシステムは珍しくないと思う。
ただ、手元の有り合わせの環境で簡単な性能検証をする際には
ネットワーク機材をそろえる事が難しい事も多い。
そんな時、私はpoundを使用していた。
pound は 適当な Linux サーバーにインストールすればすぐに使用できる。
でも、最近 pound では性能が不足する事が出てきた。
LB は、HTTP の通信を右から左に流すだけの物。
正直、そんなにリソースを使用するとも思えないのだが、
性能を測定したいサーバーよりも先に LB にボトルネックが来てしまう事は困る。
mpstat を見てみると、マルチコアのサーバーにインストールしているにも関わらず、
1個しかコアを使用していない模様。
これでは、サーバーを増強しても簡単には LB がスケーリングするとは思えない。
というわけで、Linux のプログラムとして動作する他の LB を探してみた。
十分な性能がでそうな候補として上がったのが、以下の 3個。
・Apache のモジュール、mod_proxy_balancer
勉強会で聞いたところによると、gumiさんはAmazon Web Service のサーバー 1~2 台に mod_proxy_balancer をインストールし、最大3000万PV / 日 をさばいているとのこと
・nginex (低機能、高速が売りの Web サーバー、リバースプロキシ)
勉強会の後で講師のgumiの堀内さんに伺ったのだが、mod_proxy_balancer より nginex の方が速いらしい。
(でも、Apache のノウハウが使えるから mod_proxy_balancer を使用中との事)
・HAProxy
公式サイトに性能検証の結果が出ていた。
PenM 1.7GHz で 19000リクエスト/秒をさばいている。
上記 3個の LB は、その通りの性能が出れば私の性能検証には十分すぎる。
せっかくなので、振り分け方法も調べてみた。
1. ラウンドロビン以外の振り分け方法
ラウンドロビンだと、どうしても特定の Web サーバーに負荷が集中する。
実際の運用では気にならないかもしれないが、性能検証の際にはありがたくない。
できれば、Least Connections とかで振り分けられるとうれしい。
調べたところ、mod_proxy_balancer はラウンドロビン、又はトラフィック量のみ
nginexとHAProxyは Least Connections で振り分け可能な模様。
2. L7 の機能
同一セッションのリクエストに対し、同じWebサーバーに割り振る事ができるか。
例えば、初回ログイン時に、user1 はたまたま web1 に振り分けられたとする。
すると、ログアウトまで user1 は web1 に振り分ける事ができるか。
もしこれが出来れば、セッション情報を各 web サーバーで勝手に保存できる。
セッションの閲覧、更新の際のデータベースへのアクセスが無くなるのだ。
調べたところ、mod_proxy_balancer はリクエストの URL や Cookie を解析して、特定の web サーバーに振り分ける事が可能。
例えば、webサーバーごとに異なる Cookie を発行すれば、L7 で振り分ける事が可能だ。
対して nginex は、現在の所 L7 の振り分けが全く出来ないように思われる。
最後に、HAProxy は、mod_proxy_balancer のように L7 で振り分けが可能。
さらに言うと、HAProxy 自体が振り分けのための Cookie を発行してくれるので、Web サーバーに手を入れる必要が無い
実際にインストールして色々と試したが、次回の性能検証では HAProxy を
使用する事に決めた。
っていうか、最近のアプリケーションタイプ LB って、ずいぶん性能が良いようだ。
これじゃ、LB 売ってる会社は大変だろうな。