Niveaux de cohérence d’Apache Cassandra et Azure Cosmos DB for Apache Cassandra

S’APPLIQUE À : Cassandra

Contrairement à Azure Cosmos DB, Apache Cassandra ne fournit pas en mode natif des garanties de cohérence précises. Au lieu de cela, Apache Cassandra fournit un niveau de cohérence d’écriture et un niveau de cohérence de lecture, pour permettre les compromis de haute disponibilité, de cohérence et de latence. Lors de l’utilisation d’Azure Cosmos DB for Cassandra :

  • Le niveau de cohérence d’écriture d’Apache Cassandra est mappé au niveau de cohérence par défaut configuré sur votre compte Azure Cosmos DB. La cohérence d’une opération d’écriture ne peut pas être changée en fonction de la demande.
  • Azure Cosmos DB mappe de manière dynamique le niveau de cohérence de lecture spécifié par le pilote client Cassandra. Le niveau de cohérence est mappé à l’un des niveaux de cohérence Azure Cosmos DB configurés dynamiquement sur une demande de lecture.

Écritures multirégions et écritures dans une seule région

La base de données Apache Cassandra est un système multimaître par défaut qui n’offre pas d’option prête à l’emploi pour les écritures dans une seule région avec la réplication multirégion pour les lectures. Toutefois, Azure Cosmos DB fournit une capacité clé en main d’avoir des configurations dans une seule région ou multirégions. L’un des avantages de la possibilité de choisir une configuration d’écriture dans une seule région pour plusieurs régions est d’éviter des conflits entre régions, et la possibilité de maintenir une cohérence forte dans plusieurs régions.

Avec les écritures dans une seule région, vous pouvez maintenir une cohérence forte, tout en conservant un niveau de haute disponibilité entre les régions avec le basculement géré par le service. Dans cette configuration, vous pouvez toujours exploiter la localité des données pour réduire la latence de lecture en passant à la cohérence finale en fonction de la demande. Outre ces fonctionnalités, la plateforme Azure Cosmos DB propose également l’option de redondance de zone lors de la sélection d’une région. Par conséquent, contrairement à Apache Cassandra natif, Azure Cosmos DB vous permet de naviguer dans le spectre de compromis du théorème CAP avec plus de granularité.

Correspondance des niveaux de cohérence

La plateforme Azure Cosmos DB fournit un ensemble de cinq paramètres de cohérence orientés cas d’utilisation en entreprise, bien définis et adaptés à la réplication. Les compromis de ces paramètres de cohérence sont définis par les théorèmes CAP et PACLC. Comme cette approche diffère considérablement d’Apache Cassandra, nous vous recommandons de prendre le temps d’examiner et de comprendre la cohérence d’Azure Cosmos DB. Vous pouvez également consulter ce bref guide vidéo pour comprendre les paramètres de cohérence dans la plateforme Azure Cosmos DB. Le tableau suivant illustre les mappages possibles entre Apache Cassandra et les niveaux de cohérence Azure Cosmos DB lors de l’utilisation d’API pour Cassandra. Ce tableau montre les configurations pour les lectures dans une seule région ou multirégions avec des écritures dans une seule région et multirégions.

Mappages

Notes

Il ne s’agit pas de mappages exacts. Nous avons plutôt fourni les analogues les plus proches à Apache Cassandra et levé l’ambiguïté sur les différences qualitatives de la colonne la plus à droite. Comme mentionné ci-dessus, nous vous recommandons de consulter les paramètres de cohérence d’Azure Cosmos DB.

Cohérence d’écriture ALL, EACH_QUOROM, QUOROM, LOCAL_QUORUM ou THREE dans Apache Cassandra

Cohérence de lecture Apache Lecture à partir de Niveau de cohérence Azure Cosmos DB le plus proche des paramètres de lecture/écriture Apache Cassandra
ALL Région locale Strong
EACH_QUOROM Région locale Strong
QUOROM Région locale Strong
LOCAL_QUORUM Région locale Strong
LOCAL_ONE Région locale Eventual
ONE Région locale Eventual
TWO Région locale Strong
THREE Région locale Strong

Contrairement à Apache et DSE Cassandra, Azure Cosmos DB valide durablement une écriture de quorum par défaut. Au moins trois nœuds sur quatre (3/4) valident l’écriture sur le disque, et PAS seulement un journal de validation en mémoire.

Cohérence d’écriture ONE, LOCAL_ONE ou ANY dans Apache Cassandra

