25 Coherence gRPCプロキシ・サーバーの使用

Coherence gRPCプロキシは、Coherence gRPCモジュール内で定義されているgRPCサービスのサーバー側実装です。gRPCプロキシは標準のgRPC Javaライブラリを使用し、gRPCを介してJava、JavaScript、PythonおよびGo gRPCクライアントにCoherence APIを提供します。

この章の内容は次のとおりです。

Coherence gRPCプロキシ・サーバーの設定

Coherence gRPCサーバーを設定して使用を開始するには、プロジェクトの依存関係として宣言する必要があります。

例:

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-grpc-proxy</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-grpc-proxy"
}

build.gradleファイルでは、coherenceVersionプロパティは使用されるCoherenceのバージョンで、coherenceGroupIdプロパティはCoherence商用グループIDである com.oracle.coherenceまたはCEグループIDであるcom.oracle.coherence.CEのいずれかです。

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

サーバーの起動

gRPCサーバーは、com.tangosol.net.Coherence(またはcom.tangosol.net.DefaultCacheServer)を実行すると自動的に起動します。通常、com.tangosol.net.Coherenceクラスをアプリケーションのメイン・クラスとして使用します。または、ブートストラップAPIを使用して、com.tangosol.net.Coherenceのインスタンスを起動することもできます。

デフォルトでは、gRPCサーバーはエフェメラル・ポートを使用して、すべてのローカル・アドレスをリスニングします。Coherence*Extendと同様に、gRPCサーバーがバインドされているエンドポイントは、Coherence NameServiceを使用してクライアントによって検出できます。そのため、エフェメラル・ポートを使用することで、ポートの競合なくgRPCサーバーを起動することができます。

ログ出力を確認すると、次のような2つのログ・メッセージが表示されます:
In-Process GrpcAcceptor is now listening for connections using name "default"
GrpcAcceptor now listening for connections on 0.0.0.0:55550

サービスは、Coherence gRPCクライアント実装のいずれかからのリクエストを処理する準備ができています。

サーバーの構成

gRPCサーバーの構成には、サーバー・リスニング・アドレスとポート、SSL/TLSおよびサーバー・スレッド・プールの構成が含まれます。

Coherence gRPCプロキシは、gRPCプロキシの単一の<proxy-scheme>構成のみを含むgrpc-proxy-cache-config.xmlという内部デフォルト・キャッシュ構成ファイルを使用して構成されます。サーバーはシステム・プロパティと環境変数で構成できるため、構成ファイルをオーバーライドする必要はありません。

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

サーバー・リスニング・アドレスの構成

実行時に、coherence.grpc.server.addressシステム・プロパティまたはCOHERENCE_GRPC_SERVER_ADDRESS環境変数を設定して、gRPCサーバーがバインドするアドレスを構成できます。

デフォルトでは、サーバーは、ローカル・ホストのすべてのネットワーク・インタフェースに相当するアドレス0.0.0.0にバインドします。

たとえば、ホストにローカルIPアドレス192.168.0.25がある場合、次のように、この特定のアドレスにバインドするようにサーバーを構成できます:

システム・プロパティの使用:

-Dcoherence.grpc.server.address=192.168.0.25

環境変数の使用:

export COHERENCE_GRPC_SERVER_ADDRESS=192.168.0.25

サーバー・リスニング・ポートの構成

実行時に、coherence.grpc.server.portシステム・プロパティまたはCOHERENCE_GRPC_SERVER_PORT環境変数を設定して、gRPCサーバーがバインドするポートを構成できます。

たとえば、ポート1408でリスニングするようにサーバーを構成するには:

システム・プロパティの使用:

-Dcoherence.grpc.server.port=1408

環境変数の使用:

export COHERENCE_GRPC_SERVER_PORT=1408

SSL/TLSの構成

他のCoherenceサービスと同様に、ソケット・プロバイダの名前を指定することで、SSLを使用するようにCoherence gRPCサーバーを構成できます。

名前付きソケット・プロバイダは、Coherence操作構成ファイル(オーバーライド・ファイル)tangosol-coherence-override.xmlで構成されます。

tangosol-coherence-override.xmlファイルは次のようになります:

