24.3.3. クラスターリングモード
JBoss EAP で Infinispan を使用すると、2 つの方法でクラスターリングを設定できます。ご使用のアプリケーションに最も適した方法は要件によって異なります。各モードでは可用性、一貫性、信頼性、およびスケーラビリティーのトレードオフが発生します。クラスターリングモードを選択する前に、ネットワークで最も重要な点を特定し、これらの要件のバランスを取ることが必要となります。
キャッシュモード
- Replication (レプリケーション)
- Replication (レプリケーション) モードはクラスターの新しいインスタンスを自動的に検出し、追加します。これらのインスタンスに加えられた変更は、クラスター上のすべてのノードにレプリケートされます。ネットワークでレプリケートされる情報量が多いため、通常 Replication モードは小型のクラスターでの使用に最も適しています。UDP マルチキャストを使用するよう Infinispan を設定すると、ネットワークトラフィックの輻輳をある程度軽減できます。
- Distribution (分散)
Distribution (分散) モードでは、Infinispan はクラスターを線形にスケールできます。Distribution モードは一貫性のあるハッシュアルゴリズムを使用して、クラスター内で新しいノードを配置する場所を決定します。保持する情報のコピー数 (または所有者数) は設定可能です。保持するコピー数、データの永続性、およびパフォーマンスにはトレードオフが生じます。保持するコピー数が多いほどパフォーマンスへの影響が大きくなりますが、サーバーの障害時にデータを損失する可能性は低くなります。ハッシュアルゴリズムは、メタデータのマルチキャストや保存を行わずにエントリーを配置し、ネットワークトラフィックを軽減します。
クラスターサイズが 6-8 ノードを超える場合は Distribution モードをキャッシュストラテジーとして使用することを考慮してください。Distribution モードでは、データはクラスター内のすべてのノードではなくノードのサブセットのみに分散されます。
- Scattered (散在)
Scattered (散在) モードは、一貫したハッシュアルゴリズムを使用して所有者を判断する Distribution モードと似ています。しかし、所有者は 2 名のメンバーに限定され、オリジネーター (指定のセッションのリクエストを受信するノード) は常にロックを調整する所有者やキャッシュエントリーの更新を想定します。2 名の所有者を持つ分散キャッシュが頻繁に 2 つの RPC 呼び出しを使用できる場合、Scattered モードで使用されるキャッシュ書き込みアルゴリズムは、書き込み操作の結果が単一の RPC 呼び出しになることを保証します。これは、ロードバランサーのフェイルオーバーがプライマリー以外の所有者やバックアップノードにトラフィックを向ける可能性があるため、分散 Web セッションに便利です。これにより、競合の可能性を下げ、クラスタートポロジーの変更後にパフォーマンスを向上することが可能になります。
Scattered モードは、トランザクションや L1 キャッシュをサポートしません。しかし、一貫したハッシュによると所有者ではない場合でも、指定エントリーのキャッシュの書き込みを開始するノードは一定の期間は継続してそのエントリーの読み取りを継続する、バイアス読み取り (Biased read) をサポートします。バイアス読み取りと L1 キャッシュの設定属性は異なりますが、L1 キャッシュと同様の効果があります。
同期および非同期のレプリケーション
レプリケーションは同期または非同期モードで実行でき、選択するモードは要件やアプリケーションモードによって異なります。
JBoss EAP 7.1 以降、セッションレプリケーションには常に同期 (SYNC
) キャッシュモードを使用する必要があります。sync
はデフォルトのキャッシュモードです。セッションレプリケーションと適切なキャッシュモードの詳細は、How to configure and tune the session replication for EAP を参照してください。
- 同期のレプリケーション
- 同期のレプリケーションでは、レプリケーションプロセスはユーザーのリクエストを処理するのと同じスレッドで実行されます。セッションレプリケーションは、完了した応答がクライアントに返送された後に開始され、スレッドはレプリケーションの完了後のみに解放されます。同期レプリケーションはクラスターの各ノードからの応答を必要とするため、ネットワークトラフィックに影響を与えます。ただし、クラスターのすべてのノードへ確実に変更が加えられる利点があります。
- 非同期のレプリケーション
- 非同期のレプリケーションでは、Infinispan はスレードプールを使用してバックグラウンドでレプリケーションを実行します。送信元はクラスターの他のノードからの返答を待ちません。しかし、同じセッションを読み取るキャッシュはその前のレプリケーションが完了するまでブロックされるため、陳腐データは読み取られません。レプリケーションは時間ベースまたはキューのサイズによって引き起こされます。失敗したレプリケーションはログに書き込まれ、リアルタイムで通知されません。
24.3.3.1. キャッシュモードの設定
管理 CLI を使用してデフォルトキャッシュを変更できます。
ここでは、デフォルトが Distribution モードである Web セッションキャッシュの設定に固有する手順を説明します。手順と管理 CLI コマンドは、他のキャッシュコンテナー向けに簡単に調整できます。
Replication キャッシュモードへの変更
Web セッションキャッシュのデフォルトの JBoss EAP 7 設定には、レプリケートされたキャッシュ repl
が含まれていません。最初にこのキャッシュを追加する必要があります。
以下はスタンドアロンサーバーの管理 CLI コマンドになります。管理対象ドメインで実行している場合は、/subsystem=infinispan
コマンドの前に /profile=PROFILE_NAME
を追加し、更新するプロファイルを指定する必要があります。
レプリケーションキャッシュ
repl
を追加し、デフォルトのキャッシュとして設定します。batch /subsystem=infinispan/cache-container=web/replicated-cache=repl:add() /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=transaction:add(mode=BATCH) /subsystem=infinispan/cache-container=web/replicated-cache=repl/component=locking:add(isolation=REPEATABLE_READ) /subsystem=infinispan/cache-container=web/replicated-cache=repl/store=file:add /subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=repl) run-batch
サーバーをリロードします。
reload
Distribution キャッシュモードへの変更
Web セッションキャッシュのデフォルトの JBoss EAP 7 設定にはすでに dist
分散キャッシュが含まれています。
以下はスタンドアロンサーバーの管理 CLI コマンドになります。管理対象ドメインで実行している場合は、/subsystem=infinispan
コマンドの前に /profile=PROFILE_NAME
を追加し、更新するプロファイルを指定する必要があります。
デフォルトのキャッシュを
dist
分散キャッシュに変更します。/subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=dist)
分散キャッシュの所有者数を設定します。以下のコマンドは所有者の数を
5
に設定します。デフォルトは2
です。/subsystem=infinispan/cache-container=web/distributed-cache=dist:write-attribute(name=owners,value=5)
サーバーをリロードします。
reload
Scattered キャッシュモードの変更
web セッションキャッシュのデフォルトの JBoss EAP 設定には scattered-cache
が含まれていません。以下の例は、scattered キャッシュを追加し、デフォルトのキャッシュとして設定する管理 CLI コマンドを示しています。
以下は、HA プロファイルを使用するスタンドアロンサーバー向けの管理 CLI コマンドになります。管理対象ドメインで実行している場合は、/subsystem=infinispan
コマンドの前に /profile=PROFILE_NAME
を追加し、更新するプロファイルを指定する必要があります。
読み取りのバイアスライフスパンがデフォルトの web セッションタイムアウト値 (30 分) と同じになるよう、scattered キャッシュを作成します。
/subsystem=infinispan/cache-container=web/scattered-cache=scattered:add(bias-lifespan=1800000)
scattered
をデフォルトキャッシュとして設定します。/subsystem=infinispan/cache-container=web:write-attribute(name=default-cache,value=scattered)
これにより、サーバーが以下のように設定されます。
<cache-container name="web" default-cache="scattered" module="org.wildfly.clustering.web.infinispan"> ... <scattered-cache name="scattered" bias-lifespan="1800000"/> ... </cache-container>