ヘッダをスキップ   IT(情報・通信)総合サイト Japan Site

ナビパラ.コム日立トップページへ


ここからグローバル・ナビゲーション |  ホーム  |  ソリューション  |  イベント・セミナー  |  IT情報  |  経営情報  |  ナビパラ通信  |   コラム  |グローバル・ナビゲーションここまで

    会員登録登録内容確認/変更退会    サイトマップ    お問い合わせ
検索 by Google

 > 詳細な検索


コラム

ここからブレッド・クラム ホーム > コラム > 開発者に聞く > バックナンバーブレッド・クラムここまで

ページタイトル

開発者に聞く



ここから本文
 
このコーナーでは、日立製作所の研究所等で研究・開発を行っている技術テーマを中心としたコラムをお届けします。 研究員にインタビューを行い、技術テーマ解説・開発過程におけるエピソードなどを交えてわかり易くご案内いたします。
Webアプリケーションを継続的に安定稼働させるソフトウェア運用管理方式を開発
■ 空きメモリーが不足すると性能低下や障害が発生

− メモリーリークとはどのような現象なのか、簡単に説明してください。
川本: アプリケーションプログラムは、実行する際にメモリーを獲得し、処理が終わったらメモリーを解放するのが基本です。ただしアプリケーションが複雑になると、獲得したメモリーが解放されないケースが少なからず起こります。そのため、使えるはずのメモリーが少なくなり、処理性能の低下やシステムダウンを招いてしまうのです。これがメモリーリークと呼ばれるもので、ソフトウェアの世界ではよく知られた現象となっています。
中村: メモリーリークの大きな要因は開発時のバグです。アプリケーションの多機能化と短期開発が加速している現在、いくらデバッグ(バグを発見したり修正する作業)を重ねても、メモリーリークの原因となるバグをすべて除去するのは困難で、運用時に障害を発生させる場合があります。特に最近はWeb技術の進展で、電子商取引やネットバンキング、企業の業務アプリケーションなど、アプリケーションの多くはWebアプリケーションとして実装されるケースが一般的です。そのため、これらの高い信頼性が要求されるWebアプリケーションのメモリーリークをいかに予防するかが大きな課題となっていました。
− これまでも対策はあったわけですね。
川本: 最も簡単なのは再起動です。パソコンなどでもアプリケーションがフリーズしたり、動作がおかしいなと思ったら再起動しますよね。Webアプリケーションも同じで、稼働中に再起動すれば蓄積された不要なメモリーが解放され、システムは安定した状態に戻ります。ただしその間にサービスも停止してしまうのが難点です。そこで停止させたくないサービスでは、複数のサーバで同じWebアプリケーションを動作させ、一方のメモリーが枯渇してしまう前に処理要求を他のサーバに切り替える一方で、元のサーバを再起動させる方法を採用しています(図1)。
 しかしこの方法も、切り替え時には再起動するサーバが受け持っていた分の処理性能が最大50%低下してしまいます。そこでわれわれは、こうした従来方法の弱点を克服する新技術を開発しました。
図1 従来方式
図1 従来方式

■ 同一サーバ内で2つのWebアプリケーションを切り替える

