シリーズ三〇から一のJBoss:JBossのデータグリッド(Infinispan)キャッシュモード

Red HatのJBossのデータグリッドは、ミドルウェア製品(あるhttp://www.redhat.com/products/jbossenterprisemiddleware/data-grid/ JBossのデータグリッドがInfinispan(オープンソースコミュニティの製品に基づいており、)http://infinispan.org/ )。Infinispanのコミュニティ版とエンタープライズ版のJBossデータグリッドにはあったので、このセクションはInfinispanに基づいていたとおりに。

アウトライン

Infinispanは、2つのモードが用意されています。

  • ローカルモード - Infinispanが設けられた非クラスタモードは、ローカルモードでは、Infinispanは、単一ノード、メモリにキャッシュされたデータとみなすことができます。私たちは、より効率的で、より高い性能をInfinispan作るこれ、スケーラビリティ、フォールトトレランス、クラスタリングなどを考慮していますので、クラスタモデルと比較すると。
  • トランクモード - トランクモードInfinispanサーバ(Infinispanインスタンス)複数のクラスタ、クラスタデータ・グリッドを構成する全ての点を形成します。ノードの状態をメッシュは、他のすべてのノード、またはノードのサブセットにコピーする必要があります。どのくらいのInfinispanデータグリッドのフォールトトレランスとスケーラビリティ、ノードのサブセットが大きすぎるバスケットInfinispanグリッドのスケーラビリティを決定するために、ノードのこのサブセット。クラスタモデル内のノード間で、我々は、後で詳しく説明します、JGroupsのことで状態を複製することです。クラスタモデルのレプリケーション戦略に応じて、分散モード、コピーモードと無効モードに分けることができます

ローカルモード

クラスタモデルで具現Infinispan主な機能は、Infinispanローカルモードは、実用的かつ効率的特性の必要性を提供するが、キャッシュインターフェースはのConcurrentMapのJDK Infinispanは継承し、通常の比較マップは、Infinispanは、次の機能を提供します。

  • キャッシュエントリは、第三者サーバ(リレーショナル・データベース、無SQL、雲)を格納するキャッシュメモリによって保存してもよく、キャッシュ・メモリ・ストレージ・サーバのサードパーティの同期、非同期モード動作によって
  • 追い出されたキャッシュエントリは、Java仮想マシンのメモリのオーバーフローを防ぎます
  • キャッシュエントリに長い期限切れの未使用のエントリを確保するために削除されます
  • JTAおよびXAサポートは、キャッシュ操作が保証トランザクションを可能にします
  • MVCCは、その処理エンティティが非ブロッキング言われることを保証するために同時読み取りキャッシュ読み出しに基づいています

Infinispanサーバキャッシュコンテナ

キャッシュサーバInfinispanのコンテナに相当し、コンテナは複数のキャッシュエントリを有していてもよく、キャッシュがローカルであることができ、それはまた、クラスタ化することができます。Infinispanサーバプロトコルサーバーに接続するためのクライアントアプリケーションのための(ホットロッド、休憩、Memcachedの)、コンテナキャッシュ操作。Infinispanサーバプロファイルキャッシュキャッシュコンテナ属性は、この属性は、ローカルキャッシュとキャッシュ・クラスタを含むキャッシュ構成の複数を含み、容器を表します。キャッシュコンテナの簡単な構成を次の、我々は、中/スタンドアロン/設定/ standalone.xml JDGから切り出し。

<subsystem xmlns="urn:infinispan:server:core:5.3" default-cache-container="local">
	<cache-container name="local" default-cache="default" start="EAGER">
	</cache-container>
</subsystem>

次のプロパティを構成するキャッシュコンテナ:

  • 名前はキャッシュコンテナの名前を特定します
  • デフォルト・キャッシュのキャッシュ・インスタンスのデフォルトのキャッシュコンテナを決定
  • コンテナがロードされている場合、サーバはInfinispanを開始すると、有効な値があってもよい、キャッシュサーバはEAGER Infinispanに起動開始ローディングバッファー容器かどうかを決定する、LAZYは場合リクエストEAGERまたはLAZYにロードされます

ローカルコンフィギュレーションモード

次のように構成サーバにInfinispanは、ローカル・キャッシュ・バッファ・コンテナに追加しました:

<cache-container name="local" default-cache="default" >
    <local-cache name="default" start="EAGER">
        <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false" />
        <transaction mode="NONE" />
    </local-cache>
</cache-container>

ローカルにキャッシュされたプロファイルが作成したとしてInfinispanインタフェースのDefaultCacheManagerによって作成されたデフォルトのキャッシュに似ています。さらに、ローカルキャッシュとキャッシュ・クラスタは、キャッシュ容器に同時に配置することができるが、クラスタ・キャッシュ・バッファ容器場合、キャッシュコンテナは<輸送/>プロパティでなければなりません。ローカル・キャッシュ要素は以下の属性とサブ要素が含まれています。

  • 名前は、ローカル・キャッシュの名前を特定します
  • バッファ容器がEAGERに開始された場合、バッファ容器のインスタンスを起動するデフォルトの開始バッファは、有効な値は、キャッシュ・インスタンスを起動し、EAGERまたはLAZY可能かどうかを決定する、LAZYロードのみ要求されたときに言いました
  • バッチ処理は、ローカルキャッシュのバッチ操作かどうかを判断します
  • 決定ローカルキャッシュインデックスをインデックスすることは有効な値はNONE、LOCALされない属性、およびALL
また、ローカルキャッシュに、我々はそのようなDefaultCacheManager Infinispan工法によるキャッシュ転送プロファイルの作成など、InfinispanキャッシュでAPIをロードする場合は、次の例の設定ファイルInfinispanです。

<clustering mode="local" />

この場合には、ローカル・キャッシュ・クラスタコンフィギュレーションモードのための上記で規定のように、たとえ定義は<輸送/>特性をなお。

クラスタモード

状態のレプリケーション戦略によると、異なるクラスタに細分化モデルである:分散モード、コピーモードと非アクティブモードは、その後、私たちは順番に導入しました。我々が設定ステータスをさらにすることができますクラスタモードは、同期または非同期転送モードです。

同期モードを使用する場合は、応答の実行を続行する前に、送信者のスレッドを受信するまで、送信者のブロッキングは、受信機の応答を待ちます。クラスタの連続性を確保し、応答を待たずに、ブロックせずに非同期にデータを送信するモード。たとえば、Webアプリケーションのクラスタで、スティッキーセッションの負荷分散方式(スティッキー・セッション)を使用して、要求は、この場合には、我々は、非同期レプリケーションのHTTPセッション状態を使用して、同じノードにあります。私たちは、非同期または同期モード属性、同期レプリケーションモードの設定例を設定できます。

<replicated-cache name="default" start="EAGER" mode="SYNC" batching="false" >
...
</replicated-cache>

:私たちはInfinispanの物理アドレスを介してインタフェースを提供することができ、別の取得クラスタグリッド

AdvancedCache.getRpcManager().getT ransport().getPhysicalAddresses()

三つのクラスタモデルInfinispan

この3つのクラスターモデルでの議論Infinispan:キー分散モード、コピーモードと非アクティブモードでは、これら三つのモデルはInfinispan嘘を設計されています。分散モデルは、大規模なデータ処理の可能性を提供する、線形成長のデータを処理する能力があり、コピーモードが一般的に使用されているエンタープライズ・アプリケーション・クラスタ・モデルを採用し、無効モードは、高度に並行トランザクション内のエンタープライズ・アプリケーションのための技術をキャッシュに基づくソリューションを提供しますプログラム、そして私たちは順番に、これらのパターンを議論します。

分散モード

Infinispan分散キャッシュエントリモードがグリッドノードのサブセットに格納され、各グリッド・ノードではなく、キャッシュエントリが保存されています。フォールトトレランスと一般バックアップ・データ・グリッドのため、キャッシュ・エントリは、2つの以上のノードに格納されています。そして他のに比べクラスタリングパターンが、キャッシュエントリのでスケーラビリティにおける他のモードのように優れた、グリッド・ノードのサブセットに記憶されます。

図4は、4つのノードのグリッドにサーバInfinispanデータとして構成され、キャッシュ・エントリは、サブセット2に保存されています。我々は、ハッシュアルゴリズムは、ノード上に記憶されたデータのどの図に示すように、格納されたデータを決定し、サーバ1 K / Vにデータを追加する。2サーバに。対応するノードのハッシュアルゴリズムに同一のデータを取得、データを読み出す際に、我々は、サーバー上図のキャッシュエントリK / V 3を得ます。


図分散モード1 Infinispan

Infinispanは、モードデータのバックアップを分散、またはサブグリッドに格納されたデータは、大規模なデータセットに特性Infinispanと拡張性を反映しています。容量データグリッドInfinispanを計算するには、以下の式:

Capacity = (memory * number) / numOwners

  • 容量 - 容量のデータグリッド
  • メモリ - データ・グリッド内の単一のノードのメモリサイズ
  • メッシュ内のデータノードの数 - 数
  • numOwners - メッシュデータにおけるノードの部分集合(データバックアップまたはデータ記憶ノード)

例えば、我々が使用するメモリのサイズに各ノード50個のノードを有するInfinispan 4ギガバイト、データグリッド内のノードのサブセットが2である、グリッド(4 * 50)/ 2の、データ容量、すなわち、100ギガバイトであります。読み出しデータの透明性ということ、そして私たちは、ハッシュアルゴリズムの連続性を探求する必要がありますので、分散モードでは、連続ハッシュアルゴリズムを使用しています。

継続分散ハッシュアルゴリズムモード

それはキャッシュを維持しながら、それらのキャッシュ・エントリを保持するためのグリッドノードからハッシュアルゴリズムの連続によって選択Infinispan分散モードでは、ノードの合計数は、データ・グリッド・ノードのサブセットは、ハッシュアルゴリズムの設定ファイルは、ノードのサブセットの総数を知っていることですこのエントリは、ノード数に存在しています。Infinispanデータグリッドのパフォーマンスと耐障害性をノード数の大きさに関連するサブセットの数は、キャッシュエントリが多くのノードに保存されたノードの大きすぎるサブセットがパフォーマンスに影響を与える可能性があるが、その数は、ターン内のノードの小さすぎるサブセットがフォールトトレランスに影響を与えています。

グリッドからデータキャッシュ更なるデータにアクセスするために使用されるプロセスのハッシュアルゴリズムは、アクセスデータは、全ノードマルチキャスト要求に伝達されず、アクセス処理は、メタデータの非常に様々な、PUT動作を維持するために必要とされていない、のみサブノード番号(numOwners)遠隔再配置コレクタグリッドを生成します。GET操作は、リモート・ディスパッチのために製造グリッドで唯一のノードであるが、実際の点でバックグラウンドを輸送サブセット(numOwners)のグリッドノード番号を生成し、これらを同時に輸送される、クエリ結果がディスパッチに戻されます人。他には、ローカル・キャッシュ・エントリに存在しない場合、同期要求は、他のノードを輸送からデータを取得するために使用されているにかかわらず、同期または非同期輸送輸送の構成、分散モードです。

分散構成モード

分散パターンは、我々はInfinispanバッファ容器を次のサーバを追加する必要が分散モードに配置Infinispanクラスタ・キャッシュに属し、特に分散キャッシュバッファ容器(キャッシュコンテナに要素を追加、JDG /スタンドアロン/構成/ clustered.xmlを編集)。

<cache-container name="local" default-cache="default" >
    <distributed-cache name="default" mode="{SYNC/ASYNC}" segments="${NUMBER}" start="EAGER">
        <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false" />
        <transaction mode="NONE" />
    </distributed-cache>
</cache-container>

によって分散キャッシュ情報を配置分散キャッシュ要素:

  • 名前はキャッシュの名前を定義し、キャッシュを一意に識別されます
  • キャッシュモードは、コピーモード、およびSYNC ASYNCの実効値を定義します
  • このプロパティは、グリッドノード10を乗じ、その推奨値の総数は、このプロパティのデフォルト値は80であり、グリッドの端までハッシュ選択セグメント、です
  • バッファ容器がEAGERに開始された場合、バッファ容器のインスタンスを起動するデフォルトの開始バッファは、有効な値は、キャッシュ・インスタンスを起動し、EAGERまたはLAZY可能かどうかを決定する、LAZYロードのみ要求されたときに言いました
また、我々はAPI、分散モードキャッシュ搭載のCacheManager例を使用することによりInfinispan、Infinispanのロード中に、我々は、設定ファイルを指定する必要があり、次の例では、プロファイリングすることです:

<clustering mode="dist">
    <sync replTimeout="${TIME}" />
    <stateTransfer chunkSize="${SIZE}" fetchInMemoryState="{true/false}" awaitInitialTransfer="{true/false}" timeout="${TIME}" />
    <transport clusterName="${NAME}" distributedSyncTimeout="${TIME}" strictPeerToPeer="{true/false}" transportClass="${CLASS}" />
</clustering>

モード属性クラスタリング要素は、分散キャッシュモードのクラスタを定義します。

replTimeoutプロパティシンク要素は、輸送幸運を待っているの最大タイムアウトを指定します。タイムアウト期間がまだリモートディスパッチの確認を受信して​​いない場合は、例外がスローされます。

stateTransfer要素は、クラスタ状態遷移を定義する方法を完了すると、状態遷移は、クラスタノードの葉に発生した場合、または新しいノードが追加されます。この要素は次の属性があります。

  • 属性値は、属性値が0に等しい場合よりも小さくなり、0より大きく、キャッシュの数のエントリの数が属性バッチに設定されている場合、チャンクは、バッチ処理キャッシュエントリの数のサイズを定義し、バッチが無効になっています
  • 属性値がtrueの場合fetchInMemoryState、キャッシュ要求キャッシュ内で時間インスタンスの周りのデータは、衝撃荷重バッファの開始時刻
  • 属性値がawaitInitialTransfer fetchInMemoryState真である場合、キャッシュは、隣接するインスタンスを取得するまで、awaitInitialTransferプロパティはブロックを輸送する第一CacheManager.getCache()メソッドは、データ・キャッシュを可能にします。このプロパティは、分散モードとコピーモードに適用され、デフォルトはtrueです
  • リターンが隣接ノードタイムアウト期間内に受信されない場合、タイムアウトは、最大待ち時間データ取得タイムアウト隣接キャッシュ・インスタンスを定義ミリ秒、キャッシュローダが解除され、対応する例外がスローされます
輸送要素は、トランスポート・コンフィギュレーション・キャッシュデータであり、それは次のプロパティがあります。

  • clusterNameのクラスタの名前を定義し、クラスタノードのみ、同じ名前を定義するクラスタに参加することができるように、Infinispanデータグリッドを構築します
  • distributedSyncTimeoutは、状態交換、分布及びリアルタイムハッシュキャッシュエントリことを確実にするために、分散ロック時間を取得し、この分散キャッシュ・インスタンス・ロックを待っている定義します
  • 例外をスローし、キャッシュが存在例ではない場合は、コピー操作が失敗し、trueに設定されている場合strictPeerToPeerは、falseに設定した場合、キャッシュは、本実施例ではない場合、操作は無視コピーを失敗し、単純なロギングを行います
  • クラスは、送信バッファを表す定義transportClass

分散モードGETやPUT

分散モードでは、書き込みコマンドを実行する前にGET操作を実行します。次のようにキーを使用して戻る前にキャッシュに対応する方法(例えば、Cache.put())K値は、決定されるため、これが発生します。

cache.put("key", "value-previous-cache");
String previous = cache.put("key", "value");

前の文字列値の値 - 前回のキャッシュ。実際、Infinispanキャッシュの目的が達成されるjava.util.Map、定義されたキー・マップ・インターフェースに対応する値は、以前に置く()メソッドは、必要なバッファを返します。値が見つかった場合、対応する戻り空、まだ動作が行われるGET。書き込み動作が置かれInfinispan、操作をPUT GET操作より優先され、常に同期して、関係なく、Infinispanの構成を常に戻り値を待っている同期、非同期、同期しています。

操作が発生PUTに優先して操作をGET Infinispan、この操作は、相関値に対応する大規模なメッシュノードのキーが比較的大きい場合は特に、非常に高価であり、我々は受信した場合には、各ノードが戻るのを待ちませんGET操作を防ぐことができます以前に使用する必要がある場合、任意のノードの戻り、同期待ちの終わりには、GET操作でFlag.SKIP_REMOTE_LOOKUPマークを追加同期化待ち時間を無視することができ、これはキャッシュの動作に影響を与えませんが、java.util.Mapの定義を損ないますデータが存在し、このフラグがセットされていません。

コピーモード

複製のInfinispanモードは、ネットワーク環境における単純なクラスタ・キャッシュ、キャッシュ・インスタンスに隣接するキャッシュ・インスタンス自動検出された後、クラスタ・グリッドへのノードのような複数の構成、クラスタを構築します。キャッシュエントリにノードを追加する他のすべてのノードに複製され、同じグリッド内の任意のノードは、クラスタ内のすべてのデータを取得することができます。

図2は、4つのノードのグリッドを構築する4 Infinispanデータサーバは、我々は、データを他の3つのノードにコピーされ、サーバデータK 1 / Vに加えました。


図のコピーモード2 Infinispan


コピーモードの使用シナリオ

モードは、クラスタ内の共有状態をコピーするために使用され、正方形のパフォーマンスに関する考慮事項のクラスタ番号がクラスタネットワーク場合、クラスタ内のポイントの状態の変化は、他のノードにコピーする必要があるためモードが、10未満であるべきであるコピーあまりにも多くのグリッド・ノードは、多数のメッセージがノード間で転送する必要がある、ネットワーク伝送圧力は、クラスタのパフォーマンスに影響します。ある程度の性能を向上させることができる複写モードメッセージ送信の通常マルチキャストモード、。操作が返すクエリより高速になり、リモート派遣、を必要とせずにローカルから戻っているGET、モードをコピーし、これの利点はどこコピーモードもあります。

レプリケーションモードを設定します

我々はInfinispanサーバーを追加する必要がコピーモードで配置されたクラスタバッファに属するInfinispanコピーモード、特にJDG /スタンドアロン/設定/ clustered.xmlを編集し、キャッシュコンテナを、以下、バッファ容器、複製、キャッシュに追加されました。また、キャッシュ・クラスタ構成で、JGroupsのは合理的な構成でなければならない、Infinispanのクラスタキャッシュ使用してJGroupsは、データをコピーします。

<cache-container name="local" default-cache="default" >
    <replicated-cache name="default" mode="{SYNC/ASYNC}" start="EAGER">
        <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false" />
        <transaction mode="NONE" />
    </replicated-cache>
</cache-container>

複製されたキャッシュによって複製されたキャッシュの構成情報要素:

  • 名前はキャッシュの名前を定義し、キャッシュを一意に識別されます
  • これは、レプリケーション・キャッシュのモードを定義し、有効な値SYNC(同期)とASYNC(非同期)
  • バッファ容器がEAGERに開始された場合、バッファ容器のインスタンスを起動するデフォルトの開始バッファは、有効な値は、キャッシュ・インスタンスを起動し、EAGERまたはLAZY可能かどうかを決定する、LAZYロードのみ要求されたときに言いました
また、我々は、設定ファイルを指定する必要がInfinispanのロード中に、コピーモードキャッシュローディングのCacheManager例を使用して、APIによってInfinispan、次の例では、プロファイリングすることです:

<clustering mode="repl">
    <sync replTimeout="${TIME}" />
    <stateTransfer chunkSize="${SIZE}" fetchInMemoryState="{true/false}" awaitInitialTransfer="{true/false}" timeout="${TIME}" />
    <transport clusterName="${NAME}" distributedSyncTimeout="${TIME}" strictPeerToPeer="{true/false}" transportClass="${CLASS}" />
</clustering>

モード属性クラスタリング要素は、クラスタのキャッシュコピーモード(REPL)を定義します。

replTimeoutプロパティシンク要素は、輸送幸運を待っているの最大タイムアウトを指定します。タイムアウト期間がまだリモートディスパッチの確認を受信して​​いない場合は、例外がスローされます。

stateTransfer要素は、クラスタ状態遷移を定義する方法を完了すると、状態遷移は、クラスタノードの葉に発生した場合、または新しいノードが追加されます。この要素は次の属性があります。

  • 属性値は、属性値が0に等しい場合よりも小さくなり、0より大きく、キャッシュの数のエントリの数が属性バッチに設定されている場合、チャンクは、バッチ処理キャッシュエントリの数のサイズを定義し、バッチが無効になっています
  • 属性値がtrueの場合fetchInMemoryState、キャッシュ要求キャッシュ内で時間インスタンスの周りのデータは、衝撃荷重バッファの開始時刻
  • 属性値がawaitInitialTransfer fetchInMemoryState真である場合、キャッシュは、隣接するインスタンスを取得するまで、awaitInitialTransferプロパティはブロックを輸送する第一CacheManager.getCache()メソッドは、データ・キャッシュを可能にします。このプロパティは、分散モードとコピーモードに適用され、デフォルトはtrueです
  • リターンが隣接ノードタイムアウト期間内に受信されない場合、タイムアウトは、最大待ち時間データ取得タイムアウト隣接キャッシュ・インスタンスを定義ミリ秒、キャッシュローダが解除され、対応する例外がスローされます
輸送要素は、トランスポート・コンフィギュレーション・キャッシュデータであり、それは次のプロパティがあります。

  • clusterNameのクラスタの名前を定義し、クラスタノードのみ、同じ名前を定義するクラスタに参加することができるように、Infinispanデータグリッドを構築します
  • distributedSyncTimeoutは、状態交換、分布及びリアルタイムハッシュキャッシュエントリことを確実にするために、分散ロック時間を取得し、この分散キャッシュ・インスタンス・ロックを待っている定義します
  • 例外をスローし、キャッシュが存在例ではない場合は、コピー操作が失敗し、trueに設定されている場合strictPeerToPeerは、falseに設定した場合、キャッシュは、本実施例ではない場合、操作は無視コピーを失敗し、単純なロギングを行います
  • クラスは、送信バッファを表す定義transportClass

コピーモードの非同期および同期レプリケーション

レプリケーションモードのメッシュノード間のデータレプリケーションは非同期でできるも同期させることができ、我々は、アプリケーションの独自のニーズに応じて選択することができます。

複製輸送すべてのノードが受信していない、ノード上のすべてのノードに変更または追加されたデータを更新するまで、スレッド(PUT動作)ブロッキング確認操作が完了し、要求スレッドので、複製の整合性を保証するために、待機状態で搬送されてきました。

非同期および同期レプリケーションレプリケーション代わりに、クライアントの要求スレッド相対搬送速度は、他のメッシュノードが確認応答メッセージを返信するまで待つ必要はありません。非同期レプリケーションは、非同期レプリケーションは、トランザクションの終了を運ぶこのクライアントが成功したことが起こりますが、1つのノードのトランザクションの障害であるとことも、コピー操作がバックグラウンドで実行され、ログに記録された時に発生するレプリケーションエラーを実行しますすべてのデータが完全に他のノードに複製されません。

いくつかの例では、このような現象は、非同期レプリケーションを使用して、キャッシュ・コンフィギュレーションを発生することがあり、現実は同期復帰を待ってブロックされ、Infinispan動作のいくつかは、このような状態の交換として、同期しているので、それは、これらの操作は常に同期され、関係なく、構成の非同期または同期です。我々は、状態の同期を使用せずに交換を行うために、次の方法を使用することができます。

  • 状態を取得する必要がある場合、リモート・ノードのステータスをロードClusteredCacheLoaderを使用して、状態の交換を禁止します
  • REPL_SYNC状態を切り替えることができる非同期非同期API(例えばcache.putAsync(K、V)))を用いて、状態交換に使用しました
  • 状態交換REPL_SYNCで使用、複製キューの使用を必要とする、すべてのリモートディスパッチが同期しているが、クライアントはブロックすることはできません。私たちは、このアプローチがあるお勧めします

