12
WHITE PAPER VERITAS Indepth™ for J2EE 反復的開発: J2EE の最も実践的な活用法 オーウェン タイラー Middleware Company

反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

  • Upload
    others

  • View
    2

  • Download
    0

Embed Size (px)

Citation preview

Page 1: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

WHITE PAPER

VERITAS Indepth™ for J2EE

反復的開発: J2EE の最も実践的な活用法 オーウェン タイラー Middleware Company

Page 2: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

2

目次 1. 概要 ..................................................................................................................................................................................3 2. 適切なツールの選択..........................................................................................................................................................3

2.1 広い適用範囲 .............................................................................................................................................................3 2.2 最小のオーバーヘッド .................................................................................................................................................3 2.3 使いやすさ ..................................................................................................................................................................3 2.4 有効性 ........................................................................................................................................................................3

3. パフォーマンスを改善する、3 つの実践的方法....................................................................................................................4 3.1 データ キャッシュ.........................................................................................................................................................4 3.2 セッション単位のアクセス設計 .....................................................................................................................................5 3.3 サービス ロケータ........................................................................................................................................................6

4. 実践的方法の必要性.........................................................................................................................................................7 4.1 開発時 ........................................................................................................................................................................7 4.2 品質検証時.................................................................................................................................................................7 4.3 運用時 ........................................................................................................................................................................8

5. VERITAS Indepth for J2EE の使用 ..................................................................................................................................8 5.1 コードの計測 ...............................................................................................................................................................8 5.2 SmarTune の実行 ......................................................................................................................................................8 5.3 ドリルダウン ................................................................................................................................................................9 5.4 問題の識別とアドバイスの表示....................................................................................................................................9 5.5 問題と実践的改善法との関連付け.............................................................................................................................10

6. まとめ..............................................................................................................................................................................11 7. 付録: VERITAS Indepth for J2EE の概要 .......................................................................................................................11

Page 3: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

3

1. 概要 J2EE を開発用プラットフォームとして選択することで、企業として成功するチャンスは増大します。成功する企業は、一番実践的

な方法論と開発パターンおよびツールの用法を確立しています。そして、その重要性を J2EE プログラマと設計者自身が自覚し

ています。知識を共有し、その知恵を伝えることが成功を収めるには重要なのです。その総合的な結果として、生産性が向上し、

使いやすく堅牢なアプリケーションの開発が可能になります。 重要な課題は次の 2 つです。 • 有効なエンタープライズ システムを構築するスキル(またはそれを備えた人材)を獲得すること • 成果物の品質を確保しつつ、市場が要求するタイムテーブルを守ること 経験を積んだシステム設計者は、納期を守るためにしばしばトレードオフを行います。このようなトレードオフにはリファクタリング

等の、開発時間を短縮するために設計上のパフォーマンスを見直す方法も含まれます。アプリケーションの動作は、開発段階と

運用段階ではもちろんのこと、アプリケーションのライフサイクル全体を通じて変化します。パフォーマンスと安定性の問題が検出

された場合、アプリケーションの改善または廃棄が必要となります。貴重な時間と資金の無駄をなくすためには、これらプロセス

のほとんどを、経験済みの反復的な作業にすることが必要です。すなわち、適切なツールと最も実践的な方法を選択することが、

アプリケーションの開発と運用を成功させる鍵となります。 2. 適切なツールの選択 2.1 広い適用範囲 まず必要なのは、アプリケーション全体を分析できるツールです。それに最適なツールセットがベリタスソフトウェアから提供され

ています。ベリタスソフトウェアは、アプリケーション パフォーマンス管理に特化した製品ラインを提供しています。そのカバーする

範囲は、デスクトップからネットワークサーバーやアプリケーション サーバー、さらにデータベースとストレージデバイスにまで及

びます。このセットに属する製品は企業のビジネス要求に合わせて成長し、包括的アプリケーション パフォーマンス ビューを提供

します。 2.2 最小のオーバーヘッド 正確で有用なデータを提供し、かつ次のファクターには一切影響を与えないツールが理想的です。 • ソース コード • アプリケーション パフォーマンス VERITAS Indepth for J2EE のチェーン計測方式は、タイム クリティカルな部分にネイティブ C コードを使用しており、Java ベー

スの計測方式よりも大幅に軽量です。適切な使用状況における VERITAS Indepth for J2EE のパフォーマンス オーバーヘッド

は、わずか 1 % ~ 4 % です。 2.3 使いやすさ 覚えやすく使いやすいツールが一番です。VERITAS Indepth for J2EE はブラウザベースのユーザー インタフェースを使用して

いるため、使いやすく、最小限のトレーニングで、認証ユーザーであれば誰でも好みのブラウザからアクセスできます。重要な情

