20.6.15. hotgitops Hash Functions
Red Hat Data Grid は一貫性のあるハッシュ機能を使用して、ハッシュホイールにノードを置き、同じ wheel にエントリーのキーを配置して、エントリーの場所を判断します。
Infinispan 4.2 以前では、ハッシュ領域は 10240 にハードコーディングされましたが 5.0 以降、ハッシュ領域は Integer.MAX_INT です。Hotgitops クライアントはデフォルトで特定のハッシュスペースを想定してはならないことに注意してください。ハッシュトポロジーの変更が検出されたときに毎回、この値は Hot336 プロトコルを介してクライアントに返信されます。
Hotgitops プロトコルを介して Red Hat Data Grid と対話する場合は、プラットフォームに依存しない動作を確保するために、キー(および値)がバイト配列であることが義務付けられます。そのため、バックエンド上のハッシュディストリビューションを認識している smart-clients は、プラットフォームに依存しない方法で、このようなバイトアレイキーのハッシュコードを計算できる必要があります。このため、Red Hat Data Grid で使用されるハッシュ関数はバージョン化され、文書化されるため、必要に応じて Java 以外のクライアントが再実装できます。
使用するハッシュ関数のバージョンは、ハッシュ関数のバージョンパラメーターとして HotTEMPLATES プロトコルにあります。
- バージョン 1(単一のバイト、0x01)は、Austin Appleby の MurmurHash 2.0 アルゴリズム、高速で非暗号化のハッシュが、優れたディストリビューション、競合、および有効な動作を示す高速で非暗号化ハッシュに基づいています。使用するアルゴリズムの特定バージョンは、大規模な CPU アーキテクチャーとリトルエンディアン CPU アーキテクチャーの両方で一貫した動作を可能にする、若干遅く、エンディアンに依存しないバージョンです。また、Red Hat Data Grid のバージョンは、ハッシュを -1 としてハードコーディングします。アルゴリズムの詳細については、Austin Appleby の MurmurHash 2.0 ページ を参照してください。その他の実装は、Wikipedia に記載されています。このハッシュ関数は、Infinispan 4.2.1 まで Hotgitops サーバーによって使用されるデフォルトのものです。Infinispan 5.0 以降、サーバーはハッシュバージョン 1 を使用しません。Infinispan 9.0 以降、クライアントはハッシュバージョン 1 を無視します。
- バージョン 2(単一バイト、0x02)、Infinispan 5.0 以降、Austin Appleby の MurmurHash 3.0 アルゴリズム を基にした新しいハッシュ関数がデフォルトで使用されます。ハッシュ関数の詳細は、この wiki を参照してください。2.0 と比較すると、パフォーマンスが向上します。Infinispan 7.0 以降、サーバーは HotRod 1.x クライアントにバージョン 2 のみを使用します。
- バージョン 3(単一バイト、0x03)、Infinispan 7.0 以降、デフォルトで新しいハッシュ関数が使用されます。この関数は wiki に基づいていますが、サーバーの ConsistentHash で使用されるハッシュセグメントも認識します。