【前編】標準Java APIの延長線上で「大規模セッション管理」、「複数データ・ソース連携」、「キー/バリュー・ストア」に使う

今日、多くのJavaアプリケーション開発者にとって、「オブジェクトの再利用」は当たり前の開発作法の1つであろう。ただし、Javaでは限定されたヒープ・メモリを利用するという制約上、オブジェクトの生成数や破棄の仕方にはある程度の工夫が必要となる。それを簡素化し、Java開発者を楽にしてくれるのが、オラクルが提供するインメモリのデータ・グリッド基盤「Oracle Coherence」だ。大量のデータをインメモリで並列処理することにより、ケタ違いのスピードと高い信頼性を発揮するCoherenceは、Javaアプリケーションにおけるオブジェクト共有を劇的に簡素化しつつ、大量データの高速処理を可能にする。本企画では2回にわたり、Oracle CoherenceがJava開発のどういった場面で、どのようなメリットをもたらすのかを紹介していく(編集部)。

大規模な統合キャッシュでWebアプリ開発を劇的に簡易化するOracle Coherence

 一度生成したオブジェクトをHashMapなどに格納して再利用するといったことは、Java開発者なら日ごろの開発作業の中で当たり前のように実践している作法の1つだろう。オブジェクトをキャッシュすること、何度も利用/参照するオブジェクトに値を設定するコストを節約するわけだが、残念ながらこうしてキャッシュしたオブジェクトは個々のアプリケーションでしか利用することができない。もし、このキャッシュを複数のアプリケーションで簡単に共有することができたら、実現できるサービスの幅が格段に広がるはずだ。

 また、JSPやサーブレット、Strutsなどで開発したWebアプリケーションでは、HttpSessionオブジェクトにさまざまなセッション情報を格納する。ただし、大量のセッション情報を入れると処理が重たくなってしまうため、セッションに格納する情報はある程度吟味しているのが実情である。そんなことは気にせず、個々のセッションに紐付く情報をどんどん格納することができたら、開発はグッと楽になり、実現できるサービスの幅も広がるだろう。

 日ごろWebアプリケーションの開発に携わるJava開発者なら、一度は上記のような悩みを抱いたことがあるはずだ。実はそんな悩みを簡単に解決してくれるソリューションがすでに存在することをご存じだろうか? それが複数のサーバを独自のピア・ツー・ピア技術によって連携させ、インメモリでのデータ管理やキャッシュを実現する「Oracle Coherence」である。

 Oracle Coherenceを使えば、物理マシンの境界を超えて巨大なキャッシュ領域を簡単に実現し、それを複数のアプリケーションで共有することができる。しかも、そのキャッシュ領域はOracle Coherenceの存在をほとんど意識することなく使うことが可能だ。これにより、従来どおりのWebプログラミングを行いながら、アプリケーションの処理性能や可用性を飛躍的に高めることができる。さらに、Oracle Coherenceはキャッシュしたデータのミラーリングやノード障害の検知と復旧、データのバックアップまで自動で行ってくれる。

大規模な統合キャッシュでWebアプリ開発を劇的に簡易化するOracle Coherence

 加えて、Oracle Coherenceのキーとなる機能として、イベント通知とパラレル処理の2つが挙げられる。

 イベント通知は、データの追加や更新、削除が行われた際、ほかのアプリケーションに通知することができる機能で、これを利用することにより、データが追加されたときに別のアプリケーションがそれを受け取って処理を継続するといった仕組みを構築することができる。この機能は、複数のユーザーが同時に利用する掲示板やチャットのようなコミュニケーション型のアプリケーションや、分割処理が必要となるサブシステム間連携で利用すると効果が高い。

 一方、パラレル処理は各ノードのCPUリソースを利用し、データを分散処理できるという機能で、特に大量のデータを高速に処理するような場面で威力を発揮する。アプリケーション側で複数のサーバのCPUリソースを使って分散処理を行う場合、それぞれのサーバにデータをどう処理させるかを緻密に設計する必要があるが、Oracle Coherenceを使えば分散処理の制御を自動的に行ってくれるのである。

