2012-04-04 9 views
0

私は簡単に構成可能な方法で次の問題をモデル化できるパターンおよび/またはフレームワークを探しています。高速マルチスレッドオンライン処理アプリケーションフレームワークの提案

3分ごとに、最新のバージョンのデータを取得するために同時にWebサービスにアクセスするWebアプリケーションコンテキストで一連のジョブを開始し、それをデータベースにプッシュする必要があります。問題は、データベースがデータの複雑な計算を行うためにデータを読み取るために頻繁に使用されることです。私たちは現在春を使用していますので、Springバッチを使ってこのプロセスを実行していますが、似たようなシステムのSpringや他のテクノロジーを使用する提案/パターン/例はありますか?

+0

あなたの質問は次のとおりです。 b-スケーリング。 – alphazero

+0

多少の違いがあります。スケジューリング部分は複数の方法で行うことができます。私はスプリングバッチやその他のスプリングコンポーネントを理想的に探しています。これは、処理を行うスレッドの設定可能な量でこれを実現できます。主にこれを行う方法の指針を探しています。 – Cromat

答えて

1

私たちは、繰り返し実行するプロセスが必要なときに、WebアプリケーションでTimerTasksを開始するためにServletContextlistenersを使用しました。 ServletContextListenerは、アプリケーションサーバーがアプリケーションを起動するとき、またはアプリケーションが再起動されたときに起動します。次に、タイマータスクは、指定された期間、コードを繰り返す別々のスレッドのように動作します。

のServletContextListener http://www.javabeat.net/examples/2009/02/26/servletcontextlistener-example/

TimerTaskを http://enos.itcollege.ee/~jpoial/docs/tutorial/essential/threads/timer.html

+0

あなたの場合、これはマルチスレッドのタスクを開始しますか?私はおそらく実行タスクの中でこれを行うことができますが、分割する必要があります。 – Cromat

+0

私たちはタイマー内でマルチスレッドコードを実行しませんが、私はあなたからの停止が何もないとは思いません。 jvmを起動するときに-userThreadsのvm引数を指定する必要もあると思います。 –

1

は、Webアプリケーションのうち、およびスタンドアロンアプリ可能性に仕事をリファクタリングされていますか?

バッチジョブを余分な負荷でWebアプリケーションに影響させないように、別のバッチサーバーにバッチジョブを張り付けることができます。これにより、Webサービスが呼び出され、データベースが更新されます。ジョブは、cronやAutosysのようなものを使って起動できます。

私たちは、この目的のためにSpring-Batchを使用しています。

データベース設計は、バッチデータの用途にも依存します。レポート目的の場合は、運用データベースをレポートデータベースから分離し、データベースリンクを使用して運用データベースからレポートデータベースに必要なデータを取得し、レポートデータベースで複雑なクエリを実行することをお勧めします。このようにして、負荷は運用データベースからシフトされます。

+0

Spring-Batchの場合、独自のサーバーにあるかどうかにかかわらず、構成に関する推奨戦略または提案がありますか? – Cromat

0

camel-integrationのようなフレームワークも検討する価値があると思います。いわゆるエンタープライズ統合パターンもご覧ください。 catalogをチェックしてください - スケーリング/スケジューリングに関する問題を考えるときに役に立つボキャブラリを提供するかもしれません。

フレームワーク自体はSpringと非常によく似ています。

関連する問題