Cohérence de lecture Apache Lecture à partir de Niveau de cohérence Azure Cosmos DB le plus proche des paramètres de lecture/écriture Apache Cassandra
ALL Région locale Strong
EACH_QUOROM Région locale Eventual
QUOROM Région locale Eventual
LOCAL_QUORUM Région locale Eventual
LOCAL_ONE Région locale Eventual
ONE Région locale Eventual
TWO Région locale Eventual
THREE Région locale Eventual

L’API Azure Cosmos DB for Cassandra valide toujours durablement une écriture de quorum par défaut. Par conséquent, toutes les cohérences de lecture peuvent être utilisées.

Cohérence d’écriture TWO dans Apache Cassandra

Cohérence de lecture Apache Lecture à partir de Niveau de cohérence Azure Cosmos DB le plus proche des paramètres de lecture/écriture Apache Cassandra
ALL Région locale Strong
EACH_QUOROM Région locale Strong
QUOROM Région locale Strong
LOCAL_QUORUM Région locale Strong
LOCAL_ONE Région locale Eventual
ONE Région locale Eventual
TWO Région locale Eventual
THREE Région locale Strong

Azure Cosmos DB n’a aucune notion de cohérence d’écriture sur seulement deux nœuds. Par conséquent, nous traitons cette cohérence comme le quorum dans la plupart des cas. Pour la cohérence de lecture TWO, cette cohérence équivaut à écrire avec QUOROM et à lire à partir de ONE.

Cohérence d’écriture Serial ou Local_Serial dans Apache Cassandra

Cohérence de lecture Apache Lecture à partir de Niveau de cohérence Azure Cosmos DB le plus proche des paramètres de lecture/écriture Apache Cassandra
ALL Région locale Strong
EACH_QUOROM Région locale Strong
QUOROM Région locale Strong
LOCAL_QUORUM Région locale Strong
LOCAL_ONE Région locale Eventual
ONE Région locale Eventual
TWO Région locale Strong
THREE Région locale Strong

La série s’applique uniquement aux transactions légères. Azure Cosmos DB suit un algorithme durablement validé par défaut. Par conséquent, la cohérence Serial est similaire au quorum.

Autres régions pour l’écriture dans une seule région

Azure Cosmos DB facilite cinq paramètres de cohérence, y compris la cohérence forte, dans plusieurs régions où les écritures à une seule région sont configurées. Cette facilité est assurée tant que les régions se trouvent à moins de 3 000 kilomètres les unes des autres.

Azure Cosmos DB ne dispose pas d’un mappage applicable à Apache Cassandra, car tous les nœuds/régions sont des écritures et une garantie de cohérence forte n’est pas possible dans toutes les régions.

Autres régions pour l’écriture multirégion

Azure Cosmos DB ne facilite que quatre paramètres de cohérence, eventual, consistent prefix, session et bounded staleness, dans plusieurs régions où l’écriture multirégion est configurée.

Apache Cassandra ne fournit une cohérence éventuelle que pour les lectures dans d’autres régions, quels que soient les paramètres.

Remplacements dynamiques pris en charge

Paramètre du compte Azure Cosmos DB Valeur de remplacement dans la demande client Effet du remplacement
Strong All Aucun effet (reste strong)
Strong Quorum Aucun effet (reste strong)
Strong LocalQuorum Aucun effet (reste strong)
Strong Two Aucun effet (reste strong)
Strong Three Aucun effet (reste strong)
Strong Serial Aucun effet (reste strong)
Strong LocalSerial Aucun effet (reste strong)
Strong One Cohérence modifiée en Eventual
Strong LocalOne Cohérence modifiée en Eventual
Strong Any Non autorisé (erreur)
Strong EachQuorum Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix All Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix Quorum Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix LocalQuorum Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix Two Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix Three Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix Serial Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix LocalSerial Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix One Cohérence modifiée en Eventual
Bounded staleness, sessionou consistent prefix LocalOne Cohérence modifiée en Eventual
Bounded staleness, sessionou consistent prefix Any Non autorisé (erreur)
Bounded staleness, sessionou consistent prefix EachQuorum Non autorisé (erreur)

Mesures

Si votre compte Azure Cosmos DB est configuré avec un niveau de cohérence autre que la cohérence forte, passez en revue la métrique Probabilistically Bounded Staleness (PBS). La métrique capture la probabilité que vos clients obtiennent des lectures fortes et cohérentes pour vos charges de travail. Cette métrique est exposée dans le Portail Azure. Pour plus d’informations sur la métrique PBS, consultez Surveiller la métrique PBS (Probabilistical Bounded Staleness).

