18.5. リモートキャッシュストア

RemoteCacheStore は、リモート Red Hat JBoss Data Grid クラスターにデータを保存するキャッシュローダーの実装です。RemoteCacheStore は Hot Rod クライアントサーバーアーキテクチャーを使用してリモートクラスターと通信します。
Hot Rod はリモートキャッシュストアに対して ロードバランシングやフォールトトラレンスを提供します。また、 RemoteCacheStore とクラスター間の接続を細かく調整する機能も提供します。

18.5.1. リモートキャッシュストアの設定 (リモートクライアントサーバーモード)

以下は、Red Hat JBoss Data Grid のリモートクライアントサーバーモードにおけるリモートキャッシュストアのサンプル設定を示しています。

手順18.17 リモートキャッシュストアの設定

remote-store 要素のパラメーターは次の情報を定義します。
  1. cache パラメーターは、リモートキャッシュの名前を定義します。定義されない状態のままの場合、デフォルトのキャッシュが代わりに使用されます。
    <remote-store cache="default">
  2. socket-timeout パラメーターは、SO_TIMEOUT で定義される値 (ミリ秒単位) が指定されるタイムアウトでリモート Hot Rod サーバーに適用されるかどうかを設定します。タイムアウト値が 0 の場合は、無限のタイムアウトを示します。
    <remote-store cache="default" 
                  socket-timeout="60000">
  3. tcp-no-delay は、TCP_NODELAY がソケット接続でリモートの Hot Rod サーバーに適用されるかどうかを設定します。
    <remote-store cache="default" 
                  socket-timeout="60000" 
                  tcp-no-delay="true">
  4. hotrod-wrapping は、リモートストア上でラッパーが Hot Rod に必要となるかどうかを設定します。
    <remote-store cache="default" 
                  socket-timeout="60000" 
                  tcp-no-delay="true" 
                  hotrod-wrapping="true">
  5. remote-server 要素の単一パラメーターは以下の通りです。
    1. outbound-socket-binding パラメーターは、リモートサーバーのアウトバウンドソケットバインディングを設定します。
    <remote-store cache="default" 
                  socket-timeout="60000" 
                  tcp-no-delay="true" 
                  hotrod-wrapping="true">
    	<remote-server outbound-socket-binding="remote-store-hotrod-server" />
    </remote-store>

18.5.2. リモートキャッシュストアの設定 (ライブラリーモード)

手順18.18 リモートキャッシュストアの設定