報は複数のユーザー間で同時に共有されます。また、URL を用いて後から容易にデータを参照することができます。 2.4 有効性 システムの改善を強力に支援するツール、VERITAS Indepth for J2EE は SmarTune™ テクノロジで、アプリケーションの既存

の弱点を特定し、信頼性が高く、極めて実践的な改善方法を提案します。

Page 4: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

4

3. パフォーマンスを改善する、3 つの実践的方法 3.1 データ キャッシュ システム内でアクセスされるデータの多くは、数分間、数時間、あるいはさらに長い期間変更されない場合があります。アクセス

するデータが、このように静的である場合、あるいはクライアントがリアルタイム データを必要としない場合には、データ キャッ

シュを使用することにより、ネットワーク トラフィックとデータベース使用率を大幅に低減できます。

図 1 – データ キャッシュがない場合 呼出しが 9 回、データベース ヒットが 9 回

図 1 のクライアントは同じ VM 内で稼動しているため、ネットワーク トラフィックは過大には見えませんが、データベース ヒットの

量は過大です。

図 2 – データ キャッシュを使用した場合 呼出しが 9 回、データベース ヒットが 4 回

Page 5: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

5

3.2 セッション単位のアクセス設計 EJB テクノロジを使用しているシステム設計者なら、クライアント レイヤから Entity Bean に直接アクセスすることには、次の問題

があることに気付くでしょう。 • ネットワーク トラフィックと待ち時間の過大な増加 • 扱いにくいセキュリティ管理 • 非効率なトランザクション動作 • 再利用の制約

図 3 – クライアントから Entity Bean への直接アクセス

間接レイヤを Session Bean の形で導入することにより、これらの問題は容易に解決できました(図 4)。 • ユーザー許可の決定を Session Bean が引き受けるため、柔軟性と再利用性が高まる • Session Bean は、リモート クライアントに代わって、Entity Bean の呼出しをまとめて実行するため、ネットワーク トラフィック

が減少 • Entity Bean のグループを呼び出すメソッドにトランザクション スコープを適用することができるため、トランザクション オー

バーヘッドが減少 • サーバー上で実行されるビジネス ロジックが増えるため、クライアント コードを単純にできる

Page 6: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

6

図 4 – セッション単位のアクセス設計を適用した場合の、クライアントから Entity Bean データへのアクセス

3.3 サービス ロケータ アプリケーションは、J2EE 内部で JMS ファクトリ、DataSources、EJBHome オブジェクトなどの共通サービスにアクセスする場

合、JNDI(Java Naming and Directory Interface)API を使用します。このため、初期コンテクスト オブジェクト(Naming サービ

スのルート)の作成が必要となり、続いて該当するリソースまたはサービスの参照または検索が行われます。この参照が成功す

ると、そのリソースのシリアル化可能な代表コードが、パーティに転送されます。したがって、サーバーとクライアントが共存してい

る場合、次のような明らかな設計上の問題があります。 • これらの動作が実行されるたびに、数秒間経過する場合がある。 • JNDI-API 固有コードの挿入により各クライアントが複雑化する。 • 不要なネットワーク トラフィックがシステムに追加される。

図 5 – クライアントから JNDI サービスへの直接アクセス

Page 7: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

7

多くの共存クライアント(サーブレットなど)が、同じサービスを必要とする状況では、サービス ロケータ オブジェクトまたはキャッ

シュをシステムに追加することにより、システム全体としての応答性を顕著に改善することができます。

JNDI アクセスコード

JNDI アクセスコード

図 6 – サービス ロケータを使用して、頻繁にアクセスされるサービスの参照をキャッシュ

4. 実践的方法の必要性 4.1 開発時 「実践的な方法が存在するか」という議論よりも、「この方法でアプリケーションの改善が可能か」という議論の方が重要です。上

に説明した 3 つの実践的方法は素晴らしい出発点となります。頻繁に使用されるデータと参照をキャッシュすることは、どのよう

な J2EE アプリケーションにも有効です。しかし、実際に「頻繁に使用されるもの」を決定することは、開発時には困難な場合があ

ります。EJB 開発における成功の要は、セッション単位のアクセス設計ですが、トランザクション動作およびスコープなどの決定

がそのためには必要です。開発者は、リリース済みのアプリケーションをテストすることにより、設計上不適切な個所を見つけ、修

正することができます。 VERITAS Indepth for J2EE は、SmarTune と呼ばれる機能を備えています。この機能はアプリケーション動作について、特定

の側面から検査した後、改善方法をアドバイスします。開発の初期段階よりも、アプリケーションが実行可能になった段階で、こ

