Niveles de coherencia de Apache Cassandra y Azure Cosmos DB for Apache Cassandra

SE APLICA A: Cassandra

A diferencia de Azure Cosmos DB, Apache Cassandra no proporciona de forma nativa garantías de coherencia definidas con precisión. En su lugar, Cassandra Apache proporciona un nivel de coherencia de escritura y de lectura para permitir los inconvenientes que representan la alta disponibilidad, coherencia, disponibilidad y latencia. Cuando se usa Azure Cosmos DB para Cassandra:

  • El nivel de coherencia de escritura de Apache Cassandra se asigna al nivel de coherencia predeterminado configurado en la cuenta de Azure Cosmos DB. No se puede cambiar la coherencia de una operación de escritura (CL) en cada solicitud.
  • Azure Cosmos DB asignará dinámicamente el nivel de consistencia de lectura especificado por el controlador de cliente de Cassandra. El nivel de coherencia se asignará a uno de los niveles de coherencia de Azure Cosmos DB configurados dinámicamente en una solicitud de lectura.

Escrituras en varias regiones frente a escrituras de región única

La base de datos de Apache Cassandra es un sistema que presenta de manera predeterminada una arquitectura multimaestro y que no proporciona una opción integrada para escrituras de región única con replicación en varias regiones para las lecturas. Sin embargo, Azure Cosmos DB proporciona la capacidad inmediata de disponer de configuraciones de escritura para una única región o para varias regiones. Una de las ventajas de poder elegir una configuración de escritura de región única en varias regiones es la prevención de escenarios de conflictos entre regiones y la opción de mantener una coherencia fuerte entre varias regiones.

Con las escrituras de región única, puede mantener una coherencia fuerte al tiempo que conserva un nivel de alta disponibilidad en todas las regiones gracias a la conmutación por error administrada por servicio. En esta configuración, todavía puede aprovechar la ubicación de los datos para reducir la latencia de lectura al degradar la coherencia final en función de cada solicitud. Además de estas capacidades, la plataforma Azure Cosmos DB también ofrece la opción de redundancia de zona al seleccionar una región. Por lo tanto, a diferencia de Apache Cassandra nativo, Azure Cosmos DB le permite recorrer la gama de ventajas e inconvenientes del teorema de CAP más detalladamente.

Asignación de niveles de coherencia

La plataforma Azure Cosmos DB proporciona un conjunto de cinco configuraciones de consistencia bien definidas y orientadas a los casos de uso empresarial con respecto a la replicación. Los inconvenientes de estas opciones de coherencia se definen mediante los teoremas CAP y PACLC. Dado que este enfoque difiere significativamente de Apache Cassandra, le recomendamos que dedique tiempo a revisar y comprender la consistencia de Azure Cosmos DB. Como alternativa, puede revisar esta breve guía de vídeo para comprender la configuración de coherencia en la plataforma Azure Cosmos DB. En la tabla siguiente se muestran las posibles asignaciones entre los niveles de coherencia de Apache Cassandra y de Azure Cosmos DB al usar la API para Cassandra. Esta tabla muestra configuraciones para una única región, lecturas en varias regiones con escrituras de región única y escrituras en varias regiones.

Asignaciones

Nota:

Estas no son asignaciones exactas. En su lugar, se han proporcionado las análogas más cercanas a Apache Cassandra y se ha eliminado la ambigüedad con todas las diferencias cualitativas de la columna situada más a la derecha. Como se mencionó anteriormente, se recomienda revisar la configuración de coherencia de Azure Cosmos DB.

Coherencia de escritura ALL, EACH_QUOROM, QUOROM, LOCAL_QUORUMo THREE en Apache Cassandra

Coherencia de lectura de Apache Lectura de Nivel de coherencia de Azure Cosmos DB más cercano a la configuración de lectura/escritura de Apache Cassandra
ALL Región local Strong
EACH_QUOROM Región local Strong
QUOROM Región local Strong
LOCAL_QUORUM Región local Strong
LOCAL_ONE Región local Eventual
ONE Región local Eventual
TWO Región local Strong
THREE Región local Strong

A diferencia de Apache y DSE Cassandra, Azure Cosmos DB confirma de forma duradera una escritura de cuórum de forma predeterminada. Al menos tres de cuatro nodos (3/4) confirman la escritura en el disco y NO solo un registro de confirmación en memoria.

Coherencia de escritura ONE, LOCAL_ONE, o ANY en Apache Cassandra

