26 Coherence Java gRPCクライアントの使用

Coherence Java gRPCクライアントは、Javaアプリケーションが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 gRPCクライアントの構成

Coherence*Extendと同様に、Coherence gRPCクライアントは、アプリケーション・キャッシュ構成ファイルでリモート・スキームを構成することで、リモート・クラスタ化リソースにアクセスします。

この項には次のトピックが含まれます:

gRPCクライアントの構成の概要

次の2つの方法を使用して、gRPCクライアントを構成できます:

  • NameService - gRPCクライアントがCoherence NameServiceを使用してクラスタ内のgRPCエンドポイントを検出する最も単純な構成。この構成では、CoherenceはgRPCプロキシがリスニングしているクラスタ内のすべてのエンドポイントを検出し、gRPC Javaライブラリの標準クライアント側ロード・バランサを使用して、クライアントからプロキシ・エンドポイントへの接続のロード・バランシングが行われます。
  • 固定エンドポイント - この構成では、カスタムのAddressProvider構成を介してgRPCエンドポイントの固定セットを提供するか、ソフトウェア・コードにエンドポイントを含めることができます。複数のエンドポイントが指定されている場合、gRPC Javaライブラリの標準クライアント側ロード・バランサを使用して、クライアントからプロキシ・エンドポイントへの接続のロード・バランシングが行われます。

これらのアプローチは、一部のデプロイメント環境でのみ機能します。たとえば、NameService構成は、クライアントとクラスタの両方が同じコンテナ化された環境内にある場合に機能します。Kubernetesなどのコンテナ化された環境では、通常、NameService構成は、Coherenceクラスタ・ポッドへの接続をロード・バランシングする単一のイングレス・ポイントで構成されます。このイングレス・ポイントのアドレスは、リモートgRPCキャッシュ構成で単一の固定アドレスとして使用されます。ただし、NameService構成は、クラスタがKubernetesなどのコンテナ化された環境内にあり、クライアントがコンテナ化された環境の外部にあるコンテナ化された環境では機能しません。

リモート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>

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>

固定エンドポイントの構成

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>

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を使用した通信の保護に関する項を参照してください。

クライアント・スレッド・プールの構成

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クライアントがキャッシュ構成ファイルのリモート・スキームとして構成されているため、クラスタ・メンバーまたは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>