アットマーク・アイティ @IT@IT情報マネジメント@IT自分戦略研究所QA@ITイベントカレンダー  
 
 @IT > 複数のメモリ空間を横断的に統合する“ミドルウェア・データグリッド”の先進的テクノロジー
 
@IT Special

 

PR

Oracle Coherenceの核心、データグリッド技術に迫る!

複数のメモリ空間を横断的に統合する
“ミドルウェア・データグリッド”

先進的テクノロジー


オンラインのチケッティングサイトなど、大量のアクセスをリアルタイムに処理しなければならないシステムに、高い可用性と高速なレスポンスを提供するインメモリ・データグリッド基盤の「Oracle Coherence」。複数ハードウェアのメモリ空間を統合して仮想化することで、高いスケーラビリティを持つのも大きな特徴だ。今回はそれらを実現するデータグリッド技術にフォーカスを当てていこう。

なお、Oracle Coherenceが高負荷なWebシステムにどんなメリットをもたらすかは、前編「Oracle Coherenceはミッションクリティカルの常識を変えた!」を参照してほしい。


クラスタ内にデータをバックアップ

 インメモリでデータグリッドを構成するOracle Coherenceのデータ配置方法と冗長化方法を説明しよう。例えばOracle Coherenceで構成するキャッシュ・クラスタにデータを記録する場合、Webアプリケーションにはリスト1のようなシンプルなコードを記述する。

NamedCache cache = CacheFactory.getCache( <キャッシュサーバ名> );
String key = "cust1";             // キャッシュのキーコード
cache.put(key, <注文データ> );     // キャッシュするデータを記録
リスト1 キャッシュサーバにデータをプット

 キャッシュサーバ名にはホスト名ではなく、「CustomerData」など論理的な名前を記述する。続いてキャッシュのキーコードを設定し、そのデータをクラスタ内に記録する。通常は自動的に最適なノードに記録されるため、アプリケーションサーバからどのノードにデータを記録するかを意識する必要はない(追加設定で、関連するデータを特定ノードに集約化することも可能)。

 ノード内にデータが記録されると、自動的にクラスタ内の別のノードにデータのバックアップが作成される。データを保持するノードがダウンしても、それを検知するとバックアップデータがプライマリデータに昇格し、自動的に別のノードに新たなバックアップデータを作成する(図1)。バックアップデータは常に1つ保持するようになっているが、2つ以上のバックアップを作成する設定も可能だ。その場合はバックアップ時のオーバーヘッドはやや増加するが、同時に2つのノードがダウンしても必ずデータが保持されるため、より高い可用性を実現できる。

図1 キャッシュ・クラスタ内でデータのバックアップを作成

 なお、データの整合性を保証するトランザクション処理(コミット・ロールバックなど)は、通常のRDBMSと同等の機能を備えているから、アプリケーションサーバやネットワーク側でエラーが起こっても、データの損失は起こらない。

データソースの障害時にもデータ損失を防止

 バックエンドのデータベースに障害が起こった場合(冗長構成を取っていなければ)、通常はアプリケーションサーバにエラーが返って、ビジネスロジックの処理を続けることはできなくなる。だがOracle Coherenceの場合、データソースの障害時にもアプリケーションサーバとの接続は継続し、更新データはいったんキューに蓄積する。

 このとき一時的にキューサイズは増大するが、アプリケーション側には通常どおりサービスを提供するため、システム全体のスループットは維持される。Oracle Coherenceは一定間隔(例えば、2秒など)ごとにデータソースに対するデータ書き込みをリトライする機能を持っており、データソースの復旧を検知すると同時に蓄えたキューをすべてデータソースに書き込む。この間、何事もなかったようにサービスは続行されるわけだ。

 大量の注文をリアルタイムで処理するショッピングサイトやチケッティングサイト、オンライントレーディングサイトなどには、こうした耐障害性の高さはサービスレベルの維持に役立つだろう。

[オンライン・デモ] データソース障害時にも継続するビジネス

データアクセスを単純化し
複数のデータソースを透過的に利用

 Oracle Coherenceの導入メリットの1つは、データベースやMQ/JMSといった非同期メッセージ、外部データベースなど複数のデータソースを統合したデータグリッド基盤を構成することで、アプリケーションに記述するコードを単純化できる点にある。

 アプリケーション内にJDBCなどのコードを記述してデータベースに直接アクセスするのではなく、先述したgetCache関数のように抽象度の高いメソッドを用いてキャッシュサーバにデータを要求する(リスト2)。アプリケーションサーバからデータの要求を受けると、Oracle Coherenceはキャッシュ・クラスタ内にキャッシュされた対応データを探し、あればそれをアプリケーションサーバに返す。キャッシュ内になければデータソースに接続し、ロードして返す。

