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 , session ou consistent prefix |
All |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
Quorum |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
LocalQuorum |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
Two |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
Three |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
Serial |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
LocalSerial |
Non autorisé (erreur) |
Bounded staleness , session ou consistent prefix |
One |
Cohérence modifiée en Eventual |
Bounded staleness , session ou consistent prefix |
LocalOne |
Cohérence modifiée en Eventual |
Bounded staleness , session ou consistent prefix |
Any |
Non autorisé (erreur) |
Bounded staleness , session ou 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.
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.
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
.
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.
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.
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.
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.
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.
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.
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.
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.