19 TopLink GridでのOracle Coherenceを使用したJPAアプリケーションのスケーリング
この章の内容は次のとおりです。
ユース・ケース
JPAアプリケーションを、要求に対応するよう、また高可用性を実現するためにスケール・アウトする必要があります。
解決方法
TopLinkとCoherenceを統合したTopLink Gridを使用してこの実装を実現します。
コンポーネント
-
TopLink 12c (12.1.2.0.0)以上。
注意:
TopLinkのコア機能は、オープン・ソースのEclipse Foundationの永続性フレームワークであるEclipseLinkによって提供されています。EclipseLinkでは、Java Persistence API (JPA)、Java Architecture for XML Binding (JAXB)、および標準に基づいたその他の永続性テクノロジと、それらの標準の拡張が実装されます。TopLinkには、EclipseLinkのすべてに加え、Oracleの追加機能が含まれています。
-
TopLink Grid
-
Coherence
サンプル
サンプル・アプリケーションへのリンクは、「その他の参考資料」を参照してください。
ソリューションの概要
Oracle TopLink Gridは、EclipseLink JPAとCoherenceとの統合を可能にするOracle TopLinkの機能です。標準のJPAアプリケーションは、プライマリ・データ・ストア(一般的にリレーショナル・データベース)と直接対話します。ただし、TopLink Gridの場合、ドメイン・モデルの一部またはすべてをCoherenceデータ・グリッドに格納できます。この構成は、グリッド基盤のJPAとも呼ばれています。
TopLink Gridを構成して、Coherenceのプライマリ・データ・ストアとしての使用、グリッドに対する問合せの実行、およびCoherenceによる新規データと変更データにおける永続性の管理ができます。Coherenceでは、JPAとデータ・ストア間のレイヤーが提供されており、すべてのアプリケーション・インスタンスからデータベース・コールを直接オフロードできます。これにより、クラスタ化されたアプリケーションのデプロイメントでは、通常のデータベース操作の限界を超えるスケーラビリティが得られます
アプリケーションで使用できる一般的なTopLink Gridの構成は次のとおりです。
-
グリッド・キャッシュ構成。CoherenceをTopLink L2(共有)キャッシュとして使用します。この構成では、Coherenceのキャッシュにすべて事前ロードできずデータベースでホストされるデータに依存するJPAアプリケーションにCoherenceのデータ・グリッドを適用します。事前ロードができない理由には、Coherenceのフィルタの機能セットを超える非常に複雑な問合せ、古いキャッシュの原因となるサード・パーティ製データベースによる更新、ネイティブSQL問合せ、ストアド・プロシージャやトリガーへの依存などがあります。
この構成では、ローカルL2キャッシュを調整することなく、TopLinkを大規模なクラスタにスケール・アップできます。エンティティに対する更新は、トランザクションがコミットされると即時にすべてのCoherenceクラスタ・メンバーで使用可能になります。
-
グリッド・エンティティ構成。この構成は、(比較的安定した)大容量データへ高速にアクセスする必要があり、更新が比較的少ないアプリケーションに最適です。ライトビハインドを使用してこの構成をCoherenceキャッシュ・ストアと組み合せると、データベース更新を非同期に実行することにより、アプリケーションのレスポンス時間を向上させることができます。
-
グリッド読取り構成。この構成は、(比較的安定した)大容量データへ高速にアクセスして変更をデータベースへ同期的に書き込む必要のあるエンティティに最適です。これらのエンティティでは、Coherenceキャッシュへの移入にキャッシュ・ウォーミングが使用されますが、各問合せは必要に応じてデータベースに送信することもできます。
その他の参考資料
この章のソリューションが実装されているその他のテクノロジおよびツールの詳細は、次の参考資料を参照してください。
-
コード例は、次からダウンロードできます。
https://www.oracle.com/technetwork/middleware/ias/examples-index-092244.html -
Oracle® Fusion Middleware Oracle TopLink Java APIリファレンスの
oracle.eclipselink.coherence.*API