La métrique Probabilistically Bounded Staleness montre à quel point votre cohérence éventuelle est possible. Cette métrique fournit une idée de la fréquence à laquelle vous pouvez obtenir une cohérence plus forte que le niveau de cohérence que vous avez configuré sur votre compte Azure Cosmos DB. En d’autres termes, vous pouvez voir la probabilité (mesurée en millisecondes) d’obtenir des lectures cohérentes pour une combinaison de régions d’écriture et de lecture.

Cohérence globale forte pour les demandes d’écriture dans Apache Cassandra

Apache Cassandra, le paramètre de EACH_QUORUM ou QUORUM donne une cohérence forte. Lorsqu’une demande d’écriture est envoyée à une région, EACH_QUORUM conserve les données dans un nombre de nœuds de quorum dans chaque centre de données. Cette persistance nécessite que chaque centre de données soit disponible pour que l’opération d’écriture réussisse. QUORUM est légèrement moins restrictif, avec un certain nombre de nœuds QUORUM sur tous les centres de données nécessaires pour conserver les données avant de reconnaître que l’écriture a réussi.

Le graphique suivant illustre un paramètre de cohérence global fort dans Apache Cassandra entre deux régions, 1 et 2. Une fois les données écrites dans la région 1, l’écriture doit être conservée dans un nombre de nœuds de quorum dans la région 1 et la région 2 avant qu’un accusé de réception ne soit reçu par l’application.

Diagramme de la cohérence d’écriture globale dans Apache Cassandra.

Cohérence globale forte pour les demandes d’écriture dans Azure Cosmos DB for Apache Cassandra

Dans Azure Cosmos DB, la cohérence est définie au niveau du compte. Avec la cohérence Strong dans Azure Cosmos DB for Cassandra, les données sont répliquées de manière synchrone dans les régions de lecture du compte. Plus les régions du compte Azure Cosmos DB sont éloignées, plus la latence des opérations d’écriture cohérentes est élevée.

Diagramme de la cohérence d’écriture globale dans Azure Cosmos DB for Apache Cassandra.

Comment le nombre de régions affecte votre demande de lecture ou d’écriture :

  • Deux régions : avec une cohérence forte, quorum (N/2 + 1) = 2. Si la région de lecture tombe en panne, le compte ne peut plus accepter les écritures avec une cohérence forte, car un nombre de régions de quorum n’est pas disponible pour l’écriture à répliquer.
  • Trois régions ou plus : pour N = 3, quorum = 2. Si l’une des régions de lecture est hors service, la région d’écriture peut toujours répliquer les écritures dans un total de deux régions qui répondent aux exigences de quorum. De même, avec quatre régions, quorum = 4/2 + 1 = 3. Même si une région de lecture est indisponible, le quorum peut être atteint.

Notes

Si une cohérence mondialement forte est requise pour toutes les opérations d’écriture, la cohérence pour le compte Azure Cosmos DB for Cassandra doit être définie sur Strong. Le niveau de cohérence des opérations d’écriture ne peut pas être remplacé par un niveau de cohérence inférieur sur demande dans Azure Cosmos DB.

Cohérence plus faible pour les demandes d’écriture dans Apache Cassandra

Un niveau de cohérence ANY, ONE, TWO, THREE, LOCAL_QUORUM, Serial ou Local_Serial ? Prenons l’exemple d’une demande d’écriture avec LOCAL_QUORUM avec un RF de 4 dans un centre de données à six nœuds. Quorum = 4/2 + 1 = 3.

Diagramme de cohérence d’écriture non globale dans Apache Cassandra.

Cohérence plus faible pour les demandes d’écriture dans Azure Cosmos DB for Apache Cassandra

Lorsqu’une demande d’écriture est envoyée avec l’un des niveaux de cohérence inférieurs à Strong, une réponse de réussite est retournée dès que la région locale conserve l’écriture dans au moins trois réplicas sur quatre.

Diagramme de cohérence d’écriture non globale dans Azure Cosmos DB for Apache Cassandra.

Cohérence globale forte pour les demandes de lecture dans Apache Cassandra

Avec une cohérence EACH_QUORUM, une lecture cohérente peut être obtenue dans Apache Cassandra. Dans une configuration multirégion pour EACH_QUORUM, si le nombre de nœuds de quorum n’est pas atteint dans chaque région, la lecture échoue.