Coherencia de lectura de Apache Lectura de Nivel de coherencia de Azure Cosmos DB más cercano a la configuración de lectura/escritura de Apache Cassandra
ALL Región local Strong
EACH_QUOROM Región local Eventual
QUOROM Región local Eventual
LOCAL_QUORUM Región local Eventual
LOCAL_ONE Región local Eventual
ONE Región local Eventual
TWO Región local Eventual
THREE Región local Eventual

La API de Azure Cosmos DB para Cassandra siempre confirma de forma duradera una escritura de cuórum de manera predeterminada, por lo que se pueden usar todas las coherencias de lectura.

Coherencia de escritura TWO en Apache Cassandra

Coherencia de lectura de Apache Lectura de Nivel de coherencia de Azure Cosmos DB más cercano a la configuración de lectura/escritura de Apache Cassandra
ALL Región local Strong
EACH_QUOROM Región local Strong
QUOROM Región local Strong
LOCAL_QUORUM Región local Strong
LOCAL_ONE Región local Eventual
ONE Región local Eventual
TWO Región local Eventual
THREE Región local Strong

Azure Cosmos DB no tiene ninguna noción de coherencia de escritura en solo dos nodos, por lo que tratamos esta coherencia similar al cuórum para la mayoría de los casos. Para la consistencia de lectura TWO, esta consistencia es equivalente a escribir con QUOROM y leer desde ONE.

Coherencia de escritura Serial o Local_Serialen Apache Cassandra

Coherencia de lectura de Apache Lectura de Nivel de coherencia de Azure Cosmos DB más cercano a la configuración de lectura/escritura de Apache Cassandra
ALL Región local Strong
EACH_QUOROM Región local Strong
QUOROM Región local Strong
LOCAL_QUORUM Región local Strong
LOCAL_ONE Región local Eventual
ONE Región local Eventual
TWO Región local Strong
THREE Región local Strong

La serie solo se aplica a transacciones ligeras. Azure Cosmos DB sigue un algoritmo de compromiso duradero de manera predeterminada y, por lo tanto, la coherencia de Serial es similar al quórum.

Otras regiones para la escritura en una sola región

Azure Cosmos DB facilita cinco opciones de coherencia, incluidas las sólidas, en varias regiones donde se configuran las escrituras de una sola región. Esta facilitación se produce siempre y cuando las regiones estén dentro de 2.000 millas entre sí.

Azure Cosmos DB no tiene una asignación aplicable a Apache Cassandra, ya que todos los nodos o regiones son escrituras y una garantía de coherencia fuerte no es posible en todas las regiones.

Otras regiones para la escritura en varias regiones

Azure Cosmos DB solo facilita cuatro configuraciones de coherencia; eventual, consistent prefix, sessiony bounded staleness en varias regiones donde se configura la escritura en varias regiones.

Apache Cassandra solo proporcionaría coherencia final para las lecturas en otras regiones, independientemente de la configuración.

Invalidaciones dinámicas admitidas

Configuración de la cuenta de Azure Cosmos DB Invalidar el valor en la solicitud de cliente Efecto de invalidación
Strong All Sin efecto (permanece como strong)
Strong Quorum Sin efecto (permanece como strong)
Strong LocalQuorum Sin efecto (permanece como strong)
Strong Two Sin efecto (permanece como strong)
Strong Three Sin efecto (permanece como strong)
Strong Serial Sin efecto (permanece como strong)
Strong LocalSerial Sin efecto (permanece como strong)
Strong One Cambios de coherencia en Eventual
Strong LocalOne Cambios de coherencia en Eventual
Strong Any No permitido (error)
Strong EachQuorum No permitido (error)
Bounded staleness, sessiono consistent prefix All No permitido (error)
Bounded staleness, sessiono consistent prefix Quorum No permitido (error)
Bounded staleness, sessiono consistent prefix LocalQuorum No permitido (error)
Bounded staleness, sessiono consistent prefix Two No permitido (error)
Bounded staleness, sessiono consistent prefix Three No permitido (error)
Bounded staleness, sessiono consistent prefix Serial No permitido (error)
Bounded staleness, sessiono consistent prefix LocalSerial No permitido (error)
Bounded staleness, sessiono consistent prefix One Cambios de coherencia en Eventual
Bounded staleness, sessiono consistent prefix LocalOne Cambios de coherencia en Eventual
Bounded staleness, sessiono consistent prefix Any No permitido (error)
Bounded staleness, sessiono consistent prefix EachQuorum No permitido (error)

