[製品紹介]
大規模システム開発を意識したAPサーバ
hp blustone
編集局
2001/11/22
Hewlett-Packard社(以下HP)のアプリケーションサーバ「hp bluestone」は、もともと1997年に設立されたBluestone Software Inc.(以下Bluestone社)が誕生させた製品だ。HPは、Bluestone社を2000年10月に買収した。その後、hp bluestoneとして新生することになった。アプリケーションサーバとしては歴史があるだけに、アメリカン航空の座席予約システムやドイツ・ファイナンシャル・サービスの法人顧客システムなどへの導入実績がある。hp bluestoneは、よりエンタープライズでクリティカルなマーケットを意識して設計された製品である。本稿では、hp bluestoneが持つエンタープライズ・プラットフォームとしての特徴にフォーカスを合わせて解説しよう。 (編集局) |
1.大規模システムを意識した機能 |
hp blustoneの構成 |
hp bluestoneは、「Total-e-Server」「Total-e-Transactions」「Total-e-Mobile」「Total-e-Syndication」の4つの製品で構成される。まず、それぞれの役割を以下に整理する。
プロダクツ | 役割 |
Total-e-Server | アプリケーションサーバ本体。J2EE 1.2に完全準拠し、JCA 1.0、EJB 2.0のMessage Driven BeanなどのJ2EE 1.3の最新仕様の一部をサポートする |
Total-e-Transactions |
JTS 1.0およびOTS 1.0に準拠した分散型トランザクション管理を実現するサーバ製品。2フェーズコミットもサポートする |
Total-e-Mobile | PDAや携帯電話などのモバイル機器に向けてコンテンツを配信するためのサーバ製品。1つのコンテンツをダイナミックに変換し、デバイスの違いを意識することなく提供できる。また、モバイルコンピューティング向けのPIM機能も提供する |
Total-e-Syndication | コンテンツ配信を実現するサーバ製品。コンテンツ課金のための監査記録や使用記録など、多数の管理機能を持つ |
さて、アプリケーションサーバとしての基本機能を持つTotal-e-Server 7.3(以下TeS)は、高可用性を実現するために、以下のような特徴を持つ。
- アプリケーションの複数ノードへの柔軟な配置
- オーバーヘッドの少ないクラスタリング
- アプリケーションを停止することなくバージョンアップ
アプリケーションの柔軟な配置 |
TeSの、Servlet/JSPやEJBのコンテナとなる「Universal Business Server」(UBS)は、複数のホストに分散が可能である。さらに、1台のホスト(ノード)上での複数のUBSインスタンスを同時起動することも可能だ(図1)。1つのアプリケーションを複数のUBSインスタンスで並列稼働させることによって、負荷分散を実現する。逆に、複数のアプリケーションを1つのUBSインスタンスで実行することも可能で、複数のアプリケーションサーバ上に、UBSとアプリケーションを自由に配置することができる。
図1 UBSは複数のホストに分散可能である。また、1台のホストで複数のインスタンスを起動することも可能だ |
また、UBSへの処理の振り分けは、Load Balance Broker(LBB)と呼ばれるWebサーバのプラグイン・モジュールによって行われる。
以上のような、アプリケーションの柔軟な配置機能は、以下のような効果をもたらす。
- あるアプリケーションの不具合がほかのアプリケーションへ影響しない(アプリケーションの独立性)
- 複数のアプリケーションや異なるバージョンの共存が可能(クラスパスの衝突がない)
- 各インスタンスのヒープサイズを適切に設定できる(ガベージコレクション)
- アプリケーションごとのアクセス数や処理量に応じてサーバへの適切な配置ができる
(※LBBは、ISAPI、NSAPI、Apacheモジュールをはじめ、CGIやServletとしても提供されており、ほとんどのWebサーバに対応している)
クラスタリング自体のオーバーヘッドを削減 |
前項で説明したように、Webサーバへのリクエストは、LBBによってUBSへ振り分けられる(図2)。LBBは各UBSインスタンスが現在処理中のリクエスト数の情報を保持しており、処理中のリクエスト数が最も少ない、すなわち最も空いているUBSへ次のリクエストを振り分ける。
図2 LBBは、処理中のリクエスト数が最も少ないUBSへリクエストを振り分ける |
処理性能の異なるサーバ群にUBSが分散されている場合、処理性能の高いサーバは処理性能の低いサーバに比べて速くリクエストを処理し、処理中のリクエストが少なくなるため、より多くのリクエストをLBBによって振り分けることができ、その結果、効率良くリソースを活用できることになる(図3)。また、アルゴリズムによって自動的に最適な配分を行うため、サーバごとに配分の重み付け設定をする必要がない。
図3 さらにLBBは、処理性能の高いサーバに優先的にリクエストを振り分ける |
クラスタを実行するアプリケーションサーバでは、ハートビートポーリング、負荷の調整、レプリケーションなど、サーバ間でのさまざまな処理を伴い、これらはサーバ台数が増加するにつれ、より大きなオーバーヘッドとなり、スケーラビリティに影響を与えてしまう。しかし、TeSはLBBが負荷分散処理を担い、しかもその動作アルゴリズムがシンプルなため、UBSを増やしても、ほぼリニアにスケーラビリティを確保できるとしている。また、セッションを管理するためにユーザーを毎回同じUBSへ振り分けることもできる。
アプリケーションを止めずにバージョンアップ |
hot versioning機能によって、アプリケーションを稼働させたままのバージョンアップが可能だ。クライアントのステート情報はバージョンアップの前後で維持されるため、ユーザーはバージョンアップ後のアプリケーションを継続して利用できることになる。
高可用性を実現するそのほかの機能 |
そのほかにも、以下のような機能でTeSはエンタープライズに対応している。
●サーバプロセスの自動起動
アプリケーションサーバ上ではDynamic Application Launcher(DAL)と呼ばれるデーモン(Windows NT/2000の場合はサービス)が常駐している。DALはUBSを起動する役割を持っており、LBBはUBSが起動していないことを認識すると、LBBからの指示によってDALがUBSを起動する。つまり、リクエストの処理に必要なプロセスは、DALによって自動起動されることになる。
●多様なセッション管理メカニズム
一般的に、ショッピングカートなどの複数のWebページをまたがってユーザー固有の状態を保持する必要がある場合にセッション管理機構が用いられる。TeSには、セッション情報を保持するメカニズムとして3種類のState
Serverが用意されている(図4)。セッション情報の重要性、パフォーマンス、永続化の必要性など、アプリケーションの特性に応じたセッション管理を行うことができる。
図4 3種類のセッション管理のメカニズム |
(1) Inprocess State Server
UBSインスタンスのメモリ内にセッションオブジェクトを保持する。ほかのUBSインスタンスと共有することができず、UBSがダウンするとセッション情報は失われるが、セッション情報はアプリケーションと同じプロセスにあるため、そうでない場合に比べ高速にアクセスすることができる。
(2) External State Server
UBSインスタンスとは別のセッション保持専用Java VMにセッションオブジェクトを保存する。UBSのサーバとは別のサーバ上で稼働させたり、複数のUBSから共有することが可能だ。複数のUBSから参照することにより、1つのUBSがダウンしてもセッション情報はほかのUBS経由で引き続きアクセスすることができる。ただし、External
State Server自身がダウンするとセッション情報は失われる。
(3) Persistent State Server
セッション情報をJDBCでデータベースに保存することにより永続化する。複数のUBSから共有可能だ。UBSにキャッシュ機能を持つことにより、データベースアクセスに伴うパフォーマンス低下を防ぐ。
2.BtoB、モバイルへの対応 |
|
|
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (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に関する基礎知識を解説する。
|
|