ヘッダーをスキップ
Oracle® Coherence開発者ガイド
リリース3.6.1
B61368-02
  ドキュメント・ライブラリへ移動
ライブラリ
製品リストへ移動
製品
目次へ移動
目次

前
 
次
 

1 概要

この章では、一般的なCoherenceの概念と機能の概要を説明します。製品の機能、その使用方法、および特定機能の実装方法について、簡単にまとめてあります。この章で取り上げた項目に関しては、このガイド全体をとおして詳細に説明しています。

この章は次の各項で構成されています。

基本的な概念

この項のトピックでは、Coherenceの基本概念について説明し、Coherenceを使用したデータのクラスタ化に関連するいくつかの重要な機能について説明します。

クラスタ化されたデータの管理

Coherenceの中核をなすのは、クラスタ化されたデータ管理の概念です。この概念を実現するには、次の目標を達成する必要があります。

  • 完全に一貫した、単一システム・イメージ(SSI)

  • 読取りおよび書込みアクセスのスケーラビリティ

  • 高速で透過的なフェイルオーバーおよびフェイルバック

  • 記憶域および処理の線形スケーラビリティ

  • シングル・ポイント障害(SPOF)の排除

  • クラスタ全体のロックおよびトランザクション

この基盤の上に、データベース・キャッシング、HTTPセッション管理、グリッド・エージェントの起動、分散問合せなど、Coherenceが提供する様々なサービスが構築されます。これらの機能を詳細に説明する前に、いくつかの基本的なCoherenceの側面について説明します。

論理層の単一のAPI、物理層のXML構成

Coherenceでは、クラスタ化されたデータを管理するために、多数のトポロジがサポートされています。これらの各トポロジには、パフォーマンスとフォルト・トレランスに関してトレードオフがあります。単一のAPIを使用することで、必要に応じてトポロジの選択をデプロイまで遅延できます。これにより、開発者はCoherenceの一貫した論理表示を確認しながら、チューニング時またはアプリケーションで変更が必要なときの柔軟性を確保できます。

キャッシング方針

Coherenceは複数のキャッシュ実装を提供しています。

  • ローカル・キャッシュ: 非クラスタ化キャッシング用のローカルのヒープ上のキャッシング。

  • レプリケーション・キャッシュ: 容量の少ない、頻繁に読取りが実行されるキャッシュに最適です。

  • 分散キャッシュ: 読取りおよび書込みアクセスに対して線形スケーラビリティが実現されます。データはノード間で自動的、動的、および透過的にパーティション化されます。分散アルゴリズムがネットワーク・トラフィックを最小化し、データが徐々に移動されることでサービスの停止が回避されます。

  • ニア・キャッシュ: 分散キャッシングのスケーラビリティで、ローカル・キャッシングのパフォーマンスが提供されます。パフォーマンスと同期の保証とのトレードオフに応じて、様々な方法でのニア・キャッシュが可能です。

インプロセス・キャッシングでは、オブジェクトがローカルJVM内で管理されるため、最高レベルのrawパフォーマンスを提供します。この利点は、ローカル、レプリケーション、オプティミスティックおよびニア・キャッシュの実装により最も直接的に実現されます。

アウトオブプロセス(クライアント/サーバー)キャッシングには、専用キャッシュ・サーバーを使用するオプションが用意されています。これは、ワークロードをパーティション化する(アプリケーション・サーバーの負荷を軽減するため)場合に役立ちます。これは、パーティション・キャッシュの実装を使用して、単一のコマンドライン・オプション、またはXML構成の1行のエントリでクライアント・ノードのローカル記憶域を無効化するだけで実行できます。

(ニア・キャッシュ機能を使用した)階層キャッシングにより、アプリケーション・サーバー上のローカル・キャッシュと、より大きなキャッシュ・サーバー上のパーティション・キャッシュを組み合せて、パーティション・キャッシュのスケーラビリティとローカル・キャッシュのrawパフォーマンスを融合できます。これは、専用キャッシュ・サーバーおよび同一の場所に配置されたキャッシング(アプリケーション・サーバーJVM内に保存されたキャッシュ・パーティション)の実装に役立ちます。

キャッシュの構成と使用の詳細は、第III部「キャッシュの使用方法」を参照してください。

データ記憶域の各オプション

