• 締切済み

ルータを挟んだコネクションプール

[Tomcat利用のWebアプリケーションサーバ]~[F/W兼ルータ]~[DBサーバ] という構成のシステムがあります(サーバは互いに別サブネット)。 ここで、Webサーバ~DBサーバ間にコネクションプールを使うか否かで内輪モメしています。 私の考えでは、「無通信のコネクションを張りっぱなしにすると、ルーティングテーブルが一定時間で消去されて通信不能になり、しかもWebアプリはそれを検知できない」なんですが、いまいち自信がありません。 パフォーマンス上、コネクションプールが欲しいのも事実なんですが、この構成で実現できるものなのでしょうか?

  • Oracle
  • 回答数2
  • ありがとう数5

みんなの回答

  • me_no_car
  • ベストアンサー率24% (22/90)
回答No.2

F/Wを経由する場合は、無通信のコネクション は削除されると考えた方がいいので、 コネクションプールを利用するのであれば あなたの懸念事項は考慮して利用すべきです。 コネクションを定期的に削除されない方法としては、 アプリ側で、無通信状態が1定時間続いたたら 再度コネクションをはりにいく必要があります。 当然、F/W側でコネクション削除間隔より短くする 必要があります。 TOMCATとのこなのでJAVAのアプリケーションだと思いますがJAVAなら上記のことがJDBCのAPIを使うことで 簡単にできます。

pythian
質問者

お礼

ありがとうございます。やはり時間切れを考慮して細工しないといけないようですね。実現できるか検討してみたいと思います。

  • anmochi
  • ベストアンサー率65% (1332/2045)
回答No.1

> [Tomcat利用のWebアプリケーションサーバ]~[F/W兼ルータ]~[DBサーバ]  この状態で、左(Tom)から右(DB)に向かって、ルータでNATを行っているのかな? 特にIPマスカレードだと、君の懸念はもっともだ。  単なるルーティングしか行っていないのであれば、この構成でコネクションプールをはっても特に問題は無さそうやけど・・・・。

pythian
質問者

補足

あ、書いてませんでしたね。IPマスカレードを行っており、ハード構成は変更ができません。 更に、ルータの設定をした人が既におらず、Ciscoがわかる人も部署に・・・いえ、私が頑張ります。よろしくお願いいたします。