以下は、Red Hat JBoss Data Grid のライブラリーモードにおけるリモートキャッシュストアのサンプル設定を示しています。
  1. Persistence 要素の設定

    passivationfalse に設定した状態で、persistence 要素を作成します。
    <persistence passivation="false" />
    
  2. リモートキャッシュストアの属性を設定するために、persistence 要素内に remoteStore 要素を作成します。
    <persistence passivation="false">
    	<remoteStore xmlns="urn:infinispan:config:remote:6.0"
    	             remoteCacheName="default"
    		     fetchPersistentState="false" 
    		     shared="true" 
    		     preload="false" 
    		     ignoreModifications="false" 
    		     purgeOnStartup="false"
    		     tcpNoDelay="true" 
    		     pingOnStartup="true"
    		     keySizeEstimate="62" 
    		     valueSizeEstimate="512"
    		     forceReturnValues="false">
    	</remoteStore>
    </persistence>
    • remoteCacheName 属性を追加します。リモート Infinispan クラスターに接続するリモートキャッシュの名前を指定します。リモートキャッシュの名前が指定されないと、デフォルトのキャッシュが使用されます。
    • fetchPersistentState 属性を追加します。true に設定されると、リモートキャッシュがクラスターに加わる際に永続状態が取り込まれます。複数のキャッシュストアがチェーンされている場合、1 つのキャッシュストアでのみこのプロパティーを true に設定できます。この値のデフォルトは false です。
    • shared 属性を追加します。これは、複数のキャッシュインスタンスがキャッシュストアを共有する場合に true に設定されます。これにより、複数のキャッシュインスタンスが同じ変更内容を個別に書き込むことを避けられます。この属性のデフォルトは false です。
    • preload 属性を追加します。true に設定されている場合、キャッシュストアデータがメモリーに事前にロードされ、起動後すぐにアクセス可能になります。これを true に設定する不利な点には、起動時間が増えることが挙げられます。この属性のデフォルト値は false です。
    • ignoreModifications 属性を追加します。true に設定されると、この属性は、キャッシュを変更する操作 (例: 配置、削除、消去、保存など) がキャッシュストアに影響を与えることを防ぎます。その結果、キャッシュストアは、キャッシュと同期しなくなります。この属性のデフォルト値は false です。
    • purgeOnStartup 属性を追加します。true に設定されると、キャッシュストアは起動プロセス時にパージされます。この属性のデフォルト値は false です。
    • tcpNoDelay 属性を追加します。true に設定されると、これは TCP NODELAY スタックをトリガーします。この属性のデフォルト値は true です。
    • pingOnStartup 属性を追加します。true に設定されると、クラスタートポロジーを取り込むために ping 要求がバックエンドサーバーに送信されます。この属性のデフォルト値は true です。
    • keySizeEstimate 属性を追加します。この値は、データベースに接続するためのドライバーユーザーのクラス名です。この属性のデフォルト値は 64 です。
    • valueSizeEstimate 属性を追加します。この値は、値をシリアライズおよびデシリアライズする時のバイトバッファーのサイズです。この属性のデフォルト値は 512 です。
    • forceReturnValues 属性を追加します。この属性は、FORCE_RETURN_VALUE をすべての呼び出しに対して有効にするかどうかを設定します。この属性のデフォルト値は false です。
  3. サーバー情報をセットアップするために remoteStore 要素内に servers 要素を作成します。情報を単一サーバーに追加するには、一般的な servers 要素内に server 要素を追加します。
    <persistence passivation="false">
    	<remoteStore xmlns="urn:infinispan:config:remote:6.0"
    	             remoteCacheName="default"
    		     fetchPersistentState="false" 
    		     shared="true" 
    		     preload="false" 
    		     ignoreModifications="false" 
    		     purgeOnStartup="false"
    		     tcpNoDelay="true" 
    		     pingOnStartup="true"
    		     keySizeEstimate="62" 
    		     valueSizeEstimate="512"
    		     forceReturnValues="false">
    		<servers>
    			<server host="127.0.0.1" 
    				port="19711"/>
    		</servers>
    	</remoteStore>
    </persistence>
    • ホストアドレスを設定するには host 属性を追加します。
    • リモートキャッシュストアで使用されるポートを設定するには port 属性を追加します。
  4. connectionPool 要素を remoteStore 要素に対して作成します。
    <persistence passivation="false">
    	<remoteStore xmlns="urn:infinispan:config:remote:6.0"
    	             remoteCacheName="default"
    		     fetchPersistentState="false" 
    		     shared="true" 
    		     preload="false" 
    		     ignoreModifications="false" 
    		     purgeOnStartup="false"
    		     tcpNoDelay="true" 
    		     pingOnStartup="true"
    		     keySizeEstimate="62" 
    		     valueSizeEstimate="512"
    		     forceReturnValues="false">
    		<servers>
    			<server host="127.0.0.1" 
    				port="19711"/>
    		</servers>
    		<connectionPool maxActive="99" 
    				maxIdle="97" 
    				maxTotal="98" />
    	</remoteStore>
    </persistence>
    • maxActive 属性を追加します。これは、一度に各サーバーに設定できるアクティブな接続の最大数を示します。この属性のデフォルト値は -1 であり、これはアクティブな接続の無限な数を示します。
    • maxIdle 属性を追加します。これは、一度に各サーバーに設定できるアイドル状態の接続の最大数を示します。この属性のデフォルト値は -1 であり、これはアイドル状態の接続の無限な数を示します。
    • maxTotal 属性を追加します。これは、組み合わされたサーバーセット内の永続的な接続の最大数を示します。この属性のデフォルト設定は -1 であり、これは接続の無限な数を示します。

18.5.3. リモートキャッシュストアのアウトバウンドソケットの定義

リモートキャッシュストアによって使用される Hot Rod サーバーは、standalone.xml ファイルの outbound-socket-binding 要素を使用して定義されます。
standalone.xml ファイルにおけるこの設定の例は次の通りです。

例18.1 アウトバウンドソケットの定義

<server>
    ...
    <socket-binding-group name="standard-sockets" 
    			  default-interface="public" 
    			  port-offset="${jboss.socket.binding.port-offset:0}">
        ...
        <outbound-socket-binding name="remote-store-hotrod-server">
            <remote-destination host="remote-host" 
                                port="11222"/>
        </outbound-socket-binding>
    </socket-binding-group>
</server>