ほとんどのユーザーは、ヒープ上の記憶域を専用キャッシュ・サーバーと組み合せて使用しますが、Coherenceにはデータ記憶域用の複数のオプションがあります。

  • ヒープ上: 最速のオプション。ただし、JVMガベージ・コレクションの実行時間に影響する場合があります。

  • NIO RAM: ガベージ・コレクションには影響しません。ただし、シリアライズ/デシリアライズが必要です。

  • NIOディスク: NIO RAMと類似していますが、メモリー・マップ・ファイルを使用します。

  • ファイルベース: 特殊なディスクに最適化された記憶域システムを使用して速度を最適化し、I/Oを最小化します。

Coherenceの記憶域は一時的なものであり、ディスクベースの記憶域オプションではキャッシュされたデータのみを管理します。Coherenceには、永続記憶域として、CacheLoaderやCacheStoreのほか、バッキング・マップが用意されています。

詳細は、第12章「記憶域およびバッキング・マップの実装」を参照してください。

シリアライズの各オプション

シリアライズは、多くの場合、クラスタ化されたデータ管理における最も費用を要する部分になるため、Coherenceではデータのシリアライズ/デシリアライズ用に次のオプションを用意しています。

  • com.tangosol.io.pof.PofSerializer: Portable Object Format(POF)は言語に依存しないバイナリ形式です。POFは領域と時間の両面で効率を向上させるように設計された、Coherenceの推奨シリアライズ・オプションです。第17章「Portable Object Formatの使用方法」を参照してください。

  • java.io.Serializable: 最も単純で処理の遅いオプション。

  • java.io.Externalizable: 開発者が手動でシリアライズを実装する必要がありますが、パフォーマンスの大幅な向上が見込めます。java.io.Serializableと比べて、シリアライズされたデータのサイズを2倍以上削減できます(分散キャッシュでは、一般的にデータがシリアライズされた形式でキャッシュされるため特に有用です)。最も重要なのは、CPU使用率が劇的に削減されるということです。

  • com.tangosol.io.ExternalizableLite: java.io.Externalizableと非常によく似ていますが、より効率的なI/Oストリームの実装を使用することで、パフォーマンスの向上とメモリー使用量の削減を図れます。

  • com.tangosol.run.xml.XmlBeanExternalizableLiteのデフォルトの実装です。

構成可能性および拡張性

CoherenceのAPIでは、Coherenceのすべての機能へのアクセスを提供します。このAPIで最も頻繁に使用されるサブセットは、単純なXMLオプションを介して公開されるため、一般的な使用例での作業が最低限に抑えられます。APIを介した直接の構成と、より簡単なXML構成を組み合せても問題はありません。

Coherenceは、必要に応じてそのモジュールを置換できるように設計されています。たとえば、ローカルのバッキング・マップ(各ノードの実際の物理データ記憶域を提供する)は、必要に応じて簡単に置換できます。これは、ほとんどの場合は不要ですが、万が一のために用意されています。一般的な目安として、作業の80%は簡単に実行できますが、残りの20%(特殊なケース)の作業は多少の労力を要します。ただし、ほとんどの場合、難無く実行できるはずです。

ネームスペースの階層

Coherenceは、サービス・セットとして編成されます。その基礎となるのはクラスタ・サービスです。クラスタは、Coherenceインスタンス(各物理マシンの1つ以上のJVMで、JVMごとに1つのインスタンスを持つ)のセットとして定義されます。クラスタは、マルチキャスト・アドレスとポートの組合せとして定義されます。TTL(ネットワーク・パケットのTime-to-Live値、つまりネットワーク・ホップ数)の設定を使用すると、クラスタを単一マシンまたは単一スイッチに接続するマシンに制限できます。

クラスタ・サービスの下には、Coherence APIを構成する各種サービスがあります。これには、様々なキャッシング・サービス(レプリケーション、分散など)および起動サービス(クラスタの様々なノードへのエージェントのデプロイ用)が含まれます。サービスの各インスタンスには名前が付けられ、各タイプには、通常、デフォルトのサービス・インスタンスがあります。

キャッシュ・サービスには、名前付きキャッシュ(com.tangosol.net.NamedCache)が含まれます。これはデータベース表と似ており、通常は関連するオブジェクトのセットが含まれます。

クラスタ・サービスとCoherenceによって提供されるその他のクラスタベースのサービスの詳細は、第5章「クラスタ・サービスの概要」を参照してください。