の機能の有効性は発揮されます。 4.2 品質検証時 品質検証(QA)時には、多くの場合、実践的な方法と適切なパターンがすでに適用されていると考えられがちです。しかし、QA チームが開発チームと異なる場合、実践的な方法の必要性を十分認識しているとは限りません。 ベリタス製品は、精査中のアプリケーションに精通した人にも不慣れな人にも、有益なサポートを提供します。アプリケーションの

パフォーマンスが悪かったり、エラー終了しそうになると、それは開発チームに戻されますが、VERITAS Indepth for J2EE は、ア

プリケーションのホットスポットを決定し、リファクタリングの候補を挙げる上で非常に有効です。開発者は、実態を反映した情報を

得て、自信を持って作業に臨みアプリケーションを改善することができます。

Page 8: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

8

4.3 運用時 運用中のシステムに新しい設計パターンと実践的な方法を適用することは、開発中のシステムに比べ、技術的にも組織的にも非

常に困難です。しかし、完成度の高い成熟したアプリケーションを実現するためには、それが必要不可欠な場合もあります。ユー

ザーへのサービス提供がストップする状況は、一般にアプリケーションがエラーしたり、停止してしまった場合に発生します。ここ

でベリタスが提供する機能はきわめてユニークなもので、パフォーマンスが平均以下になった時点を識別し、問題の性質を特定

して、余計に消費されたリソースを明らかにしてリファクタリングを容易にします。 5. VERITAS Indepth for J2EE の使用 5.1 コードの計測 ベリタス製品を使用してアプリケーションを調査するためには、まず、次の手順によるコードの計測(付録を参照)が必要です。

1. ベリタス製品をインストールします(約 30 分)。 2. アプリケーション サーバー用起動スクリプトをカスタマイズします(約 2 分)。

5.2 SmarTune の実行 SmarTune は、ユーザーに対するアドバイザの役割を果たします。収集されたデータにルールを適用し、アプリケーションの速度

低下の要因として最も可能性が高いものを示します。(SmarTune は、アプリケーションのパフォーマンスを向上させる一般的なア

ドバイスも提供します)。SmarTune の使用手順は次のとおりです。 1. VERITAS Indepth for J2EE を起動します。

2. アプリケーション サーバーを実行し、対象となるアプリケーションの使用状況と負荷をテストします。

3. Web ブラウザを開きます。

4. Indepth GUI を表示します。

5. アクティビティのピークが最も高いデータ スライスを選択し、SmarTune リンクをクリックします。 SmarTune は、数秒以内に次のような情報を表示します。

図 7 – SmarTune による問題の検出

70.46、46.41、28.18 という数字は、30 秒の分析期間の中で、これらのメソッド呼出しに消費された時間の割合(%)を示します。

※画面は英語版です。

Page 9: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

9

5.3 ドリルダウン アプリケーション パフォーマンスを向上させるには、分析をさらに進めることが必要です。

図 8 – ドリルダウン

5.4 問題の識別とアドバイスの表示 「shop.PriceListSessionBean_o8g3sf_EOImpl.getPrice」 に関連付けられたハイパーリンクをたどると、そのメソッド呼出しに関

する、より具体的な情報が表示されます。同時に、アプリケーションを改善する方法について SmarTune からのアドバイスも表示

されます。

図 9 – SmarTune からのアドバイス

※画面は英語版です。

※画面は英語版です。

Page 10: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

10

5.5 問題と実践的改善法との関連付け ここに挙げる例では、検証中のアプリケーションには、2 つの実践的な方法がすでに適用されています。JNDI リソースはキャッ

シュに格納され再利用されており、セッション単位のアクセス設計もなされています。しかし、開発時には、データ キャッシュが必

要とは考えられていませんでした。実際、アプリケーションは予測どおりの動作を示したのですが、負荷がかかると、アプリケー

ションの動作に変化が起こり、Stateless Session Bean の軽量なはずの呼出しが重くなり、アプリケーション パフォーマンス全体

が低下してしまいました。 SmarTune からのアドバイスは、アプリケーションのデータをキャッシュに格納する実践的方法の適用です。それに従い、

Session Bean の最初の呼出し後、Web アプリケーション レイヤで品目リスト情報をキャッシュ メモリーに格納するように修正が

施されました。この結果、アプリケーションのレスポンスは向上し、ユーザーの満足度も改善されました。アプリケーションに対して

同じ負荷テストを実行すると、ピーク負荷での同じメソッドの SmarTune による分析は次のようになりました。

図 10 – キャッシュによる最適化以降

データのキャッシュ格納により、EJB 呼出しの JSP 呼出しに対する比は、25:1 から 5.7:1 に低下しました。また、JSP の平均応

答時間も 25 % まで短縮されました。 SmarTune は、アプリケーションのチューニングをさらに進めるために、応答性を改善するさらなる措置を提案します。メソッド getPrice の処理に時間がかかっている点に着目し、このメソッドのトランザクション動作のチューニングが推奨されます。その結

