- - PR -
Tomcat+Java+CGIの高速化
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-04-12 21:55
お世話になってます。
Tomcat+Java+CGIの高速化についてご意見下さい。 リクエスト送信から応答受信までの処理時間が 0.xxx秒までと決まってしまっている(性能要件)ので、 少しでも早い処理を実装する必要があります。 PerlであればFastCGIのようなものを使って高速化を図れる と聞いたのですが、Javaで同じような考え方はとれるのでしょうか。 そもそも、Javaではどのような方法で高速化を図れるのでしょうか。 また、OracleへのDB接続が頻繁に発生するので それをなくすにはどうすればよいかも検討したいです。 CGIは断続的(ポーリングするイメージ)に使われますので 初回リクエストでDBを検索してメモリーに展開し、2回目以降の リクエストでは、展開した情報を参照するような事ができれば わざわざDBに接続する必要がなく、高速化を図れると思ったのですが そういった事は可能なのでしょうか。 よろしくお願いします。 | ||||||||
|
投稿日時: 2007-04-12 23:49
まず、コネクション・プーリングで検索・調査されてはいかがでしょう?
データベースへの接続は、とても負荷が高いので、その部分を何とかする だけで、かなりの高速化になります。 | ||||||||
|
投稿日時: 2007-04-13 00:08
"CGI"とはこの場合サーバサイドで行う処理のことを指しているのでしょうが、Tomcat では通常いわゆる”CGI"(=リクエスト毎にプロセスを起動する)は行いません。
一般的に Tomcat 上で動くプログラム = サーブレット はプロセスを起動することなく JVM 内でマルチスレッドで動作しますので一般的な CGI よりも劇的に高速です。 Java の Web アプリケーションの参考書やサイトではコネクションプーリングもサーブレットのプログラミングも説明されているはずです。 | ||||||||
|
投稿日時: 2007-04-13 00:14
TomcatのCGIServletを使いたいのですか? 外部プロセスを都度起動するはずなので、結構オーバーヘッドが大きくて遅いと思いますが、 速度要件があるのであれば、そもそもミドルウェアの選択が間違っていると思います。 それとも、もしかしてCGIではなく普通のTomcatで動くサーブレットの事を言っていますか? ちょっと質問の内容では意味がわかりにくいです。
CGIではなくサーブレットを使うと仮定して、 高速化させるために以下のような手法が使われる事が多いです。 ・コネクションプーリング ->DB接続を複数あらかじめ用意して貯めておく、そしてそれらを使いまわす ・データキャッシュ ->DBに変更がなく、かつメモリ上にデータがあればそこから取得 という感じで、データアクセス系のフレームワークにはキャッシュ機能を持つものがあります。 コネクションプーリングはTomcatに付属しています。 |
1