レプリケーションキュー

Infinispanのコピーモードは、他のノードへの変更をコピーするには、レプリケーションキュー、キャッシュエントリを使用します。次のプロパティを使用してコピーキュー:

  • 以前に設定された時間間隔
  • コピーされたキュー・エレメントのサイズ
  • あらかじめ設定された時間間隔と組み合わせることで、キュー要素の複製のサイズを超えて

レプリケーションキューは、このようにパフォーマンスが向上し、コピー数を減らし、一括コピー、コピーのない単一のものを介して、キャッシュエントリに複製、複製キューを確保することとしております。コピーと非同期レプリケーションキューは、一般的に一緒に使用されます。レプリケーションキューを使用して、クライアントの要求は、他のノードが戻るのを待ってブロックされていません。コピーキューは、主な欠点は、複製が定期的に行われ、キューのこの特定のサイズの大きさが予め設定された間隔に応じてということであるとき。これは、コピーのタイムリーな伝送を行いますメッセージキューを使用していない、もちろん、より多くの場合、キュー時間内のメッセージのバックログの一部を引き起こす可能性があります。

レプリケーション・キュー・構成例を使用して、次のように:

<replicated-cache name="asyncCache"  start="EAGER"  mode="ASYNC" batching="false" indexing="NONE" queue-size="1000" queue-flush-interval="500">
	...
