WAS 小ワザ集

第16回:Application Anti Pattern(3) 外部リソース利用の繰り返し

Comments

コンテンツシリーズ

このコンテンツは全#シリーズのパート#です: WAS 小ワザ集

このシリーズの続きに乞うご期待。

このコンテンツはシリーズの一部分です:WAS 小ワザ集

このシリーズの続きに乞うご期待。

Anti Pattern

あるお客様が、アプリケーションの挙動を詳細に調査するため、自作のロギングクラスを作成し、アプリケーション内の各所に追加されました。

このロギングクラスは、ログを記録するメソッドが呼ばれるたびに、ファイルをオープンし、ログを書き込み、クローズする、というつくりになっていました。

Result

クライアントからのリクエストが一回行われるたびに、このロギング・メソッドは数回~十数回呼び出されるようになっていました。

ファイルのオープン・クローズという処理はかなり重い処理です。

このため、アプリケーション全体のパフォーマンスがかなり低下してしまいました。特に、ログを記録するメソッドがsynchronized指定されていたため、多くのクライアントからリクエストが集中したときには処理が直列化され、著しいパフォーマンスの劣化を招いてしまいました。

Best Practice

外部のリソース、たとえばファイル、ネットワーク接続、DB接続などを使用する際には、使用前にオープン、使用後にクローズの処理が必要になります。このオープン・クローズの処理は、多くの場合において非常に大きなコストのかかる重い処理です。これらの処理は極力減らすようにコーディングする必要があります。

例えば今回の例では、ファイルはロギングを担当するマネージャークラスがオープンして保持しておき、個々のログの記録が行われるときには直接ログをファイルに書き込むのではなく、マネージャークラスへログの通知を行うような設計にするべきでした。ファイルへの書き出しは、マネージャークラスが一括して、一定時間ごと、あるいは一定回数ごとに非同期的に行うようにしておけば、パフォーマンスの劣化は最小限にすることができます。

また、共有可能な外部リソースについては、プーリングによる再利用をおこなって、リソースのオープン/クローズの回数を減らすことも効果があります。


ダウンロード可能なリソース


関連トピック


コメント

コメントを登録するにはサインインあるいは登録してください。

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=60
Zone=WebSphere
ArticleID=806646
ArticleTitle=WAS 小ワザ集: 第16回:Application Anti Pattern(3) 外部リソース利用の繰り返し
publish-date=03282012