Oracle Coherenceインメモリー・データ・グリッドは、複数のサーバー間で共有され、短いレスポンス・タイム、高度なスループット、予測可能なスケーラビリティ、継続的な可用性、および情報の信頼性が求められるアプリケーション・オブジェクトに対するデータ管理システムです。わかりやすいように、次の用語および要求について説明します。
これらの機能を実装するOracle Coherenceは、計算負荷の高い、ステートフルな中間層アプリケーションにおいて最適なシステムです。Coherenceは、アプリケーション層での実行を対象としていますが、Application Serverクラスタなどでは、多くの場合、アプリケーション自体でインプロセスで実行されます。
これらの4つの機能の結果を組み合せると、データ・グリッド内の情報が、トランザクション・アプリケーションで使用可能な信頼性の高いものになります。
データ・グリッドは複数のサーバーで構成されるシステムで、分散環境において情報とそれに関連付けられた操作(計算など)の管理を連携します。
インメモリー・データ・グリッドは、情報をメモリー内に保存して高度なパフォーマンスを達成します。また、サーバーに障害が発生した場合にシステムの回復力とデータの可用性を確保するために、複数のサーバー間でその情報のコピーを同期化することで冗長性を実現します。
アプリケーション・オブジェクトは、複数のサーバー間で共有される情報を含む、実際のアプリケーションのコンポーネントです。アプリケーションの可用性を維持するには、これらのオブジェクトで潜在的なサーバー障害を切り抜ける必要があります。これらのオブジェクトは、一般的にJava(POJOなど)、C++、C#、VB.NETなどのオブジェクト指向言語で作成されます。リレーショナル・スキーマとは異なり、多くの場合、アプリケーション・オブジェクトは階層的で、任意のデータベースから取得した情報を含む場合があります。
アプリケーション・オブジェクトは、複数のサーバー間で共有する必要があります。これは、サーバーを追加することにより(それぞれのサーバーではアプリケーションのインスタンスが実行される)、(eBayやAmazon.comなどの)ミドルウェア・アプリケーションがスケールアウトされるためです。1つのサーバーで実行されているアプリケーション・インスタンスは、別のサーバーのアプリケーション・インスタンスと同じ情報を読取りおよび書込みする可能性があるため、情報は共有する必要があります。また、常にデータベースなどの共有リソースからその情報にアクセスするという方法もありますが、これはリモートでのアクセスの調整とオブジェクト・リレーショナル・マッピング(ORM)が必要になるためパフォーマンスが低下します。また、その共有リソースがボトルネックになるため、スケーラビリティも低下します。
アプリケーション・オブジェクトはリレーショナルではないので、それをリレーショナル・データベースから取得するには、リレーショナルの問合せからオブジェクトに情報をマップする必要があります。これを、オブジェクト・リレーショナル・マッピング(ORM)と呼びます。ORMには、Java EJB 3.0、JPA、ADO.NETなどがあります。同じORMテクノロジを使用して、オブジェクト(またはオブジェクトへの変更)をSQLの一連の挿入文、更新文、削除文に分解することで、オブジェクトをリレーショナル・データベースに保存できます。1つのオブジェクトは多数の表からの情報で構成されることがあるため、オブジェクト・リレーショナル・マッピングを使用してデータベースからオブジェクトにアクセスするコストは、データベースへの負荷およびデータ・アクセスの待機時間の観点からすると、かなり大きくなる場合があります。
インメモリー・データ・グリッドでは、情報をメモリー内にアプリケーション・オブジェクト形式で保持して、その情報を複数のサーバー間で共有することで、データ・アクセスにおける短いレスポンス・タイムを実現します。つまり、アプリケーションは、ネットワーク通信やORMなどのデータ変換手順を使用せずに、必要な情報にアクセスできます。ネットワーク通信が必要な場合、Oracle Coherenceはグリッド間で情報をパーティション化(分散)することで、シングル・ポイント・ボトルネック(SPOB)の発生を回避します。各サーバーは、全情報セットのそれぞれの担当分を管理します。
情報アクセスと情報変更の高度なスループットは、インメモリー・データ・グリッドの4つの異なる側面を介して実現できます。
Oracle Coherenceでは、各サーバーでワイヤ・スピード・スループットを達成できる高度なクラスタ・プロトコルを採用しています。これにより、サーバーの数に比例して情報のフロー全体を増加させることができます。
情報をパーティション化することにより、サーバーが追加されるたびに各サーバーは全情報を均等に分散した担当分を処理します。つまり、ロード・バランシングされるたびに、データ管理の担当範囲が狭くなります。
ワイヤ・スピード・スループットとパーティション化の機能を組み合せると、データ・グリッド内の情報の場所が自動的に認識されるため、Oracle Coherenceでは、すべての読取りおよび書込みリクエストが、対象の情報を管理するサーバーに直接ルーティングされます。そのため、読取り操作と書込み操作において線形スケーラビリティが実現されます。つまり、情報アクセスおよび情報変更における高度なスループットが達成されます。
問合せ、トランザクション、計算において、特に大量のデータを操作する場合、Oracle Coherenceではターゲット・データを管理するサーバーにこれらの操作をルーティングして、それらを並列処理します。
動的なパーティション化を使用してボトルネックを排除し、データ・グリッドのサーバー数に関係なく設定された短い待機時間を実現することで、Oracle Coherenceはアプリケーションの予想可能なスケーラビリティを提供します。あるアプリケーションでは、Coherenceを使用して線形スケーラビリティを実現できますが、これはアプリケーションの性質に依存する部分が多く、実体はアプリケーションごとに異なります。さらに重要な点として、ユーザーがそれらのアプリケーションの性質を検証して、システムで指定した同時ユーザー数をサポートしたり、一定の時間内(分単位)で複雑な財務計算を実行する際に、特定のスケーラビリティ・レベルを達成するために必要なサーバー数を予測できる能力を有している必要があります。Coherenceによる実現方法の1つは、データ・グリッドのすべてのサーバーを使用して、問合せ、トランザクション、計算などの大規模な操作を並行処理することです。
Coherenceでボトルネックを排除する方法として、メモリー内で発生したトランザクションをキューで管理して、その結果をOracleデータベースなどの記録システムに非同期的に書き込めます。これは、多数の小さなトランザクションを処理するために変更率が非常に高いシステム、特に結果のみを永続化するシステムで有用です。Coherenceでは、複数の変更を単一のアプリケーション・オブジェクトに結合して、複数の変更されたアプリケーション・オブジェクトを単一のデータベース・トランザクションにバッチで送信します。つまり、100個の異なるアプリケーション・オブジェクトのそれぞれに対して100個の異なる変更があっても、データベースの単一の大きな(つまり、非常に効率的な)トランザクションに保存できます。書込み保留中のアプリケーション・オブジェクトは、可用性を維持しながら管理することによって、消失から保護されます。
次の4つの機能を組み合せることで、継続的な可用性を実現します。
Oracle Coherenceで使用されるクラスタ・プロトコルは、サーバー障害を即時に検出して、検出された障害の情報が残りのすべてのサーバー間で共有されるようにします。
複数のサーバー間で情報を同期的にレプリケートして、シングル・ポイント障害(SPOF)が存在しないようにします。
各サーバーがそれぞれの情報の同期レプリカの保存場所を特定し、情報アクセスおよび情報変更の各操作を自動的にそのレプリカに再ルーティングします。
各操作がただ一度かぎり実行されるようにして、サーバーの障害時に実行していた操作によって、フェイルオーバー時の情報が破損されないようにします。
フェイルオーバーとは、アクティブであったサーバー、システム、またはネットワークに障害が発生したり、それらが異常終了したときに、冗長(スタンバイ)のコンピュータ・サーバー、システム、またはネットワークに自動的に切り替えるプロセスのことです。フェイルオーバーは、ユーザーの介在なしで、また一般的には警告なしで実行されます(ウィキペディアの定義を参照。http://en.wikipedia.org/wiki/Failover
)。
次の4つの機能を組み合せることで、情報の信頼性を実現します。
Oracle Coherenceでは、クラスタ・コンセンサスを使用して、データ・グリッド内での情報の所有権の明瞭化を実現します。常に、必ず1つのサーバーがデータ・グリッド内の各情報のマスター・コピーの管理を担当します。
そのマスター・コピーは特定のサーバーが所有するため、そのサーバーはその情報に対する操作を命令し、その操作の結果を別のサーバーと同期化します。
情報の可用性は維持できるため、サーバー障害の発生時やその後でも、これらのサービス品質は確保されます。
ただ一度かぎりの操作が保証されているため、サーバーの障害時に操作が失われたり、誤って繰り返されたりすることはありません。