</replicated-cache>

レプリケーションは、非同期レプリケーションキューとして使用され、キューのサイズが1000で、設定した時間間隔は500ミリ秒です。

故障モード

故障モードは、クラスタ化されたキャッシュですが、実際には、クラスタは、様々なノード間のすべてのデータを共有しませんが、単に古くなったデータであってもよいノードの除去から実行します。そのようなデータベース中に存在する他の永久記憶装置は、モードは、典型的にはこのように各状態を読み出す必要性を防止する、データベースとしてInfinispanに基づいて、システムの頻繁な読み出し動作、キャッシュを最適化するために使用されていることを、意味があるのみこのキャッシュモードデータベースへのアクセス。キャッシュが無効ではなく、複製のために構成されている場合、データは、1つのノードに変更されるたびに、クラスタ内の他のノードは、データが今や陳腐であり、キャッシュから追い出されるべきであることを知らせるメッセージを受信します。


図3 Infinispanの故障モード

図示4台のInfinispanサーバ3は、4つのノードにデータグリッドを構築するように、我々は、他のノードにデータ・K / V_newサーバ1を加える(サーバ2、サーバ3、サーバ4は)メッセージ、キーを受信しますKの値に対応するデータがサーバ2 K / V_oldにキャッシュから追い出され、時代遅れです。共有キャッシュ・ロードを使用して、すべてのノードがリモート・キャッシュが変更されたデータを取得する原因となります故障モード、。これの利点は2つある:キャッシュ・データ・コピーと比較し、ネットワークトラフィックが最小化され、ネットワークの圧力にのみ無効化メッセージが非常に小さいコピーし、クラスタ内の他のノード変更をロードする怠惰な方法でロードされたデータをロードします必要なデータのみ取得により。キャッシュ無効化メッセージが変更されたデータを送信した後にのみ、キャッシュデータは、バッチプロセスまたはトランザクションで変更することができ、トランザクションの制限には、送信失敗メッセージとバッチ処理ではありません。通常、エラーメッセージ正常に送信されたキャッシュデータを変更した後。これは全体としてではなく、あたりの変更の無効化トランザクション情報として、通常、より効率的です。

