Comprendre le facteur de réplication de cassandra par rapport au niveau de cohérence

Je veux clarifier le concept très basique du facteur de réplication et du niveau de cohérence dans Cassandra. Très apprécier si quelqu'un peut fournir une réponse aux questions ci-dessous.

Facteur de réplication RF RC-cohérence de lecture Cohérence WC-écriture

2 nœuds cassandra (Ex: A, B) RF=1, RC=un, WC=un ou un

  • puis-je écrire des données dans le nœud A et lire à partir du nœud B ?
  • que se passera-t-il si A tombe ?

3 nœuds cassandra (Ex: A, B, C) RF = 2, RC=QUORUM, WC = QUORUM

  • puis-je écrire des données dans le nœud A et lire à partir du nœud C ?
  • que se passera-t-il si le nœud A tombe en panne ?

3 nœuds cassandra (Ex: A, B, C) RF=3, RC = QUORUM, WC = QUORUM

  • puis-je écrire des données dans le nœud A et lire à partir du nœud C ?
  • que se passera-t-il si le nœud A tombe en panne ?
50
demandé sur Alexis Wilke 2014-07-05 19:26:01

3 réponses

Bref résumé: le facteur de réplication décrit le nombre de copies de vos données. Niveau de cohérence décrit le comportement vu par le client. Peut-être il ya une meilleure façon de catégoriser ces.

Par exemple, vous pouvez avoir un facteur de réplication de 2. Lorsque vous écrivez, deux copies seront toujours stockées, en supposant que suffisamment de nœuds sont en place. Quand un nœud est en panne, les Écritures pour ce nœud sont cachées et écrites quand il revient, à moins qu'il ne soit en panne assez longtemps pour que Cassandra décide qu'il est parti pour de bon.

Maintenant, dites dans cet exemple que vous écrivez avec un niveau de cohérence de un. Le client recevra un accusé de réception de succès après une écriture sur un nœud, sans attendre la seconde écriture. Si vous avez écrit avec un CL de tous, l'accusé de réception au client attendra jusqu'à ce que les deux copies soient écrites. Il y a beaucoup d'autres options de niveau de cohérence, trop nombreuses pour couvrir toutes les variantes ici. Lisez le document Datastax , cependant, il explique bien ils.

Dans le même exemple, si vous lisez avec un niveau de cohérence de un, la réponse sera envoyée au client après qu'une seule réplique ait répondu. Une autre réplique peut avoir des données plus récentes, auquel cas la réponse ne sera pas à jour. Dans de nombreux contextes, c'est tout à fait suffisant. Dans d'autres, le client aura besoin des informations les plus à jour, et vous utiliserez un niveau de cohérence différent sur la lecture-peut-être un niveau tout. De cette façon, la cohérence de Cassandre et d'autres les bases de données post-relationnelles sont réglables d'une manière que les bases de données relationnelles ne le sont généralement pas.

Revenons maintenant à vos exemples.

Exemple un: oui, vous pouvez écrire dans A et lire à partir de B, Même si B n'a pas sa propre réplique. B demandera A pour le compte de votre client. Cela est également vrai pour vos autres cas où les nœuds sont tous en place. Quand ils sont tous en place, vous pouvez écrire à l'un et lire à partir d'un autre.

Pour les Écritures, avec WC = ONE, si le nœud de la réplique unique est est celui auquel vous êtes connecté, l'écriture réussira. Si c'est pour l'autre nœud, l'écriture échouera. Si vous en utilisez, l'écriture réussira, en supposant que vous parlez au nœud qui est en place. Je pense que vous devez également avoir laissé entendre handoff activé pour cela. Le nœud vers le bas obtiendra les données plus tard, et vous ne pourrez pas les lire avant que cela ne se produise, même pas à partir du nœud qui est en place.

Dans les deux autres exemples, le facteur de réplication affectera le nombre de copies éventuellement écrites, mais n'affecte pas le comportement du client au-delà de ce que j'ai décrit ci-dessus. Le QUORUM affectera le comportement du client en ce sens que vous devrez avoir un nombre suffisant de nœuds et répondre aux Écritures et aux lectures. Si vous avez de la chance et qu'au moins (nœuds/2) + 1 nœuds sont hors des nœuds dont vous avez besoin, alors les Écritures et les lectures réussiront. Si vous n'avez pas assez de nœuds avec des répliques, les lectures et les Écritures échoueront. Dans l'ensemble, certaines lectures et écritures de QUORUM peuvent réussir si un nœud est en panne, en supposant que ce nœud est soit pas nécessaire pour stocker votre réplique, ou si sa panne laisse encore assez de nœuds de réplique disponibles.

82
répondu Don Branson 2014-07-06 01:51:16

Découvrez cette calculatrice simple qui vous permet de simuler différents scénarios:

Http://www.ecyrd.com/cassandracalculator/

Par exemple avec 2 nœuds, un facteur de réplication de 1, Read consistency = 1 et write consistency = 1:

Your reads are consistent 
You can survive the loss of no nodes. 
You are really reading from 1 node every time. 
You are really writing to 1 node every time. 
Each node holds 50% of your data.
38
répondu bcattle 2015-07-01 23:49:50

Ce webform vous permet d'essayer différentes valeurs pour votre cluster Apache Cassandra et de voir quel est l'impact sur votre application.

-1
répondu David Donari 2017-07-12 13:59:08