大規模な統合キャッシュでWebアプリ開発を劇的に簡易化するOracle Coherence

 また、バックエンドのデータベースと連携する機能も備わっており、データベースとのやり取りをアプリケーション側で行うのではなく、Oracle Coherenceに完全に任せてしまうような構成も可能だ。データベースとの連携では同期/非同期を選べるので、例えばデータベースに書き込む必要があるケースでは、ある程度のデータをメモリ上に蓄えておき、一定のタイミングで一気にデータベースに書き出すといった処理を簡単に実現できる。この使い方は、大量のリクエストが発生するようなシステムで、それを1件1件データベースに書き込んでいると過大なオーバーヘッドが生じてしまうといった問題を解消するのに有効だろう。

wls_column_110912_03.png

Oracle Coherenceを意識せずにメリットが得られる3つの使い方

 それでは以降、Oracle Coherenceの具体的な使い方を見ていこう。今回は、Javaアプリケーションの側で特別なコーディングをほとんど行うことなく、Oracle Coherenceを導入すればすぐにそのメリットを享受できる使い方を3つ紹介する。

(1)統合セッション管理層として使う

 1つ目は、Oracle WebLogic Serverなどのアプリケーション・サーバ上で動作するアプリケーションにおいて、HTTP通信の統合セッション管理にOracle Coherenceを使うというものだ。

 Oracle Coherenceには「Coherence*Web」という組み込みモジュールが用意されており、セッション管理のためにインタフェースHttpSessionのsetAttributeやgetAttributeといったメソッドを呼び出すと、それを自動的にOracle CoherenceのAPI呼び出しに変換してくれる。これにより、開発者はOracle Coherenceの存在を意識することなく、Coherenceの膨大なキャッシュ空間を利用してセッション管理を高速化できる。しかも、Oracle Coherence上にキャッシュしたセッション情報は、商用/非商用を問わずさまざまなアプリケーション・サーバで共有することが可能だ。

Oracle Coherenceを意識せずにメリットが得られる3つの使い方

 一般に、信頼性の高いセッション管理を実現したい場合にはRDBにセッション情報を格納するケースが多いが、その場合は独自の作り込みが必要になるうえ、大量のトランザクションが発生した際にRDBへのセッション情報の書き込み/読み込みがボトルネットとなってパフォーマンスが劣化するケースが少なくない。しかし、Oracle Coherenceではメモリ上に展開したセッション情報にアクセスするため、大量のトランザクションが発生した際にも高速に処理することができる。実際、全日本空輸のチケット予約サイト「ANA SKY WEB」ではOracle Coherenceによるセッション管理基盤が導入されており、航空チケットの割引販売時に大量の購入申し込みが殺到しても、大量のセッションによってシステムのメモリ領域が圧迫されることなく、安定して処理を行える。なお、ANA SKY WEBでは空席情報の保持領域としてもOracle Coherenceを活用することで、システムの応答性能を10倍に高めている。

wls_column_110912_05b.png

 複数のアプリケーション・サーバ間でセッション情報を共有できるという特性を生かした使い方をしている企業もある。米国の大手衣料品会社では、同社が運営する複数のアパレル・ブランドの販売サイトにおいて、Oracle Coherenceを用いてショッピング・カートを統合した。複数ブランドをまたがって商品を購入できるショッピング・カートを実現したことで、顧客にとっての利便性を高めるだけでなく、ブランドを横断したキャンペーン(複数サイトの合計購入金額に応じて送料を割り引くなど)を実施することが可能になったという。

(2)バックエンドのデータ処理に使う

 2つ目の使い方は、Oracle Coherenceによってバックエンドのデータ処理の負荷を軽減するというものだ。

 Oracle Coherenceには、Java Persistence API(JPA)のリファレンス・インプリメンテーションであるEclipseLinkとCoherenceの統合を実現するモジュールとして「TopLink Grid」が用意されている。TopLink Gridは、JPAを用いたエンティティの読み書きを透過的にOracle Coherenceのキャッシュの読み書きに変換するほか、JPQL(Java Persistence Query Language)で書かれたクエリを透過的にOracle Coherenceのキャッシュへのフィルタに変換する機能を備える。こうしたTopLink Gridの機能により、JPAを介したデータ処理にキャッシュを利用できるようになるわけだ。