故障モードの設定

クラスタバッファInfinispanの故障モード、我々は特に/ clustered.xml JDG /スタンドアロン/設定を編集し、次のような構成のキャッシュコンテナを追加する必要がInfinispan故障モードコンフィギュレーションサーバに属する、緩衝容器無効 - キャッシュに追加されました。また、キャッシュ・クラスタ構成で、JGroupsのは合理的な構成にする必要があり、故障モードは、JGroupsのは、無効化メッセージをコピーして使用しています。

<cache-container name="local" default-cache="default" >
    <invalidated-cache name="default" mode="{SYNC/ASYNC}" start="EAGER">
        <locking isolation="NONE" acquire-timeout="30000" concurrency-level="1000" striping="false" />
        <transaction mode="NONE" />
    </invalidated-cache>
</cache-container>

以下の情報によって無効化、キャッシュ構成要素の故障モード:

  • 名前はキャッシュの名前を定義し、キャッシュを一意に識別されます
  • 故障モードは、メッセージ再生モード、SYNC(同期)とASYNC(非同期)の有効な値を定義します
  • バッファ容器がEAGERに開始された場合、バッファ容器のインスタンスを起動するデフォルトの開始バッファは、有効な値は、キャッシュ・インスタンスを起動し、EAGERまたはLAZY可能かどうかを決定する、LAZYロードのみ要求されたときに言いました