関連するQ&A

  • 接続プール、またはコネクションプールを教えて下さい。

    「接続プール」、「コネクションプール」について質問があります。 MSDNのサイトで「接続プール」に関するサイトを読んでみましたが難しくてあんまり理解できませんでしたが何となく何ですがDBコネクションを共有して使ってパフォーマンスをあげるっていうのはわかりましたが・・・間違ってたらすみません m(_ _)m 申し訳ありませんがこんな私でも簡単にわかるように説明してくれませんでしょうか? 「接続プール」と「コネクションプール」って同じですか? 開発環境は以下のとおりです。 言語:VB.net2005(ADO.net) DB:SQLServer2005 宜しくお願いします。

  • PHPにコネクションプールってあるんですか?

    JAVAを使ったwebシステムではDBのコネクションをプールする方法が一般的に用いられますが、PHPでも同じような方法はあるのでしょうか?

    • ベストアンサー
    • PHP
  • コネクションプールについて

    コネクションプール有とコネクションプール無でDB接続・切断を繰り返したときに どれくらい差があるか試してみようと思いWebアプリ上(フレームワークにStruts2を使用)で 下記コードを実行してみました。 dbcpConnectメソッド(コネクションプール有) と jdbcConnectメソッド(コネクションプール無) をそれぞれ千回づつループで回して実行してみました。 結果は 【コネクションプール有】実行にかかった時間:157384 ミリ秒 【コネクションプール無】実行にかかった時間:158760 ミリ秒 で大差はありませんでした。 コネクションプールを使用するともう少し早いと思っていたのですがそのようなことはないのでしょうか。 public String test4() { // コネクションプール有の接続 long start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { dbcpConnect(); } long stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); // コネクションプール無の接続 start = System.currentTimeMillis(); for(int i=0; i< 1000; i++) { jdbcConnect(); } stop = System.currentTimeMillis(); System.out.println("実行にかかった時間は " + (stop - start) + " ミリ秒です。"); return "jstl4"; } public void dbcpConnect() { Connection con = null; try{ Context context = new InitialContext(); //DataSource ds = (DataSource)context.lookup("java:comp/env/jdbc/library"); DataSource ds = (DataSource)context.lookup("java:/comp/env/jdbc/dhcpTest"); con = ds.getConnection(); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } } public void jdbcConnect() { Connection con = null; try{ con = DriverManager.getConnection("jdbc:mysql://localhost", "root", "root"); Statement stmt = con.createStatement(); String sql = "SELECT * FROM test.test"; ResultSet rs = stmt.executeQuery(sql); } catch(Exception e) { System.out.println("Error"); } finally { try { con.close(); } catch (SQLException e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • コネクションプーリングについて

    WebアプリケーションとRDBMSの接続時間の軽減として、 コネクションプーリングという手段があるそうです。 ただ、実装に手間がかかるそうです。 アプリケーションサーバーはこれを実装しているようですが、 そんな予算はありません。 そこで、この部分をやってくれるオススメなソフトなぞはあるでしょうか? ちょっと調べたところ「jdbshare」、「PoolMan」などがありましたが。 もしかして、Tomcat自体にコネクションプーリングの機能があるのでしょうか? なにぶん勉強不足で申し訳ありませんが、よろしくお願いします。

    • ベストアンサー
    • Java
  • クロスケーブルとSWハブ

    漠然とした話でもうしわけないのですが...。 たとえばWebアプリを組む場合、Web(アプリ)サーバー 、DBサーバーという構成にした場合、 1.WEBサーバーにルーティングをあげ、DBサーバーとはクロスで接続。 (WEBサーバーのネットワークカードは2枚使用) 外部⇔WEB⇔DBの形式。  2.単純にスイッチングハブに接続 (WEBサーバーのネットワークカードは1枚使用) 外部⇔ハブ⇔WEB      ⇔DB という形式。 と、どちらのほうが通信速度的によいのでしょうか? また、もっといい方法があるのであれば教えていただきたいのですが...。

  • TomcatとMySQLのコネクションが切れる

    はじめまして、下記の様な環境でServletを運用していますが、 一日たつと(翌日になると)TomcatとMySQLのコネクションが切れており、 WEBアプリケーションにログインできなくなってしまいます。Tomcatを再起動するとコネクションは回復し、 ログインできるようになります。 なぜコネクションが勝手に切れてしまうのかが、解りませんでしたので質問しました。 よろしくお願い致します。 ・Windows Server2003 ・Tomcat6.0 ・MySQL ・JAVA Servlet エラーログ ----------------------------------------------------------------------- SQLException:No operations allowed after connection closed.Connection was implicitly closed due to underlying exception/error: ** BEGIN NESTED EXCEPTION ** com.mysql.jdbc.CommunicationsException MESSAGE: Communications link failure Last packet sent to the server was 0 ms ago. STACKTRACE: com.mysql.jdbc.CommunicationsException: Communications link failure Last packet sent to the server was 0 ms ago. -------------------------------------------------------------

    • ベストアンサー
    • MySQL
  • コネクションプーリングの枯渇

    tomcat-Servletでの開発を行っています。 MVCモデルでのWEBアプリケーションです。 DBへの接続用として自作のコネクションプーリングを使用しています。 (プーリング数は20を設定) 基本的なSQL実行フローは下記のようになります。 1.コネクションプーリングを取得 2.SQL文を実行 3.コネクションプーリングを返却 ところが、時間を置いて psコマンドで確認すると、 だんだん数が減っていっているようです。 原因を調査しているのですが、 もし次のような原因で正しいかどうか分かりましたらご連絡ください。 <考えている原因> 要するに上記の3(返却)がされていないのであって。 ・実行処理中に利用者がクライアント側のブラウザを落としている。 と仮説を立てているのですが。 この仮説が正しいかどうか、 また、もし正しい場合には、どうすれば回避可能かをご教授ください。 補足の必要があればご連絡ください。 (コネクションプーリングの全文を載せたいのですが、  長すぎるようで・・・)

    • ベストアンサー
    • Java
  • TCP/IP通信でのコネクションロスト(ソケットエラー)の検知について

    インターネット上での対戦ゲームの作成を行なっているところです。 サーバーを挟んでクライアント間で双方向の通信を行なっています。  A → サーバー → B  A ← サーバー ← B TCP/IPは信頼性の高い通信方法ということで、データ抜けなどは 心配しなくても良いと聞いています。 もし、データ抜けなどが発生した場合はコネクションロストの状態になると。 実際のプログラミングではソケットを使用しています。 コネクションロストが起きると、ソケットエラーかソケットクローズで検知できます。 実際に例えばクライアントAを強制終了させるとサーバーはただちに ソケットクローズを検知します。 ここで、問題はデータを送っても届かないのに、 ソケットエラーもソケットクローズも起きない状態が発生することです。 これはインターネットの経路上になにか問題が発生したと考えていますが このような状態はタイムアウトなどで監視する以外に検知する方法はないのでしょうか? クライアントはウィンドウズでVB6.0のwinsockを、 サーバーはLinuxを使用しています。 なにかアドバイスをいただければありがたいです。

  • 同一ネットワーク内に複数のルータが存在する場合の…

    【同一ネットワーク内に複数のルータが存在する場合のルーティングについて】 (1)以下のネットワークが存在するとします。 ネットワーク名:ネットワークA ネットワークアドレス:192.168.100.0 サブネットマスク:255.255.255.0 (2)また、上記ネットワーク内に以下の2ルータが存在しそれぞれが異なるネットワークとVPN接続されているとします。 ルータ1:192.168.100.1 →ネットワークBとVPN接続 ルータ2:192.168.100.2 →ネットワークCとVPN接続 ネットワークB:192.168.150.0/24 ネットワークC:192.168.200.0/24 (3)ネットワークA内にサーバXが存在しIPとデフォルトゲートウェイは以下の通りです。 サーバ名:サーバX IPアドレス:192.168.100.101 サブネットマスク:25.255.255.0 デフォルトゲートウェイ:192.168.100.1(ルータ1) <質問> このような環境下で、サーバXがネットワークCと通信したい場合、サーバ自体またはサーバXのデフォルトゲートウェイ上にルーティングは必要でしょうか? 具体的にはWindowsのコマンドで言えば以下のようなルーティング必要かどうか、ということです。 add 192.168.200.0 mask 255.255.255.0 192.168.100.2 私自身はルーティングをしなければいけない、と思っているのですが、ネットワークCへの接続の窓口となっているルータ2がサーバXと同じネットワーク内にあるから必要ないという意見もあり、どちらが正しいのかを知りたいです。仮に後者が正解の場合は、なぜそのような通信が可能なのかを知りたいと思っています。 分かりにくい説明となってしまっているかもしれませんが、どなたかお知恵をいただけると大変助かります。

  • WebサーバとDBを何故たすきがけ構成にするのか

    Webシステムのサーバ構成が、2台構成で各サーバを仮想化してWebサーバとDBサーバが構成されています。 サーバA:Webサーバ1、DBサーバ1 サーバB:Webサーバ2、DBサーバ2 のような感じです。 これで、Webサーバ1がDBサーバ2を見て、Webサーバ2がDBサーバ2を見る構成となっています。 たすき掛け上の構成にしなくてはいけない理由は何でしょうか? 不勉強で申し訳ないのですが、どなたか理由を教えていただけると助かります。