UNIX的なアレ:gihyo.jp出張所

第4回 知っておきたいスケールアウトの基礎知識 その3

この記事を読むのに必要な時間:およそ 2 分

より柔軟な,L7ロードバランサを利用する

すでにロードバランサの仕組みは紹介していますが,上記の方法では分散できない方法があります。

http://foobar.com/show/ と http://foobar.com/register/ の様に,同一のドメイン内でアクセスを分散させようとした場合です。

上記のURLでアクセスさせるサーバーを振り分けようとしても,L4のバランシングではそれぞれ別のサーバーに分散させることはできません。そのときに活躍する技術がL7バランシングです図3⁠。

図3

図3

L7バランシングとは名前の通り,第7層(アプリケーション層)の情報でアクセスを分散させる方法です。

L4バランシングとはまた別の情報をみてアクセスの分散を行うため,より柔軟な設定を行うことができます。

こちらもアプライアンス製品で実現することもできますが,apacheで構築することもできます。apacheに標準で付属している,mod_proxyとmod_rewriteというモジュールを組み合わせて使えばL7のバランシングを実現することができます。

便利に見えるL7のバランシングですが,1点だけ注意しておかなければならないことがあります。

L7で動作するため,CPUリソースを使用しやすいという点です。この点に注意した上で,導入をするようにしましょう。

セッション情報の管理をどうするか

さて,様々な分散方法を紹介してきましたがログインなどをさせるサイトになってくるとユーザーのセッション情報を保持させなくてはなりません。

単一のサーバーでサービスを行っている場合は特に問題にはなりませんが,複数のサーバーでアクセスをうけるとなるとセッションの情報は共通で持っておく必要があります。

Tomcatの場合ですと,Applicationサーバー同士でセッションレプリケーションを行うことができるので問題ありませんが,PHP等の言語をつかっているとこの問題に直面してきます。

この場合,セッション情報はLocalで保存される形式を使用するのではなく外部に保存するようにしましょう。

外部の保存する場所には,memcachedを使用することでより高速に処理を行うことができます。

負荷分散時に注意すべきこと

今回は主にアクセスの分散についての話をしてきました。

しかし,1台でうけていたサービスを複数のサーバーでうけるようになると,思わぬ部分でアプリケーションの誤動作がおきることがあります。

そのためにも,最初の設計段階から分散を視野にいれた設計をするようにしましょう。特にローカルで開発をしている場合は気がつかないことが多いので,負荷分散が行われている環境でテストを行うのが理想的です。

最後に

全3回にわたって,負荷測定の方法から様々なスケールアウトの方法を紹介してきました。

もちろん,ここで紹介している技術はごく一部のものです。スケールアウトに使うことができる技術は他にも様々なものがあります。

低コストでスケールアウトができて,なおかつ保守・運用が楽にできるものはそう簡単にみつけることはできません。

そのためにも,システムを構築する際には,段階を追って増強ができるシステムということを考えるようにしておきましょう。

システムの負荷が原因で,ビジネスチャンスを逃さないためにも。

著者プロフィール

和田修一(わだしゅういち)

株式会社ロケットスタートCTO。PHPやPerlを中心としたアプリケーション開発から,Linuxなどの技術を中心としたインフラ系の設計・構築を担当。個人Blogは「Unix的なアレ」。