読取り/書込みキャッシング

この項では、キャッシュ・インスタンスの取得と操作のためにアプリケーションによって使用される主要インタフェースであるNamedCache APIの概要を示します。また、NamedCache APIの使用方法についても説明します。

NamedCache

次のソース・コードは、NamedCacheインスタンスへの参照を返します。必要に応じて、基礎となるキャッシュ・サービスが起動されます。NamedCacheインタフェースの詳細は、Oracle Coherence Java APIリファレンスを参照してください。

import com.tangosol.net.*;
...
NamedCache cache = CacheFactory.getCache("MyCache");

Coherenceでは、MyCacheの名前マッピング用のキャッシュ構成XMLファイルをスキャンします。これは、Webコンテナのweb.xmlファイルにおけるサーブレット名のマッピングと似ています。Coherenceのキャッシュ構成ファイルには、最も単純なケースでのキャッシュ名からキャッシュ・スキームへのマッピングのセットと、キャッシュ・スキームのセットが含まれます。

デフォルトで、Coherenceは、coherence.jarのルートにあるcoherence-cache-config.xmlファイルを使用します。これは、JVMコマンドライン上で-Dtangosol.coherence.cacheconfig=file.xmlを使用してオーバーライドできます。この引数では、ファイル・システム・パスまたはJavaリソース・パスを参照できます。

com.tangosol.net.NamedCacheインタフェースは、他のいくつかのインタフェースを拡張します。

  • java.util.Map: get()put()remove()などの基本的なMapメソッド。

  • com.tangosol.util.ObservableMap: キャッシュ・イベントをリスニングするメソッド (第19章「キャッシュ・イベントの使用方法」を参照)。

  • com.tangosol.net.cache.CacheMap: キャッシュ内のキーのコレクションを取得(Mapとして)するため、およびオブジェクトをキャッシュに入れるためのメソッド。エントリをキャッシュに入れるときに、有効期限の値を追加することもできます。

  • com.tangosol.util.QueryMap: キャッシュを問い合せるメソッド(『Oracle Coherence開発者ガイド』の「キャッシュの問合せ」を参照)。

  • com.tangosol.util.ConcurrentMap: lock()unlock()などの同時アクセス用のメソッド。

  • com.tangosol.util.InvocableMap: キャッシュ・データのサーバー側の処理用メソッド

キャッシュされたオブジェクトの要件

キャッシュのキーと値は、シリアライズ可能(たとえば、java.io.Serializable)である必要があります。さらに、キャッシュ・キーはhashCode()equals()メソッドの実装を提供する必要があり、これらのメソッドはクラスタ・ノード間で一貫性のある結果を返す必要があります。これは、hashCode()およびequals()の実装は、オブジェクトのシリアライズ可能な状態(つまり、オブジェクトの一時的でないフィールド)にのみ基づいている必要があることを示しています。StringIntegerDateなどのほとんどの組込みのJava型はこの要件を満たしています。一部のキャッシュの実装(特にパーティション・キャッシュ)では、等価の検証にキー・オブジェクトのシリアライズされた形式を使用します。つまり、equals()でtrueを返すキーは、同様の方法でシリアライズされる必要があります。ほとんどの組込みのJava型はこの要件を満たしています。

NamedCacheの使用パターン

NamedCacheの使用方法には、一般的には2つのアプローチがあります。

  • いくつかの追加機能(問合せ、並行性)を持つが、永続性バッキングは含まないjava.util.Mapのクラスタ化された実装(サイド・キャッシュ)。

  • 外部データソースへのアクセスの切離しの手段(インライン・キャッシュ)。この場合、アプリケーションではNamedCacheインタフェースを使用し、このNamedCacheによって、基礎となるデータベース(または他のリソース)が管理されます。

通常、インライン・キャッシュは、次のデータのキャッシュに使用されます。

  • データベース: キャッシュの最も直感的な使用方法。単純にデータベース表を(Javaオブジェクトの形式で)キャッシュします。

  • サービス: メインフレーム、Webサービス、サービス・ビューロ。(計算コストまたは実際のアクセス料金が発生するために)アクセスに多額の費用がかかるリソースを表すサービス。

  • 計算: 財務上の計算、集計、およびデータ変換。インライン・キャッシュを使用すると、計算の重複を容易に回避できます。計算がすでに完了している場合、その結果はキャッシュから容易に取得できます。任意のシリアライズ可能なオブジェクトはキャッシュ・キーとして使用できるため、計算パラメータを含むオブジェクトをキャッシュ・キーとして簡単に使用できます。