Diagramme de cohérence de lecture globale dans Apache Cassandra.

Cohérence globale forte pour les demandes de lecture dans Azure Cosmos DB for Apache Cassandra

La demande de lecture est traitée à partir de deux réplicas dans la région spécifiée. Étant donné que l’écriture a déjà pris en charge la persistance d’un nombre de régions de quorum (et toutes les régions si chaque région était disponible), la simple lecture à partir de deux réplicas dans la région spécifiée offre une cohérence forte. Cette cohérence forte nécessite que EACH_QUORUM soit spécifié dans le pilote lors de l’émission de la lecture sur une région pour le compte Cosmos DB, ainsi que la cohérence forte comme niveau de cohérence par défaut pour le compte.

Diagramme de cohérence de lecture globale dans Azure Cosmos DB for Apache Cassandra.

Cohérence forte locale dans Apache Cassandra

Une demande de lecture avec un niveau de cohérence TWO, THREE ou LOCAL_QUORUM nous donnera une cohérence de lecture forte à partir de la région locale. Avec un niveau de cohérence LOCAL_QUORUM, vous avez besoin d’une réponse de deux nœuds dans le centre de données spécifié pour une lecture réussie.

Diagramme de cohérence forte de lecture locale dans Apache Cassandra.

Cohérence forte locale dans Azure Cosmos DB for Apache Cassandra

Dans Azure Cosmos DB for Cassandra, disposer d’un niveau de cohérence TWO, THREE ou LOCAL_QUORUM apporte une cohérence forte locale à une demande de lecture. Étant donné que le chemin d’accès d’écriture garantit la réplication à un minimum de trois réplicas sur quatre, une lecture à partir de deux réplicas dans la région spécifiée garantit une lecture en quorum des données dans cette région.

Diagramme de cohérence forte de lecture locale dans Azure Cosmos DB for Apache Cassandra.

Cohérence éventuelle dans Apache Cassandra

Un niveau de cohérence LOCAL_ONE, One et ANY with LOCAL_ONE aboutira à une cohérence éventuelle. Cette cohérence est utilisée dans les cas où l’accent est mis sur la latence.

Diagramme de cohérence de lecture éventuelle dans Apache Cassandra.

Cohérence éventuelle dans Azure Cosmos DB for Apache Cassandra ?

Un niveau de cohérence LOCAL_ONE, ONE ou Any vous donnera une cohérence éventuelle. Avec une cohérence éventuelle, une lecture est traitée à partir d’un seul des réplicas dans la région spécifiée.

Diagramme de cohérence de lecture éventuelle dans Azure Cosmos DB for Apache Cassandra.

Remplacer le niveau de cohérence pour les opérations de lecture dans Azure Cosmos DB for Cassandra

Auparavant, le niveau de cohérence des demandes de lecture pouvait uniquement être remplacé par une cohérence inférieure à celle définie par défaut sur le compte. Par exemple, avec la cohérence forte (Strong) par défaut, les demandes de lecture peuvent être émises avec Strong par défaut et remplacées sur demande (si nécessaire) par un niveau de cohérence plus faible que Strong. Toutefois, les demandes de lecture n’ont pas pu être émises avec un niveau de cohérence remplacé supérieur à la valeur par défaut du compte. Un compte avec la cohérence éventuelle (Eventual) n’a pas pu recevoir les demandes de lecture avec un niveau de cohérence supérieur à Eventual (ce qui, dans les pilotes Apache Cassandra, se traduit par un niveau de cohérence TWO, THREE, LOCAL_QUORUM ou QUORUM).

Azure Cosmos DB for Cassandra facilite désormais le remplacement de la cohérence sur les demandes de lecture par une valeur supérieure à la cohérence par défaut du compte. Par exemple, avec la cohérence par défaut sur le compte Cosmos DB définie sur Eventual (équivalent Apache Cassandra de One ou ANY), les demandes de lecture peuvent être remplacées sur demande par LOCAL_QUORUM. Ce remplacement garantit qu’un nombre de réplicas de quorum dans la région spécifiée est consulté avant de retourner le jeu de résultats, comme requis par LOCAL_QUORUM.

Cette option évite également la nécessité de définir une cohérence par défaut supérieure à Eventual, quand elle est nécessaire uniquement pour les demandes de lecture.

Étapes suivantes

En savoir plus sur les niveaux de distribution et de cohérence globaux pour Azure Cosmos DB :