また、我々は、設定ファイルを指定する必要がInfinispanのロード中に、故障モードキャッシュローディングのCacheManager例を使用して、APIによってInfinispan、次の例では、プロファイリングすることです:

<clustering mode="inv">
    <sync replTimeout="${TIME}" />
    <stateTransfer chunkSize="${SIZE}" fetchInMemoryState="{true/false}" awaitInitialTransfer="{true/false}" timeout="${TIME}" />
    <transport clusterName="${NAME}" distributedSyncTimeout="${TIME}" strictPeerToPeer="{true/false}" transportClass="${CLASS}" />
</clustering>

モード属性クラスタリング要素は、クラスタキャッシュ故障モード(INV)を定義します。replTimeoutプロパティシンク要素は、輸送幸運を待っているの最大タイムアウトを指定します。タイムアウト期間がまだリモートディスパッチの確認を受信して​​いない場合は、例外がスローされます。stateTransfer要素は、クラスタ状態遷移を定義する方法を完了すると、状態遷移は、クラスタノードの葉に発生した場合、または新しいノードが追加されます。この要素は次の属性があります。

  • 属性値は、属性値が0に等しい場合よりも小さくなり、0より大きく、キャッシュの数のエントリの数が属性バッチに設定されている場合、チャンクは、バッチ処理キャッシュエントリの数のサイズを定義し、バッチが無効になっています
  • 属性値がtrueの場合fetchInMemoryState、キャッシュ要求キャッシュ内で時間インスタンスの周りのデータは、衝撃荷重バッファの開始時刻
  • 属性値がawaitInitialTransfer fetchInMemoryState真である場合、キャッシュは、隣接するインスタンスを取得するまで、awaitInitialTransferプロパティはブロックを輸送する第一CacheManager.getCache()メソッドは、データ・キャッシュを可能にします。このプロパティは、分散モードとコピーモードに適用され、デフォルトはtrueです
  • リターンが隣接ノードタイムアウト期間内に受信されない場合、タイムアウトは、最大待ち時間データ取得タイムアウト隣接キャッシュ・インスタンスを定義ミリ秒、キャッシュローダが解除され、対応する例外がスローされます