NamedCache cache = CacheFactory.getCache( <キャッシュサーバ名> );
String key = "cust1";                   // キャッシュのキーコード
Object <注文データ>  = cache.get(key);   // キャッシュするデータをGet
リスト2 キャッシュサーバからデータをゲット

 アプリケーション側はキャッシュサーバにデータを要求するだけで、データソースの種類や場所を意識する必要はない。このためアプリケーションのロジックから、データアクセスのための複雑なコード記述が切り離されることになる。例えばメインフレームからIAサーバにデータベースを移行するような場合でも、キャッシュサーバ側のデータアクセスロジックを変更するだけで済み、アプリケーションのロジックそのまま透過的に利用できる。

パフォーマンスのボトルネックを効果的に改善

 Oracle Coherenceによってデータグリッドを構築すると、パフォーマンスのボトルネックとなる3つの要素を効果的に改善する。

データベースアクセス、ディスクI/Oによる速度低下を低減

 Oracle Coherenceではデータをインメモリにロードして処理するため、データベースアクセスやディスクI/Oによるオーバーヘッドを最小限に抑えることができる。ディスクアクセスの多いアプリケーションほど、インメモリによるキャッシュ機能の有効性が発揮される。

大量データのオブジェクト化コスト削減

 大量のデータを扱う場合、毎回データベースからロードしてJava用のオブジェクトに組み立ててインスタンス化を行うプロセスが大きなボトルネックとなる。Oracle Coherenceでは、リレーショナル・データベースやメッセージング・サービスから取得したデータをオブジェクトとしてキャッシュするため、アプリケーション側のオブジェクト化のオーバーヘッドを防ぐことができる。

ガベージコレクションの細分化

 大量のデータをインメモリで処理する場合、大規模なガベージコレクションが生じてアプリケーションがスローダウンしてしまうこともある。Oracle Coherenceは複数のノード内のメモリを統合して仮想化するため、メモリ空間としては巨大になる。だが複数のJava VMでメモリ空間を構成するため、1つ1つのJava VMに割り当てられるメモリ容量を細分化できる。このためガベージコレクションも細分化されるので、システムに対する影響を抑えられる。

 こういったボトルネック解消効果に加えて、Oracle Coherenceを導入することで、パフォーマンスを大幅に改善できる分野がある。それは大量のデータを計算する際に威力を発揮するパラレル処理だ。

データ処理のパラレル化

 データを複数のサーバに分散配置することによって、それらのデータに対する処理も、それぞれのサーバのCPUを活用することが可能になる。これは例えば、統計データの集計処理、シミュレーション計算といった科学技術や金融のリスク計算として利用したり、より一般用途で、大量データの全件検索処理や複雑な料金プラン・データを突合わせて最適な料金計算をする処理、さらには週次・月次のバッチ処理の高速化としても効果を発揮する。

Oracle Coherenceによるシステム構成例

 Oracle Coherenceを利用したシステム構成例を紹介しよう。

キャッシュ・エンジンとしてのシンプルな利用

 最もシンプルな例は単一サーバ内でキャッシュエンジンとして利用するものだ(図2左)。アプリケーションサーバやアプリケーションロジックを搭載するハードウェアにキャッシュ・クラスタを載せて動作させる。サーバ内に複数のJava VMによるクラスタを構築することで、全体のメモリサイズを確保しつつも個々のJava VMのヒープメモリを抑えてガベージコレクションの影響を少なくできる。

複数台のマシンをまたがるキャッシュ・クラスタ

 先ほどのシンプルな構成に近いが、キャッシュサーバを追加して複数台用意し、物理的なキャッシュ・クラスタを構成することもできる(図2右)。

図2 Oracle Coherenceによるシステム構成例 1


異なるアプリケーションから利用する共通データサービス基盤

 冒頭で紹介したように、Oracle CoherenceクラスタへのデータアクセスはJavaコードによるシンプルな記述で済むようになっている。複数のシステムから1つのデータベースに直接アクセスするのと同様、複数のアプリケーションからOracle Coherenceクラスタに接続できる。.NET用のクライアントライブラリも用意しており、ライブラリを組み込んだ.NETアプリケーションを開発すれば、Javaと同様のコード記述で利用できる(図3左)。

複数データソースの統合データグリッド

 データにアクセスするアプリケーションはそのままに、データソースを追加し、複数のデータソースを横断して利用することもできる。データにアクセスするアプリケーションは、Oracle Coherenceにアクセスするコードを記述するだけで、データソースの増加や減少、リプレイスにも透過的に対応できる。実際にデータベースに記録されるのか、ファイルに保存されるのか、Webサービス経由で外部サーバに送信されるのかをアプリケーション側で考える必要はなく、すべてOracle Coherenceのデータソース連携API側で制御される(図3右)。