− 新技術の内容を教えてください。
川本: 最も大きなポイントは、同一サーバ内で2つのWebアプリケーションを切り替える方式を採用したことです(図2)。例えばA1という現用系のWebアプリケーションで不要なメモリーが蓄積してきたら、ユーザーからの新しいサービス要求をA2という同じ内容のWebアプリケーションで実行するように切り替えます。切り替え後、A1のWebアプリケーションは停止し、破棄されます。これを繰り返せば、一瞬たりともサービスを停止することなく、蓄積された不要なメモリーを解放することができるのです。2つのWebアプリケーションが稼働するといっても、1台のサーバ内で完結する話ですから、OSやミドルウェア、使用するメモリーも共通で、特別にリソースを追加する必要はありません。
図2 開発方式
図2 開発方式
中村: 先ほども言ったように、複数のサーバ間で現用系と代替系を切り替える方法では、高負荷時にWebアプリケーション全体の処理性能が大幅に低下してしまいます。しかし新方式ではサーバを切り替える必要がないため、処理性能はそのまま維持されます。切り替え時の性能低下はほんのわずかで、サービス品質も損なわれません。
− どのような技術を適用することで、今回の方式が可能となったのでしょうか。
川本: Webアプリケーションには固有のURLがついており、ユーザーからはそれを識別子としてアクセスする形となっています。ですから同じWebアプリケーションを2つ、同一サーバ上で実行しようとすると、従来ならURLが同じため衝突してしまいます。そこで、実体としては2つあるWebアプリケーションを、あたかも1つに認識させるような仮想化技術を使い、ユーザーからは今まで通りのURLでアクセスしても、システムの入り口に設けたリクエスト転送部が必要に応じて現用系もしくは代替系のWebアプリケーションにリクエストを分けていくという仕組みを考案しました。
− 非常にシンプルな考え方ですね。ただ、今までだれも気づかなかった。
川本: そうですね。同じノード内で2つの処理を実行させるというアイデアは、もしかしたら“コロンブスの卵”だったかもしれません(笑)。ただし、この発想を実際のシステムとして実現させるには、いくつかのハードルがありました。例えば、ミドルウェアとうまく連携しながら複数のWebアプリケーションを起動する仕組み、リクエストの転送技術、そしてショッピングカート内の商品を記憶しておくような内部情報を2つのWebアプリケーション間で共有する技術。さらには、これらの処理を行っても性能を低下させないための細かなチューニング。それらをすべてクリアしたことで、シミュレーションによる評価でも、切り替え時の性能低下を数%程度に収めることに成功しました。

■ ノンストップで安定したサービスを提供できる

− この技術が適用されると、どのようなメリットが期待できるのでしょうか。
川本: 例えばネットショッピングなどの電子商取引システムでは、お客さまからのリクエストが継続している状況で、サーバの処理性能が低下すると購買意欲が急速に下がってしまう傾向があります。「8秒ルール」という言葉に示されるように、ページがすぐに表示されないと、またクリックしても反応が遅いと、お客さまは別のサイトへ流れてしまうわけですね。メモリーを解放するためのサーバ再起動には早くても5分から10分、長いときには30分かかるケースもあるため、その間の性能低下の心配がない今回の技術は、間違いなくサイトのサービスレベルや集客率の向上に大きく寄与するはずです。
中村: ミッションクリティカルなシステムでは、この技術を適用する際にも複数のサーバを用意する必要がありますが、従来に比べて性能低下がほとんどないため、サービスに必要なサーバ総数を低減することが可能となります。また極端な話、待機系が故障して1台になったとしても、今までなら再起動によるサービス停止を余儀なくされたものが、止めることなく継続運転できるという安心感もあります。

■ 幅広いシステム障害を予防する技術へと進化

− メモリーリークを定期的に解消できるというのは、システム全体の安定稼働にもつながるような気がしますが。
川本: システムをクラッシュさせる要因というのはメモリーリーク以外にもたくさんあり、複雑な要素がからみあっています。しかしシステムを再起動すれば、あるいはアプリケーションを入れ替えれば、そういった問題が起きるケースをかなり救えることも確かです。その意味で今回の技術は、メモリーリークだけでなく、さまざまなシステム障害の芽を取り除き、継続的な安定稼働に貢献できる可能性が高いと考えています。IT業界ではこれを“Software Rejuvenation”つまり“ソフトウェアを若返らせる方法”と呼んでいますが、それが実際にどのような仕組みで実現できるのかをきちんと検証していくことが、これからの重要な課題になると思います。
中村: 今回の発表ではWebアプリケーションの切り替えを、一定時間あるいはメモリー残量に応じて行う方式を提案しましたが、現在は、より運用効率と性能を向上させるためのインテリジェントな切り替え方式を検討している最中です。また、これらの技術は近い将来、日立のWebアプリケーション基盤Cosminexusへの搭載が予定されており、これからもリアルな現場での実証実験を重ねながら、お客さまのビジネスに高い付加価値をもたらす技術へと磨き上げていきたいと考えています。
− 期待しています。今日はどうもありがとうございました。
[ Back ] 2 / 3 [ Next ]
本文ここまで


ここからローカル・ナビゲーション
開発者に聞く
ここから1つ下の階層
バックナンバー

ITウオッチング

モノがたり
ローカル・ナビゲーションここまで



イベント・セミナー

助成金・補助金

税金Q&A




ページトップへ

 
ここからフッタ  | サイトの利用条件 | 個人情報保護に関して | 商品名称について | 推奨環境 | 当サイトへのリンクについて |フッタここまで

© Hitachi, Ltd. 2001, 2008. All rights reserved.