Oracle Coherenceを意識せずにメリットが得られる3つの使い方

 この使い方のメリットとしては、例えば複数のアプリケーション・サーバから1つのデータにアクセスするケースにおいて、データベースにかかる負荷を軽減できることが挙げられる。具体的には、JPAを使ってデータを読み込む際、別のアプリケーション・サーバがすでに同じデータにアクセスしており、そのデータがOracle Coherenceのキャッシュに蓄積されている場合は、そのデータを読み取ることによってデータベースへのアクセスを回避するのである。

 なお、JPAを介したキャッシュ・アクセスの方法には、「Grid Cache」、「Grid Read」、「Grid Entry」の3パターンがある。このうち、Grid CacheではOracle Coherenceを2次キャッシュとして利用する。また、Grid Readでは、データの読み込み(クエリ発行)をOracle Coherenceに対して行い、データの書き込みはデータベースに対して行う(書き込んだデータは自動的にCoherenceにキャッシュされる)。そしてGrid Entryでは、読み込み/書き込みのいずれもOracle Coherenceに対して行う(その結果、データベースとアプリケーションがCoherenceによって完全に疎結合となる)。これらのどのパターンを使うかは、アプリケーションからデータベースを参照するタイミングなどに応じて決定する。

wls_column_110912_07.png

(3)キー/バリュー型のデータ入出力で使う

 3つ目の使い方は、キー/バリュー型のデータ操作だ。Oracle Coherenceでは、JavaのMap APIのメソッドを使ってデータを操作することができる。これにより、例えばユーザーIDをキーにしてMap APIでユーザーに紐付くデータを取得するといった使い方においてOracle Coherenceのキャッシュを利用することが可能となる。

 この方法には、背後にあるデータベースを隠蔽するような使い方ができるというメリットがある。例えば、追加開発を繰り返してきたようなシステムでは、あるユーザーに紐付くデータがさまざまなデータベースに分散してしまっているケースが多い。このため、単にあるユーザーに関連する情報を取得するだけでも各データベースに問い合わせる必要が生じるが、Oracle Coherenceを使えば、ユーザーIDをキーにしてMap API経由で問い合わせるだけで済むような仕組みを簡単に構築できるのだ。

 この使い方を大規模なユーザー管理に適用したのが、米国ウェルズファーゴ銀行である。同行では、80万人以上の個人顧客に関する情報が複数のデータ・ソースに散逸した状態にあった。それらのデータ・ソースを論理的に統合し、顧客へのサービス・レベルを向上させるべく、さまざまな方法を試した結果、性能や使い勝手の面で優れたOracle Coherenceによるインメモリでの仮想データ統合を採用した。Oracle Coherenceを採用したことで、キー/バリュー型による簡易なデータ・アクセスによって複数データ・ソースの操作が可能となり、高いシステム性能を実現するとともに、新規のアプリケーション追加が容易に行えるようになったという。

 以上、今回はJavaの標準APIの範囲で開発しながら、Oracle Coherenceの存在をほとんど意識することなく、そのメリットを享受できる3つの使い方を紹介した。これらの使い方だけでもJavaアプリケーション開発者に多くの恩恵をもたらすことがおわかりいただけたと思うが、Oracle Coherenceに固有のAPIを使えば、さらに高度な活用が可能になる。後編では、そうした使い方を3つ紹介しよう。

後編に続く

この記事は参考になりましたか?

コメントがありましたらお送りください。

送信
Javaアプリ開発者に知ってほしい、インメモリ・グリッド「Oracle Coherence」の6つの便利な使い方
お問い合わせ Oracle Direct

Oracle Direct

0120-155-096 月~金 9:00~12:00/13:00~18:00(祝日及び年末年始休業日を除きます)

お問い合わせフォーム

お問い合わせフォーム

こんな時にはOracle Directへ 製品・導入に関するご相談 導入前の技術的なご質問 ハードウエア構成のお見積り 移行支援サービス パフォーマンス診断サービス バージョンアップ無償支援

詳細はこちら

製品の購入・導入に関するご相談はこちら

Oracle Direct

0120-155-096

お問い合わせフォーム

こんな時にはOracle Directへ

製品・導入に関するご相談 導入前の技術的なご質問 ハードウエア構成のお見積り 移行支援サービス パフォーマンス診断サービス バージョンアップ無償支援

詳細はこちら