図3 Oracle Coherenceによるシステム構成例 2


異なる拠点間の同期化による障害・災害対策

 災害などによる大規模な障害発生時に対応するため、2拠点間でデータを同期させることも可能だ。例えば東京と大阪にOracle Coherenceクラスタを構築してWANで接続し、Oracle CoherenceプロトコルをWANで利用するための「Coherence*Extend」を用いて同期化を図る。どちらかがダウンした場合でも、稼働しているシステムによって復旧が可能になる。

金融から消費者向けネットサービスまで幅広く適用可能

 Oracle Coherenceは、インメモリに大量のデータをキャッシュすることによる応答速度の向上や、複数のデータソースを統合して透過的にアクセスできるデータグリッド基盤として、金融機関をはじめとするさまざまな企業に利用されている。こうした動きはコンシューマ向けにネットサービスを展開する企業にも現れ始めている。

 例えば小売りの米J.Crewは、年率25〜30%の成長を遂げており、従来のEコマース・サイトが処理に対応できなくなっていた。加えて取扱商品も多様化し、利用していたサーバでは、商品情報および大量アクセスのユーザーステート情報を抱え切れなくなってきていた。そこで、Oracle Coherenceによってサーバを横断するメモリ領域を作ることで、メモリ利用効率を50%改善。ハードウェア・リソースの有効活用が可能になり、より多くのユーザーアクセスに対応可能となっている。

 米国第1位の自動車サービス・サイト、保険業の最高のWebサイトとして賞を受賞したGEICO保険では、Oracle Coherenceが実装されてから、一度も中断することなく運営され、ビジネスの伸張に影響なく1秒未満のレスポンスというサービスレベルを維持し続けている。ただし、一度だけ例外が発生した。それは、新しい地域でのオンライン・サービスを開設したときだ。需要見込みを過小評価していたため、予想をはるかに超えるアクセスが集中した。しかし、レスポンスのスローダウンこそ起こったもののサービス自体は継続提供できたうえに、改善策としてのサーバ追加も、Oracle Coherenceの動的クラスタ認識機能により、サービスを中断することなく実施できたのである。

 また、オンラインオークションやゲームサイトを運営する英Betfairは、ピーク時に毎秒1000件を超えるトランザクション処理にOracle Coherenceを利用。J2EEサーバのHTTPセッションに格納していたユーザーステートをCoherenceサーバに管理させることで、1500%のキャッシング効率改善を実現している。

 従来の処理オーバーヘッドが大きかった大規模システムほど、こうした効果は得られるという。ほぼリニアなスケーラビリティを実現するOracle Coherenceは、同時にCPUやメモリといったリソースをシステム横断で利用できる。従って、今後どのように拡張していくか予測不能なWebビジネスに対するスケーラビリティと信頼性の提供はもちろん、残念ながら予測ほど成功しなかったWebサイトの余剰CPUやメモリを再活用することも有効である。こうした理由により、システム導入の初期段階から利用するのも効果的だといえるだろう。

ホワイトペーパーダウンロード
クラスタ・キャッシュおよびデータグリッド・ソリューションの投資対効果

スケーラビリティの実現にあたり、この資料では、予算の割当てにおいて、Oracle Coherenceの導入を通じて達成されるROIについて解説するとともに、現行予算サイク ル内でROIが達成可能であることを証明する。

TechTargetジャパン ホワイトペーパーダウンロードセンターで入手できます。



Oracle Coherence “ミドルウェア・データグリッド” の全貌
前編 Oracle Coherenceはミッションクリティカルの常識を変えた!
後編 Oracle Coherenceの核心、データグリッド技術に迫る

提供:日本オラクル株式会社
企画:アイティメディア 営業局
制作:@IT編集局
掲載内容有効期限:2008年4月30日
 
ホワイトペーパー ダウンロード
クラスタ・キャッシュおよびデータグリッド・ソリューションの投資対効果が、TechTargetジャパン ホワイトペーパー ダウンロードセンターで入手できます。


関連リンク
Webシステムのパフォーマンス課題に対する、オラクルの4つの解決策。
Oracle Coherence技術サイト
Oracle Coherenceの機能
Oracle Coherenceのエディション
Oracle Coherenceのダウンロード

関連ニュース
オラクル、メモリ・データグリッド新製品発売 − @IT News
急成長中のデータグリッド製品“Coherence”が日本に上陸 − @IT News



 
@ITトップ@IT Special インデックス会議室利用規約プライバシーポリシーサイトマップ