<socket-providers>
      <socket-providerid="tls">
        <ssl>
          <identity-manager>
            <keysystem-property="coherence.security.key">server.key</key>
            <certsystem-property="coherence.security.cert">server.cert</cert>
          </identity-manager>
          <trust-manager>
            <certsystem-property="coherence.security.ca.cert">server-ca.cert</cert>
          </trust-manager>
        </ssl>
      </socket-provider>
    </socket-providers>

名前付きソケット・プロバイダを構成した後、coherence.grpc.server.socketproviderシステム・プロパティまたはCOHERENCE_GRPC_SERVER_SOCKETPROVIDER環境変数を設定して、そのプロバイダを使用するようにgRPCサーバーを構成できます。

たとえば、tlsという名前のソケット・プロバイダが操作構成ファイルtangosol-coherence-override.xmlで構成されている場合は、次のようにtlsを使用するようにgRPCサーバーを構成できます:

システム・プロパティの使用:

-Dcoherence.grpc.server.socketprovider=tls

環境変数の使用:

export COHERENCE_GRPC_SERVER_SOCKETPROVIDER=tls

ソケット・プロバイダおよびその構成方法の詳細は、『Oracle Coherenceの保護』SSLを使用した通信の保護に関する項を参照してください。

サーバー・スレッド・プールの構成

他のCoherenceサービスと同様に、gRPCサーバーは動的にサイズ設定されたスレッド・プールを使用してリクエストを処理します。動的サイジング・アルゴリズムが最適でないことが判明した場合は、最小スレッド数と最大スレッド数を調整してスレッド・プール・サイズを構成できます。

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

最小スレッド数の設定

スレッドの最小数を調整すると、負荷のバーストに対処するのに役立ちます。

動的プールが負荷の増加に迅速に対処する場合、スレッド数を適切な数に増やすのに時間がかかることがあります。最小サイズを設定すると、負荷を処理する特定の数のスレッドが常に存在することが保証されます。

coherence.grpc.server.threads.minシステム・プロパティまたはCOHERENCE_GRPC_SERVER_THREADS_MIN環境変数を使用して、プール内のスレッドの最小数を設定できます。

たとえば、次のように最小スレッド数を10に設定できます:

システム・プロパティの使用:

-Dcoherence.grpc.server.threads.min=10

環境変数の使用:

export COHERENCE_GRPC_SERVER_THREADS_MIN=10
最大スレッド数の設定

最大スレッド数を調整すると、動的プールが高くなりすぎてCPUリソースを消費しすぎないようにするのに役立ちます。

coherence.grpc.server.threads.maxシステム・プロパティまたはCOHERENCE_GRPC_SERVER_THREADS_MAX環境変数を使用して、プール内のスレッドの最大数を設定できます。

ノート:

最大スレッド数と最小スレッド数の両方を指定する場合は、最大スレッド数を最小スレッド数より大きい値に設定する必要があります。

たとえば、次のように最大スレッド数を20に設定できます:

システム・プロパティの使用:

Dcoherence.grpc.server.threads.max=20

環境変数の使用:

export COHERENCE_GRPC_SERVER_THREADS_MAX=20

gRPCプロキシ・サーバーの無効化

coherence-grpc-proxyモジュールがクラス・パス(またはモジュール・パス)にある場合、Coherence gRPCサーバーは自動的に起動します。ただし、coherence.grpc.enabledシステム・プロパティをfalseに設定することで、サーバーを無効化できます。

Helidon Microprofile gRPCサーバーを使用したプロキシ・サービスのデプロイ

マイクロプロファイルgRPCサーバーを有効にした状態でHelidon Microprofileサーバーを使用する場合は、CoherenceのデフォルトのgRPCサーバーではなく、Helidon gRPCサーバーにCoherence gRPCプロキシをデプロイできます。

この動作が自動的に行われるようにするには、coherence.grpc.enabledシステム・プロパティをfalseに設定し、組込みサーバーを無効にします。組込みのGrpcMpExtension実装で、プロキシ・サービスがHelidon gRPCサーバーにデプロイされます。

Helidonの詳細は、Helidonのドキュメントを参照してください。

ノート:

Helidon MP gRPCサーバーを使用している場合、coherence.grpc.enabledシステム・プロパティをfalseに設定していないと、Helidon gRPCサーバーとCoherenceのデフォルトgRPCサーバーの両方が起動します。両方のサーバーが異なるポートを使用するように構成していないかぎり、このイベントによってポート・バインドの問題が発生する可能性があります。