ぢろーらものおもちゃ箱:引っ越し後

写真付きで日記や趣味を書くならgooブログ

負荷分散環境でのWebアプリケーション開発

2010-07-21 19:27:11 | IT(Web)

以前、お客さんから「今までWebサーバを負荷分散するような環境でアプリケーションを作った案件があまりないけど、開発の際の注意点とかある?」と質問されました。

ぢろーらもはアプリ屋さんではないので詳細についてはわからないのですが、たとえば負荷分散装置(ロードバランサ:アプリケーションスイッチ)などで問題になりやすいのはセッションをどう維持するか、という問題(負荷分散装置で接続維持機能を使って同じクライアントからの通信は同じサーバに振り分ける、もしくは負荷分散装置は振り分けのみ行ないセッションの管理はアプリケーションに任せる)だったり、負荷分散装置のSSLアクセラレータの機能を使う場合に、「もともとの通信がHTTPSかHTTPかをWebサーバがどのように区別するか?そしてそれにしたがってどのようにWebアプリケーションの動作を制御するか」などがあります。

前者に関しては、JSPなど動的ページを生成する場合には割とよく出てくる話です。まあ、負荷分散装置(ロードバランサ)であれば当然のことながら接続維持には対応しているでしょうし、比較的安価な装置でも”クライアントIPベースでの接続維持、Cookieベースでの接続維持などには対応しているはずです。

一番動作が単純なのはクライアントIPベースです。しかし、サービスの対象となるクライアントが不特定多数ではなく、特定プロキシやNATなどによって多くのクライアントが同じ送信元IPで負荷分散装置に到達するような場合、クライアントIPベースでは負荷が特定のサーバに偏ってしまうこともありえます。その場合、Cookieベースなどほかの方式を使う必要があります。 

後者ですが、たとえば「アプリケーション(パッケージソフト)がページを生成する際、ページに含むURLリンク絶対パスで生成してしまうので、Webサーバが”もとの通信はHTTPS”ということを知らないと、リンクをhttpで生成してしまうので正しく通信できない」ということはあります。(参考サイト:http://yaekan.sakura.ne.jp/blog/articles/program/160.html など)

リンクは相対パスで生成するようにすれば問題ないですし、それ以外の方法としては「WebサーバプロセスをTCP:80(TCP:8081など)のもの以外も用意し、HTTPSの場合には、TCP:80以外のポートにフォワーディングする」「クライアントのHTTPSリクエストを複合したあと、バランサ側で、”もとはHTTPSだった”ことを示す任意のHTTPヘッダを挿入してサーバに教えてあげる」なんて方法もあります。もちろんバランサがそれに対応してないといけませんが。

あとは、最終手段(?)としては「バランサ(あるいはほかの機器)で、ページ内のリンクに含まれているHTTPのリンクをHTTPSにかえてしまう」という方法もあるかと思います。アプリケーションに一切手を加えられない場合にはこんな方法での対応するしかないかもしれませんが、HTTPのデータ部まで自在に書き換えられる負荷分散装置(アプリケーションスイッチ)、となると機種は限られますかね。

ええと、他にはどんなこと注意する必要があるのかな・・・と思ってちょっと調べてみました。たとえば、http://www.atmarkit.co.jp/fjava/rensai2/webopt01/webopt01.html のサイトが参考になりますね。これはWeblogicの例か・・・。

複数サーバ(クラスタ化/負荷分散構成)の場合のみ関連ありそうなのは1回、3回、12回あたりで、気をつけるべきは「複製のオーバーヘッドによる性能低下」「複数サーバ構成でコンテンツキャッシュが正常に働かないことによるパフォーマンス低下」のあたりでしょうか。

こちらも続編があれば書きたいと思います。


この記事が気に入りましたら、また、お役に立ちましたら、以下のアイコンをクリックしていただけると嬉しいです(^^)

ブログランキング・にほんブログ村へ

最新の画像もっと見る

コメントを投稿