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_QUORUM
o 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_Serial
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 |
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
, session
y 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 , session o consistent prefix |
All |
No permitido (error) |
Bounded staleness , session o consistent prefix |
Quorum |
No permitido (error) |
Bounded staleness , session o consistent prefix |
LocalQuorum |
No permitido (error) |
Bounded staleness , session o consistent prefix |
Two |
No permitido (error) |
Bounded staleness , session o consistent prefix |
Three |
No permitido (error) |
Bounded staleness , session o consistent prefix |
Serial |
No permitido (error) |
Bounded staleness , session o consistent prefix |
LocalSerial |
No permitido (error) |
Bounded staleness , session o consistent prefix |
One |
Cambios de coherencia en Eventual |
Bounded staleness , session o consistent prefix |
LocalOne |
Cambios de coherencia en Eventual |
Bounded staleness , session o consistent prefix |
Any |
No permitido (error) |
Bounded staleness , session o 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.
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.
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
.
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.
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.
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.
Coherencia fuerte local en Apache Cassandra
Una solicitud de lectura con un nivel de coherencia de TWO
, THREE
o 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.
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.
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.
¿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.
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.