26 Coherence Java gRPCクライアントの使用
Coherence Java gRPCクライアントは、JavaアプリケーションがCoherence gRPCプロキシ・サーバーに接続できるようにするライブラリです。
この章の内容は次のとおりです。
- Coherence gRPCクライアントの設定
Coherence gRPC Javaクライアントを設定して使用を開始するには、プロジェクトの依存関係として宣言する必要があります。gRPCクライアントは、coherence-java-client
モジュールで提供されます。 - Coherence gRPCクライアントの構成
Coherence*Extendと同様に、Coherence gRPCクライアントは、アプリケーション・キャッシュ構成ファイルでリモート・スキームを構成することで、リモート・クラスタ化リソースにアクセスします。 - Coherenceリソースへのアクセス
gRPCクライアントがキャッシュ構成ファイルのリモート・スキームとして構成されているため、クラスタ・メンバーまたはExtendクライアントで使用されるのと同じCoherence APIを使用してCoherenceリソースにアクセスできます。
親トピック: gRPCの開始
Coherence gRPCクライアントの設定
Coherence gRPC Javaクライアントを設定して使用を開始するには、プロジェクトの依存関係として宣言する必要があります。gRPCクライアントは、coherence-java-client
モジュールで提供されます。
例:
Mavenを使用している場合は、次のようにサーバーを宣言します:
pom.xml
<dependencyManagement>
<dependencies>
<dependency>
<groupId>${coherence.group.id}</groupId>
<artifactId>coherence-bom</artifactId>
<version>${coherence.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependencies>
<dependency>
<groupId>${coherence.groupId}</groupId>
<artifactId>coherence</artifactId>
</dependency>
<dependency>
<groupId>${coherence.groupId}</groupId>
<artifactId>coherence-java-client</artifactId>
</dependency>
<dependencies>
pom.xml
ファイルでは、coherence.version
プロパティは使用されるCoherenceのバージョンで、coherence.groupId
プロパティはCoherence商用グループIDであるcom.oracle.coherence
またはCEグループIDであるcom.oracle.coherence.CE
のいずれかです。
Gradleを使用している場合は、次のようにサーバーを宣言します:
build.gradle
dependencies {
implementation platform("${coherenceGroupId}:coherence-bom:${coherenceVersion}")
implementation "${coherenceGroupId}:coherence"
implementation "${coherenceGroupId}:coherence-java-client"
}
build.gradle
ファイルでは、coherenceVersion
プロパティは使用されるCoherenceのバージョンで、coherenceGroupId
プロパティはCoherence商用グループIDである com.oracle.coherence
またはCEグループIDであるcom.oracle.coherence.CE
のいずれかです。
親トピック: Coherence Java gRPCクライアントの使用
Coherence gRPCクライアントの構成
Coherence*Extendと同様に、Coherence gRPCクライアントは、アプリケーション・キャッシュ構成ファイルでリモート・スキームを構成することで、リモート・クラスタ化リソースにアクセスします。
この項には次のトピックが含まれます:
親トピック: Coherence Java gRPCクライアントの使用
gRPCクライアントの構成の概要
次の2つの方法を使用して、gRPCクライアントを構成できます:
- NameService - gRPCクライアントがCoherence NameServiceを使用してクラスタ内のgRPCエンドポイントを検出する最も単純な構成。この構成では、CoherenceはgRPCプロキシがリスニングしているクラスタ内のすべてのエンドポイントを検出し、gRPC Javaライブラリの標準クライアント側ロード・バランサを使用して、クライアントからプロキシ・エンドポイントへの接続のロード・バランシングが行われます。
- 固定エンドポイント - この構成では、カスタムの
AddressProvider
構成を介してgRPCエンドポイントの固定セットを提供するか、ソフトウェア・コードにエンドポイントを含めることができます。複数のエンドポイントが指定されている場合、gRPC Javaライブラリの標準クライアント側ロード・バランサを使用して、クライアントからプロキシ・エンドポイントへの接続のロード・バランシングが行われます。
これらのアプローチは、一部のデプロイメント環境でのみ機能します。たとえば、NameService構成は、クライアントとクラスタの両方が同じコンテナ化された環境内にある場合に機能します。Kubernetesなどのコンテナ化された環境では、通常、NameService構成は、Coherenceクラスタ・ポッドへの接続をロード・バランシングする単一のイングレス・ポイントで構成されます。このイングレス・ポイントのアドレスは、リモートgRPCキャッシュ構成で単一の固定アドレスとして使用されます。ただし、NameService構成は、クラスタがKubernetesなどのコンテナ化された環境内にあり、クライアントがコンテナ化された環境の外部にあるコンテナ化された環境では機能しません。
親トピック: Coherence gRPCクライアントの構成
リモートgRPCキャッシュの定義
リモート・キャッシュとは、キャッシュ操作をCoherenceクラスタ上のキャッシュにルーティングする、専用のキャッシュ・サービスです。リモート・キャッシュとクラスタ上のキャッシュは、同じキャッシュ名である必要があります。Coherence gRPCクライアントは、キャッシュのインスタンスを取得するために、通常どおりNamedMap
またはNamedCache
インタフェースを使用します。実行時には、キャッシュ操作はローカルで実行されませんが、クラスタ上のgRPCプロキシ・サービスにgRPCを使用して送信されます。キャッシュ操作をクラスタ上のキャッシュに委任する処理は、クライアントに対して透過的に行われます。
リモート・キャッシュは、<caching-schemes>
ノード内で、<remote-grpc-cache-scheme>
要素を使用して定義されます。
最小限のNameService構成(最も単純な構成)の場合、gRPCクライアントはNameServiceを使用してgRPCプロキシ・エンドポイントを特定しますが、構成ファイルの<remote-grpc-cache-scheme>
にアドレスまたはポート情報を追加しません。この構成ではCoherenceのデフォルトのクラスタ検出メカニズムを使用してCoherenceクラスタのNameServiceを特定し、gRPCエンドポイントを検索するため、接続先のクラスタと同じクラスタ名とウェル・ノウン・アドレス・リスト(またはマルチキャスト構成)を使用してクライアントを構成する必要があります。
次の例は、<remote-grpc-cache-scheme>
が<scheme-name>
および<service-name>
要素で構成されている最小限必要な構成を示しています:
coherence-cache-config.xml
<caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>remote-grpc</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
</remote-grpc-cache-scheme>
</caching-schemes>
クライアントが接続先のクラスタと異なるクラスタ名で構成される(つまり、クライアントが別のCoherenceクラスタにある)クラスタ名が異なる最小のNameService構成の場合、クラスタ名を指定して<remote-grpc-cache-scheme>
を構成できます。
次の例は、<cluster-name>test-cluster</cluster-name>
を指定して構成された<remote-grpc-cache-scheme>
を示しています。CoherenceはNameServiceを使用して、test-cluster
という名前のCoherenceクラスタ内のgRPCエンドポイントを検出します:
coherence-cache-config.xml
<caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>remote-grpc</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
<cluster-name>test-cluster</cluster-name>
</remote-grpc-cache-scheme>
</caching-schemes>
親トピック: Coherence gRPCクライアントの構成
NameServiceエンドポイントの構成
クライアントが標準のCoherenceクラスタ検出メカニズムを使用してターゲット・クラスタを検索できない場合は、<remote-grpc-cache-scheme>
構成の<grpc-channel>
ノードでNameServiceエンドポイントを指定できます。
次の例は、198.168.1.5:7574
上のCoherence NameServiceに接続するRemoteGrpcCache
という名前のリモート・キャッシュ・スキームを作成し、そのリクエストをgRPCプロキシ・サービスのアドレスにリダイレクトする方法を示しています:
coherence-cache-config.xml
<caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>remote-grpc</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
<grpc-channel>
<name-service-addresses>
<socket-address>
<address>198.168.1.5</address>
<port>7574</port>
</socket-address>
</name-service-addresses>
</grpc-channel>
</remote-grpc-cache-scheme>
</caching-schemes>
親トピック: Coherence gRPCクライアントの構成
固定エンドポイントの構成
NameServiceを使用してgRPCエンドポイントを検出できない場合は、<grpc-channel>
ノードに1つ以上の<socket-address>
要素を含む<remote-addresses>
要素を指定して、固定アドレス・セットを構成できます。
次の例は、エンドポイントtest-cluster.svc:1408
でリスニングするgRPCプロキシに接続するクライアント構成を示しています:
coherence-cache-config.xml
<caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>remote-grpc</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
<grpc-channel>
<remote-addresses>
<socket-address>
<address>test-cluster.svc</address>
<port>1408</port>
</socket-address>
</remote-addresses>
</grpc-channel>
</remote-grpc-cache-scheme>
</caching-schemes>
親トピック: Coherence gRPCクライアントの構成
SSLの構成
他のCoherenceサービスと同様に、SSLを使用するようにクライアントを構成するには、<remote-grpc-cache-scheme>
構成の<grpc-channel>
ノードでソケット・プロバイダを構成します。 <socket-provider>
要素には、操作オーバーライド・ファイルで構成されたソケット・プロバイダの名前を含めることも、インライン・ソケット・プロバイダ構成で構成することもできます。
次の例は、操作オーバーライド・ファイルで構成されているssl
という名前のソケット・プロバイダへの参照を含む<remote-grpc-cache-scheme>
の構成を示しています:
coherence-cache-config.xml
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
<grpc-channel>
<remote-addresses>
<socket-address>
<address>test-cluster.svc</address>
<port>1408</port>
</socket-address>
</remote-addresses>
<socket-provider>ssl</socket-provider>
</grpc-channel>
</remote-grpc-cache-scheme>
次の例は、インライン・ソケット・プロバイダを使用した<remote-grpc-cache-scheme>
の構成を示しています:
coherence-cache-config.xml
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
<grpc-channel>
<remote-addresses>
<socket-address>
<address>test-cluster.svc</address>
<port>1408</port>
</socket-address>
</remote-addresses>
<socket-provider>
<ssl>
<identity-manager>
<key>server.key</key>
<cert>server.cert</cert>
</identity-manager>
<trust-manager>
<cert>server-ca.cert</cert>
</trust-manager>
</ssl>
</socket-provider>
</grpc-channel>
</remote-grpc-cache-scheme>
ソケット・プロバイダおよびその構成方法の詳細は、『Oracle Coherenceの保護』のSSLを使用した通信の保護に関する項を参照してください。
親トピック: Coherence gRPCクライアントの構成
クライアント・スレッド・プールの構成
Extendクライアントとは異なり、gRPCクライアントは、クライアントが複数のパラレル・リクエストおよびレスポンスを処理できるようにスレッド・プールで構成されたgRPC非同期クライアント上に構築されます。gRPCクライアントでは、標準のCoherenceの動的なサイズのスレッド・プールが使用され、負荷に応じてスレッドの数が自動的に調整されます。Coherenceがアプリケーションのユース・ケースに対してスレッド・プールを最適に調整しない場合、最小スレッド数と最大スレッド数を調整してプール・サイズを構成できます。スレッド数は最小数以上、最大数以下である必要があり、最大数は最小数以上である必要があります。
固定サイズのプールを構成する場合は、最小値と最大値を同じ値に設定します。
次の例は、固定、最小、および最大の3つのスレッド数すべてを構成する方法を示しています。プールは10スレッドから始まり、負荷に応じて5から15スレッドの間で自動的にサイズ設定されます。
coherence-cache-config.xml
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
<grpc-channel>
<remote-addresses>
<socket-address>
<address>test-cluster.svc</address>
<port>1408</port>
</socket-address>
</remote-addresses>
</grpc-channel>
<thread-count>10</thread-count>
<thread-count-max>15</thread-count-max>
<thread-count-min>5</thread-count-min>
</remote-grpc-cache-scheme>
親トピック: Coherence gRPCクライアントの構成
Coherenceリソースへのアクセス
gRPCクライアントがキャッシュ構成ファイルのリモート・スキームとして構成されているため、クラスタ・メンバーまたはExtendクライアントで使用されるのと同じCoherence APIを使用してCoherenceリソースにアクセスできます。
CoherenceブートストラップAPIを使用してクライアントを起動し、com.tangosol.net.Coherence
インスタンスを実行した場合は、次に示すようにSession
およびNamedMap
にアクセスできます:
Sessionsession = Coherence.getInstance().getSession();
NamedMap<String, String> map = session.getMap("test-cache");
この項には次のトピックが含まれます:
バック・キャッシュとしてのリモートgRPCキャッシュの使用
gRPCクライアントは、ほかのタイプのキャッシュと同様に、リモートgRPCキャッシュをニア・キャッシュまたはビュー・キャッシュのバック・キャッシュとして使用します。
次の例は、バック・キャッシュとして<remote-grpc-cache-scheme>
を使用するニア・キャッシュの構成を示しています:
coherence-cache-config.xml
<caching-scheme-mapping>
<cache-mapping>
<cache-name>*</cache-name>
<scheme-name>near</scheme-name>
</cache-mapping>
</caching-scheme-mapping>
<caching-schemes>
<near-scheme>
<scheme-name>near</scheme-name>
<front-scheme>
<local-scheme>
<high-units>10000</high-units>
</local-scheme>
</front-scheme>
<back-scheme>
<remote-grpc-cache-scheme>
<scheme-ref>remote-grpc</scheme-ref>
</remote-grpc-cache-scheme>
</back-scheme>
</near-scheme>
<remote-grpc-cache-scheme>
<scheme-name>remote-grpc</scheme-name>
<service-name>RemoteGrpcCache</service-name>
</remote-grpc-cache-scheme>
</caching-schemes>
親トピック: Coherenceリソースへのアクセス