Métricas

Si su cuenta de Azure Cosmos DB está configurada con un nivel de consistencia distinto al de coherencia fuerte, revise la métrica Probabilistically Bounded Staleness (PBS). La métrica captura la probabilidad de que los clientes puedan obtener lecturas sólidas y coherentes para las cargas de trabajo. Esta métrica se expone en el Azure Portal. Para obtener más información sobre la métrica de PBS, consulte Supervisión de la métrica Probabilistically Bounded Staleness (PBS).

Probabilísticamente, la obsolescencia limitada muestra cómo de posible es la coherencia final. Esta métrica proporciona una visión general de la frecuencia con la que puede obtener una coherencia mayor que el nivel de coherencia que tiene configurado actualmente en su cuenta de Azure Cosmos DB. En otras palabras, puede ver la probabilidad (en milisegundos) de obtener lecturas con coherencia para una combinación de regiones de escritura y lectura.

Coherencia segura global para solicitudes de escritura en Apache Cassandra

Apache Cassandra, el valor de EACH_QUORUM o QUORUM proporciona una coherencia fuerte. Cuando se envía una solicitud de escritura a una región, EACH_QUORUM conserva los datos en un número de cuórum de nodos de cada centro de datos. Esta persistencia requiere que todos los centros de datos estén disponibles para que la operación de escritura se realice correctamente. QUORUM es ligeramente menos restrictivo, con un QUORUM número de nodos en todos los centros de datos necesarios para conservar los datos antes de reconocer que la escritura se ha realizado correctamente.

En el gráfico siguiente se muestra una configuración global de coherencia fuerte en Apache Cassandra entre dos regiones 1 y 2. Después de escribir los datos en la región 1, la escritura debe conservarse en un número de cuórum de nodos de la región 1 y la región 2 antes de que la aplicación reciba una confirmación.

Diagrama de la consistencia de escritura global en Apache Cassandra.

Coherencia global fuerte para las solicitudes de escritura en Azure Cosmos DB for Apache Cassandra

En la coherencia de Azure Cosmos DB se establece en el nivel de cuenta. Con la coherencia Strong en Azure Cosmos DB para Cassandra, los datos se replican de forma sincrónica en las regiones de lectura de la cuenta. Además de las regiones de la cuenta de Azure Cosmos DB, mayor será la latencia de las operaciones de escritura coherentes.

Diagrama de coherencia de escritura global en Azure Cosmos DB for Apache Cassandra.

Cómo afecta el número de regiones a la solicitud de lectura o escritura:

  • Dos regiones: con coherencia fuerte, cuórum (N/2 + 1) = 2. Por lo tanto, si la región de lectura deja de funcionar, la cuenta ya no puede aceptar escrituras con coherencia fuerte, ya que un número de cuórum de regiones no está disponible para que la escritura se replique.
  • Tres o más regiones: para N = 3, quorum = 2. Si una de las regiones de lectura está inactiva, la región de escritura todavía puede replicar las escrituras en un total de dos regiones que cumplan el requisito de cuórum. De forma similar, con cuatro regiones, quorum = 4/2 + 1 = 3. Incluso con una región de lectura inactiva, se puede cumplir el cuórum.

Nota:

Si se requiere una coherencia fuerte global para todas las operaciones de escritura, la coherencia de la cuenta de Azure Cosmos DB para Cassandra debe establecerse en Fuerte. El nivel de coherencia de las operaciones de escritura no se puede invalidar en un nivel de coherencia inferior por solicitud en Azure Cosmos DB.

Coherencia más débil para las peticiones de escritura en Apache Cassandra

¿Un nivel de consistencia de ANY, ONE, TWO, THREE, LOCAL_QUORUM, Serial o Local_Serial? Considere una solicitud de escritura con LOCAL_QUORUM con un RF de 4 en un centro de datos de seis nodos. Quorum = 4/2 + 1 = 3.

Diagrama de la coherencia de escritura no global en Apache Cassandra.

Coherencia más débil para las solicitudes de escritura en Azure Cosmos DB for Apache Cassandra

Cuando se envía una solicitud de escritura con cualquiera de los niveles de coherencia inferiores a Strong, se devuelve una respuesta correcta en cuanto la región local conserva la escritura en al menos tres de cuatro réplicas.

Diagrama de consistencia de escritura no global en Azure Cosmos DB for Apache Cassandra.

Coherencia segura global para solicitudes de lectura en Apache Cassandra