インライン・キャッシングの詳細は、第13章「リードスルー、ライトスルー、ライトビハインドおよびリフレッシュアヘッドのキャッシュ」を参照してください。

ライトバックの各オプションは次のとおりです。

  • ライトスルー: 外部データソースに常に最新の情報が含まれるようにします。データをすぐに永続化させる必要がある場合、またはデータソースを他のアプリケーションと共有する場合に使用されます。

  • ライトビハインド: 書込みを外部データソースにキャッシュすることで、高いパフォーマンスが得られます。書込みをバッファリングしてデータソースの負荷を分散させることができるだけでなく、複数の書込みを組み合せてI/Oをさらに削減できます。データがすぐにはディスクに永続化されないというトレードオフがある一方で、クラスタ全体にすぐに配信されるためサーバー障害に強いというメリットがあります。さらに、データセット全体がキャッシュされている場合、このオプションを使用すると、アプリケーションはデータソースの完全な障害を一時的に切り抜けることができます。キャッシュの読取りおよび書込みでは、データソースへの同期アクセスが必要ないからです。

読取り専用のインライン・キャッシュを実装するには、com.tangosol.net.cache.CacheLoaderインタフェースで2つのメソッドを実装するだけで済みます。1つはシングルトン読取り用、もう1つはバルク読取り用です。Coherenceでは、抽象クラスcom.tangosol.net.cache.AbstractCacheLoaderが用意されています。これは、バルク・メソッドのデフォルトの実装を提供します。つまり、単一メソッドpublic Object load(Object oKey)の実装のみが必要であることを意味します。このメソッドは、任意のキャッシュ・キーを受け入れ、適切な値オブジェクトを返します。

読取り/書込みキャッシングを実装する場合、com.tangosol.net.cache.AbstractCacheStoreを拡張する必要があります(またはインタフェースcom.tangosol.net.cache.CacheStoreを実装する)。これにより、次のメソッドが追加されます。

public void erase(Object oKey);
public void eraseAll(Collection colKeys);
public void store(Object oKey, Object oValue);
public void storeAll(Map mapEntries);

メソッドerase()は、外部データソースから指定されたキーを削除します。メソッドstore()は、データソースの指定されたアイテムが存在すればそれを更新し、存在しなければそれを挿入します。

CacheLoaderまたはCacheStoreを実装したら、coherence-cache-config.xmlファイルを介してそれに接続できます。

キャッシュの問合せ

Coherenceには、キャッシュされたデータを問い合せる機能が用意されています。パーティション・キャッシュにより、問合せを索引付けおよび並列化できます。つまり、サーバーをパーティション・キャッシュに追加すると、スループット(1秒当たりの問合せ合計)が向上するだけでなく、待機時間が減少して問合せにかかるユーザー時間が短くなります。NamedCacheに問い合せるには、すべてのオブジェクトで共通のインタフェース(またはベース・クラス)を実装する必要があります。オブジェクトの任意のフィールドを問合せできます。索引はオプションで、パフォーマンスを向上させるために使用されます。レプリケーション・キャッシュを使用する場合、問合せはローカルで実行され、索引は使用されません。詳細は、第20章「キャッシュ内のデータの問合せ」を参照してください。

索引をNamedCacheに追加するには、まず値エクストラクタが必要です(入力に値オブジェクトを受け入れ、そのオブジェクトの属性を返します)。索引はいくつでも追加できます(重複した索引は無視されます)。また、キャッシュへのデータの挿入前または挿入後に、いつでも追加できます。

問合せは、キャッシュされたデータにしか適用されないことに注意してください。そのため、データセット全体をキャッシュにロードしていない場合は、問合せを使用できません(部分的にロードされたセットを管理するサポートが追加されている場合を除く)。

開発者は問合せ用の追加のカスタム・フィルタを実装して、問合せの並列化を活用できます。特にパフォーマンスを重視する問合せでは、索引に対応したフィルタを実装できます。これにより、Coherenceの内部的な索引構造にアクセスできます。

Coherenceには組込みのオプティマイザがあり、最適な順序で索引を適用します。問合せの対象は限定されるため、オプティマイザは効果的かつ効率的な機能です。オプティマイザを保守する必要はありません。

