2014年11月13日

31. 常駐プロセス(非同期処理化/マルチスレッド化)の実装方針について

csv形式ファイルのアップロードによるデータ一括登録を行う場合、
登録済みデータから各種形式ファイルの生成・転送を行う場合、
など、重い処理(=時間がかかる処理)は常駐プロセス(非同期処理化/マルチスレッド化)として実装すること。
(上記の常駐プロセスは、Java Servlet 3.0 からサポートされた Asynchronous processing(非同期処理) を (Tomcat以外の)独立したJavaプロセス で実行させるイメージである。)
これにより、(1回の)HTTP通信のタイムアウト時間の制限を受けなくなるため。
また、Web依存を切り離すことにより、バッチ処理などからも利用することができるため。

推奨する常駐プロセスの実装方針は下記の通り。

WebUI(Webアプリケーションプロセス) :
1. 常駐プロセスに委譲する処理 を ジョブ(処理種別+入力データ) としてDBに登録する。
2. 上記のジョブが処理されたかどうかをポーリングする。もし、ネットワーク負荷やリアルタイム性を重要視する場合は WebSocket で Push する。
3. 上記のジョブが処理されれば、ジョブ(処理結果+出力データ) から画面表示などを行う。
a. 上記のジョブはセッションIDに紐付けておき、セッションの消滅時に破棄する。

常駐プロセス :
1. DBに登録されたジョブを監視する。
2. 上記のジョブが登録されれば、処理用スレッドを生成/起動する。
a. (常駐プロセスの)起動時にオープンした ServerSocket にて停止要求を受け付けた場合は、常駐プロセスを停止する。

常駐プロセス(処理用スレッド) :
1. 処理種別と入力データに応じた処理を行う。
2. ジョブに処理結果と出力データを更新する。

※本実装方式に則って 各顧客向けの10数種の常駐プロセス を実装し( Concurrency Utilities が提供される以前から java.lang.Thread をベースに実装し)、現在も本番稼働している実績あり(SLA(Service Level Agreement)に利用時間=24時間365日を含む)。

この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック