企業IT最適化のゴールを目指す

バッチジョブ高速化のカギはJavaVMの常駐化にありCosminexus V8 Review

Javaで作られたバッチジョブの高速化にはJavaVMの常駐化が必要だが、簡単な作業ではない。CosminexusにはJava環境のバッチ処理基盤があり、常駐化が容易になっている。

» 2009年02月23日 08時00分 公開
[友成文隆(日立製作所),ITmedia]

ベストのレスポンス対策の1つはバックエンドバッチ処理

 受付処理業務など、短時間に多量のトランザクションを処理しなければならない業務は、Webアプリケーションのチューニングで解決するには限界がある。その解決方法として古典的な方法ではあるが、バックエンドバッチ処理がある。つまり、集中する受付処理は受付だけを行い、入力情報は一時的に受付ファイルに登録。受付時間が終了した後、受け付けた受付ファイルを元に、バックエンドのバッチ処理でデータベースへの書き込みなどの処理を行う。この方式により、オンライン中のデータベース処理などが受付トランザクションで省略され、レスポンス対策が図れるのだ。

DB更新処理をバッチ処理にすることでレスポンス性能を確保

課題はJavaでバッチジョブを作ると遅くなること

 この方式はメインフレームやOLTP(オンライントランザクション処理)環境でも行われてきたことであるが、単純にアプリケーションをJava化しただけでは、バッチ処理性能が出ないため、バッチ処理時間範囲内に終了しないというケースも出てくる。その理由は、JavaVM起動のオーバーヘッドがバッチ処理の数だけかかってしまい、データベースへのアクセスに時間を消費してしまうからだ。

 その解決方法としてはJavaVMの常駐化があるが、決して簡単ではない。例えば、ロードするための「クラスローダ」を自前で設計して実装するなどの工程が発生してしまう。さらに、クラスローダを使ってロード&実行する処理を自前で実装しなければならない。一般の業務アプリケーションを開発するJavaプログラマには敷居の高い技術レベルである。

JavaVMの常駐化で毎回のローデイングオーバーヘッドを削減

JavaVMの常駐化などでバッチジョブの処理時間を1/5に

 このJavaVMの常駐化などを含むJava環境のバッチ処理基盤がCosminexusには用意されている。

 Cosminexusのバッチアプリケーション実行環境では,常駐化したJavaVM上でバッチ処理を実行することで、JavaVM起動のオーバーヘッドを削減する。それとともに、J2EEアプリケーションと同じく、コネクションプールとステートメントプールを使用したデータベースへのアクセスを最適化することもできる。

DB処理が多いバッチ処理での高速化

 また、データベースのデータの検索、更新によって多くのI/Oが発生する。バッチ処理にかかる時間の多くは、このようなI/Oであることも多い。Cosminexusにはデータのインメモリ化を行なう機能などが用意されている。条件によるが、例えばデータベースに1回だけアクセスする単純なプログラムでは、JavaVMを毎回起動する場合に比べて処理時間が1/5程度になる。

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