輸送要素は、トランスポート・コンフィギュレーション・キャッシュデータであり、それは次のプロパティがあります。

  • clusterNameのクラスタの名前を定義し、クラスタノードのみ、同じ名前を定義するクラスタに参加することができるように、Infinispanデータグリッドを構築します
  • distributedSyncTimeoutは、状態交換、分布及びリアルタイムハッシュキャッシュエントリことを確実にするために、分散ロック時間を取得し、この分散キャッシュ・インスタンス・ロックを待っている定義します
  • 例外をスローし、キャッシュが存在例ではない場合は、コピー操作が失敗し、trueに設定されている場合strictPeerToPeerは、falseに設定した場合、キャッシュは、本実施例ではない場合、操作は無視コピーを失敗し、単純なロギングを行います
  • クラスは、送信バッファを表す定義transportClass

非同期および同期

故障故障モード動作は、同期、または非同期にすることができます。非同期の無効化が異なると失敗メッセージをブロードキャストしているが、ブロックしない、クラスタのすべてのノードがすべての戻り障害情報を受信するまでコピーモードと同様に、同期失敗ブロッキング送信失敗メッセージスレッドは、すべてのノードの故障データが追い出さそして、の応答を待ちます。

L1キャッシュ

繰り返し繰り返し、長距離電話を防ぐために、リモート呼び出して発生の複製を作成し、GET、我々はL1キャッシュを有効にする必要があります。時間(設定可能)の非常に短い期間にローカルに保存されている輸送遠隔リターンのL1キャッシュの値は、その繰り返しGET動作を繰り返しリモート呼び出しが発生することはありません。図4、あなたはL1キャッシュを有効にした場合、その後の同じサーバ3は、キー操作が任意の長距離通話にはなりませんGET。