トランザクション

Coherenceには様々なトランザクション・オプションが用意されています。たとえば、ConcurrentMapインタフェースおよびEntryProcessor APIを使用した基本データの同時実行性、トランザクション・フレームワークAPIを使用したアトミック・トランザクション、Coherenceリソース・アダプタを使用したXAの完全サポートなどです。詳細は、第25章「トランザクションの実行」を参照してください。

HTTPセッション管理

Coherence*Webは、広範なアプリケーション・サーバーをサポートする、HTTPセッション管理モジュールです。Coherence*Webの詳細は、『Oracle Coherence Oracle Coherence*Webユーザーズ・ガイド』を参照してください。

Coherenceセッション管理を使用する場合、アプリケーションを変更する必要はありません。Coherence*Webでは、NearCacheテクノロジを使用して、ほぼ無限のスケーラビリティを持つ完全にフォルト・トレラントなキャッシングを提供します(数百個のクラスタ・ノードで問題なく機能します)。

起動サービス

Coherenceの起動サービスでは、計算エージェントをクラスタ内の様々なノードにデプロイできます。これらのエージェントは、実行スタイル(デプロイして非同期にリスニングする)または問合せスタイル(デプロイして同期的にリスニングする)で実行可能です。起動サービスの使用方法の詳細は、第22章「キャッシュ内のデータの処理」を参照してください。

起動サービスは、com.tangosol.net.InvocationServiceインタフェースを通じてアクセスされ、次の2つのメソッドを含みます。

例1-1 InvocationService APIのメソッド

public void execute(Invocable task, Set setMembers, InvocationObserver observer);
public Map query(Invocable task, Set setMembers);

サービスのインスタンスは、com.tangosol.net.CacheFactoryクラスから取得できます。

Coherenceでは、タスク指向処理のWorkManager APIを実装します。

イベント

CoherenceのNamedCacheインスタンスはすべて、com.tangosol.util.ObservableMapインタフェースを実装します。これにより、(com.tangosol.util.MapListenerの)キャッシュ・リスナーの実装を追加するためのオプションを使用できるようになります。アプリケーションは、どの物理マシンがイベントを発生させたのかに関係なく、イベントを論理概念として監視できます。カスタマイズ可能なサーバー側のフィルタおよび軽量イベントを使用すると、ネットワーク・トラフィックおよび処理を最低限に抑えることができます。キャッシュ・リスナーはJavaBeanパラダイムに従っており、システム・キャッシュ・イベント(エビクションなど)やアプリケーション・キャッシュ・イベント(get/put処理など)を区別できます。

連続問合せ機能を使用すると、クライアント側のマテリアライズド・ビューを保守できます。同様に、クラスタ・サービス、キャッシュ・サービスや起動サービスなどの任意のサービスで、参加または離脱するメンバーを監視できます。

イベントの使用方法の詳細は、第19章「キャッシュ・イベントの使用方法」を参照してください。

オブジェクト・リレーショナル・マッピングの統合

ほとんどのORM製品では、CoherenceがL2キャッシング・プラグインとしてサポートされています。これらのソリューションは、Coherence内のエンティティ・データをキャッシュすることで、複数サーバー上のアプリケーションによるキャッシュされたデータの共有を可能にします。詳細は、『Oracle Coherence統合ガイド』を参照してください。

C++/.NETの統合

Coherenceでは、クロス・プラットフォームのクライアントがサポートされます(TCP/IP上)。すべてのクライアントが、同じワイヤ・プロトコルを使用します(サーバーでは、クライアントのプラットフォームの違いが認識されません)。また、これらのいずれのクライアントにもサード・パーティ・コンポーネント(埋込みJVMや言語ブリッジなど)はありません。ワイヤ・プロトコルでは、すべてのクライアント・プラットフォームでイベント・フィードおよび一貫したインプロセス・キャッシングがサポートされます。Coherence*Extendを使用してリモートのC++クライアントおよび.NETクライアントをサポートするための手順の詳細は、『Oracle Coherenceクライアント・ガイド』を参照してください。

管理および監視

Coherenceでは、Java Management Extensions(JMX)を使用して管理機能と監視機能を提供します。 統計とコマンドの一覧は、com.tangosol.net.management.RegistryのAPIドキュメントに記載されています。詳細は、第VI部「Coherenceの管理」を参照してください。