果、応答性はさらに改善します。こうして負荷テストは、当初のアプリケーションと最適化されたアプリケーションに対して順次実行

されます。VERITAS Indepth for J2EE からは、次のようなグラフが表示されます。

※画面は英語版です。

Page 11: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

11

図 11 – アプリケーション分析の before and after

6. まとめ 複雑な分散システムを開発する場合に、最適化領域の見落としを避けることは困難です。また、ユーザー、ネットワークおよび基

礎となるインフラストラクチャの側で、予期せぬ動作がどうしても発生します。このような最適化の欠落やパフォーマンスの低下要

因を認識し、その修正の方法を見つけることは、アプリケーションのライフサイクルを通じて最も重要な課題です。VERITAS Indepth for J2EE は、J2EE アプリケーションのパフォーマンス問題を見つけ、解決するための強力なツールです。 7. 付録: VERITAS Indepth for J2EE の概要 2002 年、ベリタスは J2EE Application Performance Management ソリューションのバージョン 2 を VERITAS Indepth for J2EE という名前でリリースしました。この製品をインストールすることにより、複数のコンポーネントを連携させ、指定された JVM のセットから生成されたパフォーマンス データの格納、アクセス、分析が可能になります。 VERITAS Indepth for J2EE は、アプリケーション サーバー、使用 JDBC ドライバ、アプリケーションの Java バイトコードを計測

することにより分析を実行します。この計測は仮想マシンによりロードされるバイト コードに対し、変更を加えることで実装されて

います。この変更により、各メソッドの開始時と終了時のタイムスタンプの収集と、実行された個々のスレッドのトレースが可能に

なります。収集されたデータは、コレクタ エージェント(計測対象の VM のホストにインストールされた C++ コンポーネントとして

実装)に送られます。コレクタ エージェントはこの情報をアーカイブ エージェントに送り、アーカイブ エージェントは受け取った情報

をベリタス データベースに格納します。 ユーザーの要求に応じて、分析エージェントがベリタス データベースからデータを取得して J2EE アプリケーションのパフォーマン

ス動作の評価情報を作成、Web ブラウザに文字情報とグラフィック情報として表示します。データは、独立した単位に分けて収集

され、設定可能なポーリング間隔でリフレッシュされます。

jsp_servlet.__viewitemlist._jspService メソッドの実行中に消費される時間の違いに注目

してください。 ユーザー応答時間が平均以下を維持するよう

になれば、アプリケーションの他の領域に関心

をむけることが可能です。 アプリケーション パフォーマンスの管理責任者

は、SmarTune を使用して、アプリケーションの

負荷テストを実行することより、アプリケーション

のホットスポットの発見と、それに基づくアプリ

ケーションの改善を交互に行うことが出来ます。 J2EE 開発の反復的性質とリファクタリングの成

果(機能を追加しないでコードの構造を改善す

るようなコードの変更)を強力にサポート、その

有効性が高まります。

Page 12: 反復的開発: J2EE の最も実践的な活用法eval.symantec.com/mktginfo/downloads/pro/indepth_j2ee_wp_practices.pdf · すなわち、適切なツールと最も実践的な方法を選択することが、

© ©Copyright 2003/06/30 VERITAS Software Corporation. All rights reserved. VERITAS、VERITAS SOFTWARE、VERITAS ロゴ、およびその他の VERITAS 製品は、米国および各国の VERITAS Software Corporation の商標または登録商標です。その他の会社名、製品名等は、それぞれ各社の商標または登録商標です。製品の仕様、性能等は予告なく変更する場合がありますので、ご了承ください。

ベリタスソフトウェア株式会社 〒100-0011 東京都千代田区内幸町 2 丁目 2 番 2 号 富国生命ビル TEL.03-5532-82411 FAX.03-5532-0887 http://www.veritas.com/jp/

お問い合わせ先

図 12 – VERITAS Indepth for J2EE の展開

Apache Tomcat Web ブラウザベースのユーザー インタフェースのサーバー側ロジックをホストし

ます。

MYSQL 収集データ用に提供されるデータベースです。(Oracle またはその他のデータ

ベースに変更可能)

Java ベースの Indepth 管理ツール Indepth 製品の設定に使用されます。

Java ベースのアーカイブ エージェント すべてのコレクタ エージェントからのデータを集約して、ベリタス データベース

(デフォルトでは MYSQL)に格納するために使用されます。

コレクタ エージェント データを VM から収集し、アーカイブ エージェントに送るために使用されます。

分析エージェント 収集データを解釈するために使用されます。

※ ベリタスソフトウェアの詳細な製品情報につきましては、弊社 の Web サイト(http://www.veritas.com/jp/)をご覧ください。

IJ010-0703