プロダクトレビュー
ミッションクリティカル機能を強化
Cosminexus AS Version6
宮下知起
2004/10/8
本稿は2004年に執筆されたものです。Cosminexusの最新情報は、以下の記事をご参照ください。 |
「運用であきらめずに自分の考え方を信じてほしい」 国産アプリケーションサーバの優位点とは? 独自Java VMを作った背景やアプリケーションサーバ市場の現状、今後の展開、そして日本人開発者へのメッセージなど 「Java
Solution」フォーラム 2009/4/28 |
|
Java Soulutionフォーラムで日立製作所のJ2EEアプリケーションサーバ「Cosminexus」を紹介するのはこれで2回目だが、前回紹介したバージョン4と今回紹介するバージョン6では、大きく内容が変わっている。
「製品紹介:業界標準のツールで構成 Cosminexus Version4」では、同製品の特徴を優れた製品をアプリケーションサーバのニーズに合わせ組み合わせたサーバ製品として紹介した。まず、アプリケーションサーバの心臓部にはMacromedia JRun Application Serverを採用していた。しかしバージョン5以降では、日立製作所自身がJVMの改良などを行った独自のサーバである。読者の中にもCosminexusがJRunベースだと誤解されている方がまだいらっしゃると思うので注意されたい。そのほかにも、日立製作所がメインフレーム時代からつちかった高パフォーマンス、高可用性を実現するための機能がアプリケーションサーバ自体に実装されるなど、以前のCosminexusとは大きく異なっている。
日立製作所らしく、新しいCosminexus Application Server Version6(以下、Cosuminexus6)は大規模開発に適したサーバ製品となっている。今回はCosminexusの高パフォーマンス、高信頼性のための機能にフォーカスし紹介する。
性能監視/チューニングのための機能 |
高パフォーマンスと信頼性の実現には、性能監視とチューニングの作業が不可欠である。Cosminexus6は、性能監視/チューニングのための機能を大きく2種類提供している。
■JavaVMを監視する「JavaVM監視エージェント」
Javaプログラムの実行におけるボトルネックの1つにガベージコレクション(GC)がある。最近ではGC技術も進歩し、アプリケーションのパフォーマンス劣化の問題もかなり解消されているものの、JavaVMが適切にGC処理を行うようにJavaVMのパラメータを設定する必要もある。信頼性が高く、パフォーマンスの良いシステムを構築するためには、JavaVMの状態を把握した上での適切なチューニングと、メモリ関連の障害(OutOfMemory Errorの発生など)に対応する必要がある。
JavaVMは、javaコマンドの実行時に「-verbose:gc」オプションを付けることによってGCに関するログを出力することができるが、ログの分析には手間がかかる。Excelで読み込み統計を出したりグラフ化を行うことで分析はできるが、この手法では手間がかかるうえにリアルタイムのJavaVMの監視ができない。
Cosminexus6には、ログを解析するという煩わしい手法を使わなくともJavaVMの監視をリアルタイムに行うことができる「JavaVM監視エージェント」機能が提供されている(図1)。この機能は、日立製作所がサン・マイクロシステムズとのライセンス契約のもと入手しているJavaVMのソースコードに、日立製作所が独自に手を入れて開発したものだ。
図1 JavaVM監視エージェント |
同機能を利用すると、Javaアプリケーションの実行中にヒープ領域の使用状況をリアルタイムにグラフ化でき、チューニングのための解析作業の効率化を図ることができる。また、同機能はスレッドの状態も監視することができる。個々のスレッドのID、スレッド名、スレッドの開始/完了時刻などをリアルタイムに取得できる。例えばシステムの応答がないという現象が発生している場合、なんらかの原因による停止状態なのか、それとも極端にパフォーマンスが落ちている状態なのかを切り分けることができる。
■トレース機能の強化
J2EEシステムでは、ユーザからのリクエストが、フロントのWebサーバからアプリケーションサーバへ、さらにデータベースサーバへと、段階的に処理される。本番稼働注にトラブルが発生した場合や、性能が出ないときにどこがボトルネックになっているかを特定するために、それぞれのレイヤで出力するログを突き合わせて原因を特定する必要がある。しかし、この作業は非常に手間がかかる。
Cosminexus6では、各過程でのトレース情報を自動的に収集し、一元管理するための機能が用意されている。このため、困難だった障害発生の原因を、素早く簡単に特定することが可能だ。トレースのログにはリクエスト毎にユニークなIDが付加され、このIDをキーにして各ポイントでの情報を取得できる。各レイヤでの情報は運用監視ツール「Cosminexus Manager Server」に自動的に収集される。このトレース機能には、日立製作所のOpenTP1で実績のあるPRFトレース技術が活用されているため、非常に高速にトレース結果を取得できる。また、データベースに日立製作所のHiRDBを使う場合は、データベースのコネクションIDをログ中に出力することができるため、データベースアクセスを含めて処理シーケンスを把握することが可能だ(図2)。
図2 強化されたトレース機能 |
信頼性と高パフォーマンス実現のための機能 |
J2EEシステムの欠点として、スケジューリング機能、障害回復機能が標準で用意されないことがあったが、Cosminexus6には、システムのパフォーマンス確保と安定稼働のためにOLTP対応機能が組み込まれ、J2EEに欠ける機能を補足している。OLTP技術は日立製作所が非常に得意とする分野である。OLTP対応は他社のアプリケーションサーバに対するもっともアドバンテージとなる部分だ。
OLTP技術とは、整理すると大きく4つの機能に分けられる。
- 優先制御
- 流量制御
- 負荷分散
- サービス閉塞
それぞれの機能を以下に要約しよう。
■優先制御
優先制御とは、複数の処理の間で優先度を定義し、優先度が高い順に処理を行うことだ。Cosminexus6では、この機能を実現するために2つのメカニズムを実装している。
1つはWebフロントシステムにおける優先制御だ。アプリケーションの優先度は、それに割り当てるスレッド数やキューの長さで規定する。そうすることで、優先度の高いアプリケーションには余裕のあるリソースが割り当てられ、一定の処理能力を安定的に確保できる。優先度の低いアプリケーションに対しては、最初は少ないスレッドを割り当てておき、リクエストが増えるたびにスレッド数を動的に増やしていくことが可能だ。
もう1つは、JSP/ServletからEJBにリクエストを渡すバックエンドの部分にける優先制御だ。EJBへのリクエストのやり取りにキューを介在させることで、スケジューラによってその処理を制御することを可能にしている。
このように、フロントとバックエンドの両方で優先制御を実現することで、システムの信頼性を向上させている。
■流量制御
流量制御とは、アプリケーションに対するリクエストキューの長さやキューに対応する実行スレッド数を設定することで、過剰なリクエストがサーバ内に滞留しないようにするものだ。この機能により、能力を上回るリクエストが集中し、それを処理しようとしてサーバ全体のレスポンスが悪化することを防ぐ。キューの長さはアプリケーション毎に設定することが可能なため、アプリケーションの重要性や許容されるレスポンスタイムなどを基準に、きめの細かい制御を行うことが可能だ。
■負荷分散
複数のサーバで処理を分散させるスケールアウトでの処理性能アップのアプローチはすでに一般的だが、Cosminexus6の特徴は、これをEJBサーバ間での負荷分散を本格的に実装した点だ。EJBcreate発行時の負荷分散に加え、業務メソッド呼び出し時の負荷分散も可能になっている。スケジューラキューに格納されたリクエストを、負荷状況に応じて他のキューに転送することもできるため、高負荷環境におけるよりフレキシブルな負荷分散を実現する。
■サービス閉塞
サービス閉塞は、アプリケーション単位でサービスを停止できる機能だ。スケジューラキューを閉塞させることで、キューに残ったリクエストをすべて処理したうえでアプリケーションを停止することができる。この機能は、例えばアプリケーションのバージョンアップの際に有効だ。すなわち、ユーザーに対してサービスが停止することなくシステムを入れ替えることを実現する。
フレキシブルな開発環境 |
Cosminexusには以前から専用の開発ツール「Cosminexus Developer」が提供されているが、今回のバージョンでは対応するIDEやフレームワークが増えている。
Cosminexus Developerでは、Page Designerで画面をビジュアルに設計し、Application Designerでドラッグ&ドロップ操作によってフローチャートのように画面遷移の定義を行える。新しいCosminexus Developerでは、従来から連携が可能だったボーランドのJBuilderに加え、同じくボーランドのTogether Control Center、そして人気の高いオープンソースのIDEであるEclipseに対応した。利用できるIDEが増えたことで、開発者は使い慣れたIDEを使って開発を行うことができる。
また、従来から対応するフレームワークとしてイーシー・ワンのcFrameworkがあったが、今回からStrutsにも対応した。
今回はCosminexus6のJ2EEアプリケーションサーバ機能にフォーカスして紹介したが、CosminexusにはEIPやビジネスインテグレーション(BtoB、BtoC、XBRLソリューション基盤など)のためのソフトウェア、さらには業種向けのアプリケーションパッケージやフレームワークが「Cosminexus
Version6」ファミリ製品として豊富に提供されている。J2EE基盤におけるあらゆるシステム構築のニーズに備えている。
Java Solution全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|