Con una coherencia de EACH_QUORUM, se puede lograr una lectura coherente en Apache Cassandra. En, una configuración de varias regiones para EACH_QUORUM si el número de cuórum de nodos no se cumple en cada región, la lectura no se realizará correctamente.

Diagrama de la consistencia de lectura global en Apache Cassandra.

Coherencia global fuerte para las solicitudes de lectura en Azure Cosmos DB for Apache Cassandra

La solicitud de lectura se sirve desde dos réplicas en la región especificada. Dado que la escritura ya se encarga de conservar en un número de cuórum de regiones (y todas las regiones si cada región estaba disponible), simplemente leer de dos réplicas en la región especificada proporciona coherencia fuerte. Esta coherencia fuerte requiere que se especifique EACH_QUORUM en el controlador cuando se emite la lectura contra una región para la cuenta de Cosmos DB junto con Strong Consistency como nivel de coherencia predeterminado para la cuenta.

Diagrama de coherencia de lectura global en Azure Cosmos DB for Apache Cassandra.

Coherencia fuerte local en Apache Cassandra

Una solicitud de lectura con un nivel de coherencia de TWO, THREEo LOCAL_QUORUM nos proporcionará una lectura fuerte de coherencia de la región local. Con un nivel de coherencia de LOCAL_QUORUM, necesita una respuesta de dos nodos en el centro de datos especificado para una lectura correcta.

Diagrama de la coherencia local de lectura fuerte en Apache Cassandra.

Coherencia fuerte local en Azure Cosmos DB for Apache Cassandra

En Azure Cosmos DB for Cassandra, tener un nivel de coherencia de TWO, THREE o LOCAL_QUORUM proporcionará una coherencia fuerte local para una solicitud de lectura. Dado que la ruta de acceso de escritura garantiza la replicación en un mínimo de tres de cada cuatro réplicas, una lectura de dos réplicas en la región especificada garantizará una lectura de cuórum de los datos de esa región.

Diagrama de la consistencia local de lectura fuerte en Azure Cosmos DB for Apache Cassandra.

Consistencia eventual en Apache Cassandra

Un nivel de coherencia de LOCAL_ONE, One y ANY with LOCAL_ONE dará como resultado una coherencia final. Esta coherencia se usa en los casos en los que el foco se centra en la latencia.

Diagrama de la consistencia de lectura eventual en Apache Cassandra.

¿Coherencia final en Azure Cosmos DB for Apache Cassandra?

Un nivel de coherencia de LOCAL_ONE, ONE o Any le proporcionará coherencia final. Con la coherencia final, se sirve una lectura desde solo una de las réplicas de la región especificada.

Diagrama de consistencia de lectura eventual en Azure Cosmos DB for Apache Cassandra.

Invalidación del nivel de coherencia para las operaciones de lectura en Azure Cosmos DB para Cassandra

Anteriormente, el nivel de coherencia de las solicitudes de lectura solo se podía invalidar en una coherencia inferior a la predeterminada establecida en la cuenta. Por ejemplo, con la coherencia predeterminada de Strong, las solicitudes de lectura podrían emitirse con Strong de forma predeterminada y invalidarse por solicitud (si es necesario) a un nivel de coherencia más débil que Strong. Sin embargo, las solicitudes de lectura no se pudieron emitir con un nivel de coherencia invalidado superior al predeterminado de la cuenta. Una cuenta con coherencia final no pudo recibir solicitudes de lectura con un nivel de coherencia superior a Eventual (que en los controladores de Apache Cassandra se traducen en TWO, THREE, LOCAL_QUORUM o QUORUM).

Azure Cosmos DB para Cassandra ahora facilita la invalidación de la coherencia en las solicitudes de lectura a un valor superior a la coherencia predeterminada de la cuenta. Por ejemplo, con la coherencia predeterminada en la cuenta de Cosmos DB establecida en Eventual (equivalente de Apache Cassandra de One o ANY), las solicitudes de lectura se pueden invalidar por solicitud en LOCAL_QUORUM. Esta invalidación garantiza que se consulte un número de cuórum de réplicas dentro de la región especificada antes de devolver el conjunto de resultados, según requiera LOCAL_QUORUM.

Esta opción también evita la necesidad de establecer una consistencia predeterminada superior a Eventual, cuando solo se necesita para las solicitudes de lectura.

Pasos siguientes

Obtenga más información sobre la distribución global y los niveles de coherencia en Azure Cosmos DB: