7

(これを説明する適切な情報源が見つからなかったので、他の場所で入手できる場合は、それを指摘してください)

  1. Hazelcast は、クラスター内のすべてのノードにわたってデータを複製します。では、ノードの 1 つでデータが変更された場合、そのノードは自身のコピーを更新し、それを他のノードに伝播しますか?

  2. 各データがノードによって所有されていることをどこかで読みましたが、Hazelcast はどのように所有者を決定しますか? 所有者はデータ構造ごと、またはデータ構造内のキーごとに決定されますか?

  3. Hazelcast は「結果整合性」の原則に従っていますか? (データがノード間で伝播されている場合、ノード間でデータの一貫性が失われる小さなウィンドウが発生する可能性があります)

  4. 競合はどのように処理されますか? (2 つのノードが同じキー値を同時に更新します)

4

1 に答える 1

10
  1. Hazelcast は (ReplicatedMap を除いて、明らかに ;-)) 複製しませんが、データを分割します。つまり、特定のキーを所有するノードが 1 つあるということです。そのキーに対するすべての更新は所有者に送られ、所有者は更新の可能性を通知します。

  2. 所有者は、次の式を使用したコンシステント ハッシュによって決定されます。

partitionId = hash(serialize(key)) % partitionCount

  1. キーごとに所有者が 1 人しかいないため、結果的に一貫性はありませんが、変更操作が返されるたびに一貫性があります。以降のすべての読み取り操作で、新しい値が表示されます。通常の運用状況下。何らかの障害 (ネットワーク、ホストなど) が発生した場合、整合性よりも可用性を選択するため、まだ更新されていないバックアップが再アクティブ化される可能性があります (特に非同期バックアップを使用している場合)。

  2. スプリット クラスタが再マージされると、スプリット ブレインの後に競合が発生する可能性があります。この場合、MergePolicy を構成 (またはデフォルトのものを使用) して、競合する要素をマージする方法、または両方のどちらが勝つかについての動作を定義する必要があります。

于 2015-06-03T15:35:42.357 に答える