2015-06-03 15 views
5

(non riuscivo a trovare una buona fonte per spiegare questo, quindi se è disponibile altrove, si può solo punto me si)Hazelcast: Domande riguardanti multi-nodo consistenza

  1. Hazelcast replica i dati su tutti i nodi in gruppi. Quindi, se i dati vengono modificati in uno dei nodi, il nodo aggiorna la propria copia e quindi la diffonde ad altri nodi?

  2. Ho letto da qualche parte che ogni dato è di proprietà di un nodo, in che modo Hazelcast determina il proprietario? Il proprietario è determinato per base dati o per chiave nella struttura dati?

  3. L'Hazelcast segue il principio "alla fine coerente"? (Quando i dati vengono propagati attraverso i nodi, potrebbe esserci una piccola finestra durante la quale i dati potrebbero essere incoerenti tra i nodi)

  4. Come vengono gestiti i conflitti? (Due nodi aggiornano lo stesso valore-chiave contemporaneamente)

risposta

8
  1. Hazelcast non si replica (con eccezione del ReplicatedMap, ovviamente ;-)) ma dati partizioni. Ciò significa che hai un nodo che possiede una determinata chiave. Tutti gli aggiornamenti a quella chiave andranno al proprietario e lui notificherà possibili aggiornamenti.

  2. Il proprietario è determinato hashing coerente con la seguente formula:

partitionId = hash(serialize(key)) % partitionCount

  1. Poiché v'è un solo proprietario per tasto non è alla fine coerente ma coerente ogni volta che vengono restituite le operazioni di muting. Tutte le seguenti operazioni di lettura vedranno il nuovo valore. In normali circostanze operative. Quando si verifica un qualsiasi tipo di errore (rete, host, ...), scegliamo la disponibilità rispetto alla coerenza e potrebbe accadere che un backup non ancora aggiornato venga riattivato (specialmente se si utilizzano backup asincroni).

  2. I conflitti possono verificarsi dopo la divisione cerebrale quando il cluster diviso si ri-unisce. In questo caso è necessario configurare (o utilizzare quello predefinito) MergePolicy per definire il comportamento su come gli elementi in conflitto vengono uniti o quale dei due vince.

+1

Grazie per la risposta. Ho una domanda di follow-up. Supponiamo che ci sia un nodo - nodo A. 1. Ora un altro nodo B si unisce al cluster e inserisce una mappa con alcuni valori-chiave. Immagino che B possegga la mappa e le chiavi che ha inserito. 2. A questo punto B esce dal cluster. Hazelcast replicherà ora le chiavi in ​​A, che è l'unico nodo rimanente. 3. Ora C si unisce al cluster e legge i tasti. Hazelcast recupera i valori-chiave da A. È giusto? – gammay

+2

Poiché la tabella delle partizioni cambia ogni volta che un nodo si unisce/lascia i dati verranno migrati nuovamente tra i nodi del cluster. Quindi un nodo non possiede le sue chiavi put ma le chiavi sono sempre distribuite. – noctarius