4 L1キャッシュ図。

L1要素は次の属性が含まれます。

  • L1キャッシュが有効になっている有効
  • 寿命は、リモート・ローカル時間に保存された輸送します

L1キャッシュは常に性能に寄与していない、L1キャッシュが消費性能をオンし、キャッシュ・エントリ上の任意のノードが更新され、対応する無効なメッセージは、マルチキャストの方法で他のノードに送信する必要がある、他のノードは受信しますキャッシュエントリのL1キャッシュに無効メッセージは、このようにネットワーク負荷を増大させる、無効です。大規模なキャッシュエントリがL1キャッシュに存在する場合には、大量のメモリを消費するL1キャッシュとそれがために、パフォーマンスを向上させる手助けを保証するためにL1キャッシュ性能試験を通過するための特定の必要性を開くために、二重に分散キャッシュモードでのエントリの一部を読み取るために適しているだろうあなたのシナリオ。

これまでのところ、我々はキャッシュ・クラスタ(分散モード、コピーモード、故障モード)と、ローカルキャッシュを議論してきた、JBossのシリーズ三〇から二は、実験的試験は、上記の理論を検証して、上記の内容を説明します。



ます。https://my.oschina.net/iwuyang/blog/197214で再現

おすすめ

転載: blog.csdn.net/weixin_33835690/article/details/91897427