Níveis de consistência do Apache Cassandra e do Azure Cosmos DB para Apache Cassandra

APLICA-SE A: Cassandra

Ao contrário do Azure Cosmos DB, o Apache Cassandra não fornece nativamente garantias de consistência definidas com precisão. Em vez disso, o Apache Cassandra fornece um nível de consistência de escrita e um nível de consistência de leitura, para permitir a elevada disponibilidade, consistência e desvantagens de latência. Ao utilizar o Azure Cosmos DB para Cassandra:

  • O nível de consistência de escrita do Apache Cassandra é mapeado para o nível de consistência predefinido configurado na sua conta do Azure Cosmos DB. A consistência de uma operação de escrita (CL) não pode ser alterada numa base por pedido.
  • O Azure Cosmos DB mapeará dinamicamente o nível de consistência de leitura especificado pelo controlador de cliente Cassandra. O nível de consistência será mapeado para um dos níveis de consistência do Azure Cosmos DB configurados dinamicamente num pedido de leitura.

Escritas em várias regiões vs. escritas de região única

Por predefinição, a base de dados do Apache Cassandra é um sistema multimestre e não fornece uma opção inicial para escritas de região única com replicação de várias regiões para leituras. No entanto, o Azure Cosmos DB fornece a capacidade chave na mão de ter configurações de escrita de região única ou de várias regiões . Uma das vantagens de poder escolher uma única configuração de escrita de região em várias regiões é a prevenção de cenários de conflito entre regiões e a opção de manter uma consistência forte em várias regiões.

Com as escritas de região única, pode manter uma consistência forte e manter um nível de elevada disponibilidade entre regiões com ativação pós-falha gerida pelo serviço. Nesta configuração, ainda pode explorar a localidade dos dados para reduzir a latência de leitura ao mudar para uma consistência eventual por pedido. Além destas capacidades, a plataforma do Azure Cosmos DB também oferece a opção de redundância entre zonas ao selecionar uma região. Assim, ao contrário do Apache Cassandra nativo, o Azure Cosmos DB permite-lhe navegar no espectro de troca do Teorema CAP com mais granularidade.

Mapear os níveis de consistência

A plataforma do Azure Cosmos DB fornece um conjunto de cinco definições de consistência bem definidas e orientadas para casos de utilização empresarial relativamente à replicação. As desvantagens para estas definições de consistência são definidas pelos teoremas CAP e PACLC . Uma vez que esta abordagem difere significativamente do Apache Cassandra, recomendamos que reveja e compreenda a consistência do Azure Cosmos DB. Em alternativa, pode rever este breve guia de vídeo para compreender as definições de consistência na plataforma do Azure Cosmos DB. A tabela seguinte ilustra os possíveis mapeamentos entre os níveis de consistência do Apache Cassandra e do Azure Cosmos DB ao utilizar a API para Cassandra. Esta tabela mostra configurações para uma única região, leituras de várias regiões com escritas de região única e escritas em várias regiões.

Mapeamentos

Nota

Estes não são mapeamentos exatos. Em vez disso, fornecemos os análogos mais próximos ao Apache Cassandra e desambiguamos quaisquer diferenças qualitativas na coluna mais à direita. Conforme mencionado acima, recomendamos que reveja as definições de consistência do Azure Cosmos DB.

ALL, EACH_QUOROM, QUOROM, LOCAL_QUORUMou THREE consistência de escrita no Apache Cassandra

Consistência de leitura do Apache Ler a partir de Nível de consistência do Azure Cosmos DB mais próximo das definições de leitura/escrita do Apache Cassandra
ALL Região local Strong
EACH_QUOROM Região local Strong
QUOROM Região local Strong
LOCAL_QUORUM Região local Strong
LOCAL_ONE Região local Eventual
ONE Região local Eventual
TWO Região local Strong
THREE Região local Strong

Ao contrário do Apache e do DSE Cassandra, o Azure Cosmos DB consolida duravelmente uma escrita de quórum por predefinição. Pelo menos três em cada quatro nós (3/4) consolidam a escrita no disco e NÃO apenas um registo de consolidação dentro da memória.

ONE, LOCAL_ONEou ANY consistência de escrita no Apache Cassandra

Consistência de leitura do Apache Ler a partir de Nível de consistência do Azure Cosmos DB mais próximo das definições de leitura/escrita do Apache Cassandra
ALL Região local Strong
EACH_QUOROM Região local Eventual
QUOROM Região local Eventual
LOCAL_QUORUM Região local Eventual
LOCAL_ONE Região local Eventual
ONE Região local Eventual
TWO Região local Eventual
THREE Região local Eventual

A API do Azure Cosmos DB para Cassandra consolida sempre duramente uma escrita de quórum por predefinição, pelo que todas as consistências de leitura podem ser utilizadas.

TWO consistência de escrita no Apache Cassandra

Consistência de leitura do Apache Ler a partir de Nível de consistência do Azure Cosmos DB mais próximo das definições de leitura/escrita do Apache Cassandra
ALL Região local Strong
EACH_QUOROM Região local Strong
QUOROM Região local Strong
LOCAL_QUORUM Região local Strong
LOCAL_ONE Região local Eventual
ONE Região local Eventual
TWO Região local Eventual
THREE Região local Strong

O Azure Cosmos DB não tem noção de consistência de escrita apenas para dois nós, pelo que tratamos esta consistência de forma semelhante ao quórum na maioria dos casos. Para consistência de TWOleitura, esta consistência é equivalente a escrever com QUOROM e ler a partir de ONE.

Serialou Local_Serial escrever consistência no Apache Cassandra

Consistência de leitura do Apache Ler a partir de Nível de consistência do Azure Cosmos DB mais próximo das definições de leitura/escrita do Apache Cassandra
ALL Região local Strong
EACH_QUOROM Região local Strong
QUOROM Região local Strong
LOCAL_QUORUM Região local Strong
LOCAL_ONE Região local Eventual
ONE Região local Eventual
TWO Região local Strong
THREE Região local Strong

A série aplica-se apenas a transações leves. Por predefinição, o Azure Cosmos DB segue um algoritmo consolidado de forma durável e, por conseguinte Serial , a consistência é semelhante ao quórum.

Outras regiões para escrita de região única

O Azure Cosmos DB facilita cinco definições de consistência, incluindo fortes, em várias regiões onde as escritas de região única estão configuradas. Esta facilitação ocorre desde que as regiões estejam a menos de 3.000 km umas das outras.

O Azure Cosmos DB não tem um mapeamento aplicável ao Apache Cassandra, uma vez que todos os nós/regiões são escritas e não é possível uma garantia de consistência forte em todas as regiões.

Outras regiões para escrita em várias regiões

O Azure Cosmos DB facilita apenas quatro definições de consistência; eventual, consistent prefix, sessione bounded staleness em várias regiões em que a escrita em várias regiões está configurada.

O Apache Cassandra apenas forneceria consistência eventual para leituras noutras regiões, independentemente das definições.

Substituições dinâmicas suportadas

Definição da conta do Azure Cosmos DB Substituir valor no pedido de cliente Efeito de substituição
Strong All Sem efeito (permanecer como strong)
Strong Quorum Sem efeito (permanecer como strong)
Strong LocalQuorum Sem efeito (permanecer como strong)
Strong Two Sem efeito (permanecer como strong)
Strong Three Sem efeito (permanecer como strong)
Strong Serial Sem efeito (permanecer como strong)
Strong LocalSerial Sem efeito (permanecer como strong)
Strong One Alterações de consistência para Eventual
Strong LocalOne Alterações de consistência para Eventual
Strong Any Não permitido (erro)
Strong EachQuorum Não permitido (erro)
Bounded staleness, sessionou consistent prefix All Não permitido (erro)
Bounded staleness, sessionou consistent prefix Quorum Não permitido (erro)
Bounded staleness, sessionou consistent prefix LocalQuorum Não permitido (erro)
Bounded staleness, sessionou consistent prefix Two Não permitido (erro)
Bounded staleness, sessionou consistent prefix Three Não permitido (erro)
Bounded staleness, sessionou consistent prefix Serial Não permitido (erro)
Bounded staleness, sessionou consistent prefix LocalSerial Não permitido (erro)
Bounded staleness, sessionou consistent prefix One Alterações de consistência para Eventual
Bounded staleness, sessionou consistent prefix LocalOne Alterações de consistência para Eventual
Bounded staleness, sessionou consistent prefix Any Não permitido (erro)
Bounded staleness, sessionou consistent prefix EachQuorum Não permitido (erro)

Métricas

Se a sua conta do Azure Cosmos DB estiver configurada com um nível de consistência diferente da consistência forte, reveja a métrica Estagnação Vinculada Probabilisticamente (PBS). A métrica captura a probabilidade de os seus clientes obterem leituras fortes e consistentes para as suas cargas de trabalho. Esta métrica é exposta no portal do Azure. Para obter mais informações sobre a métrica PBS, veja Monitorizar a métrica De Estagnação Limitada Probabilisticamente (PBS).

A estagnação vinculada probabilisticamente mostra como a consistência eventual é eventual. Esta métrica fornece uma visão da frequência com que pode obter uma consistência mais forte do que o nível de consistência que configurou atualmente na sua conta do Azure Cosmos DB. Por outras palavras, pode ver a probabilidade (medida em milissegundos) de obter leituras consistentes para uma combinação de regiões de escrita e leitura.

Consistência forte global para pedidos de escrita no Apache Cassandra

Apache Cassandra, a definição de EACH_QUORUM ou QUORUM proporciona uma consistência forte. Quando um pedido de escrita é enviado para uma região, EACH_QUORUM persiste os dados num número de nós de quórum em cada datacenter. Esta persistência requer que todos os datacenters estejam disponíveis para que a operação de escrita seja bem-sucedida. QUORUM é ligeiramente menos restritivo, com vários QUORUM nós em todos os datacenters necessários para manter os dados antes de reconhecer que a escrita foi bem-sucedida.

O gráfico seguinte ilustra uma definição de consistência forte global no Apache Cassandra entre duas regiões 1 e 2. Depois de os dados serem escritos na região 1, a escrita tem de ser mantida num número de nós quórum na região 1 e na região 2 antes de ser recebida uma confirmação pela aplicação.

Diagrama de consistência de escrita global no Apache Cassandra.

Consistência forte global para pedidos de escrita no Azure Cosmos DB para Apache Cassandra

Na consistência do Azure Cosmos DB, a consistência é definida ao nível da conta. Com Strong a consistência no Azure Cosmos DB para Cassandra, os dados são replicados de forma síncrona para as regiões de leitura da conta. Quanto mais distantes forem as regiões da conta do Azure Cosmos DB, maior será a latência das operações de escrita consistentes.

Diagrama da consistência de escrita global no Azure Cosmos DB para Apache Cassandra.

Como o número de regiões afeta o seu pedido de leitura ou escrita:

  • Duas regiões: com consistência forte, quórum (N/2 + 1) = 2. Assim, se a região de leitura ficar inativa, a conta já não pode aceitar escritas com consistência forte, uma vez que um número de quórum de regiões não está disponível para o qual a escrita será replicada.
  • Três ou mais regiões: para N = 3, quorum = 2. Se uma das regiões de leitura estiver inativa, a região de escrita ainda pode replicar as escritas para um total de duas regiões que cumprem o requisito de quórum. Da mesma forma, com quatro regiões, quorum = 4/2 + 1 = 3. Mesmo com uma região de leitura em baixo, o quórum pode ser cumprido.

Nota

Se for necessária uma consistência globalmente forte para todas as operações de escrita, a consistência da conta do Azure Cosmos DB para Cassandra tem de ser definida como Forte. O nível de consistência das operações de escrita não pode ser substituído para um nível de consistência inferior por pedido no Azure Cosmos DB.

Consistência mais fraca para pedidos de escrita no Apache Cassandra

Um nível de consistência de ANY, ONE, TWO, THREE, , SerialLOCAL_QUORUMou Local_Serial? Considere um pedido de escrita com LOCAL_QUORUM um RF de 4 num datacenter de seis nós. Quorum = 4/2 + 1 = 3.

Diagrama de consistência de escrita não global no Apache Cassandra.

Consistência mais fraca para pedidos de escrita no Azure Cosmos DB para Apache Cassandra

Quando um pedido de escrita é enviado com qualquer um dos níveis de consistência inferiores Stronga , é devolvida uma resposta de êxito assim que a região local persistir a escrita em, pelo menos, três em cada quatro réplicas.

Diagrama de consistência de escrita não global no Azure Cosmos DB para Apache Cassandra.

Consistência forte global para pedidos de leitura no Apache Cassandra

Com uma consistência de EACH_QUORUM, pode ser obtida uma leitura consistente no Apache Cassandra. Em, uma configuração de várias regiões para EACH_QUORUM se o número de nós de quórum não for cumprido em cada região, a leitura não será bem-sucedida.

Diagrama de consistência de leitura global no Apache Cassandra.

Consistência forte global para pedidos de leitura no Azure Cosmos DB para Apache Cassandra

O pedido de leitura é servido a partir de duas réplicas na região especificada. Uma vez que a escrita já teve o cuidado de persistir num número de quórum de regiões (e em todas as regiões se cada região estivesse disponível), a leitura simples de duas réplicas na região especificada fornece consistência forte. Esta consistência forte tem de EACH_QUORUM ser especificada no controlador ao emitir a leitura numa região para a conta do Cosmos DB, juntamente com a Consistência Forte como o nível de consistência predefinido para a conta.

Diagrama da consistência de leitura global no Azure Cosmos DB para Apache Cassandra.

Consistência forte local no Apache Cassandra

Um pedido de leitura com um nível de consistência de TWO, THREEou LOCAL_QUORUM irá dar-nos uma leitura de consistência forte da região local. Com um nível de consistência de LOCAL_QUORUM, precisa de uma resposta de dois nós no datacenter especificado para uma leitura bem-sucedida.

Diagrama de consistência de leitura forte local no Apache Cassandra.

Consistência forte local no Azure Cosmos DB para Apache Cassandra

No Azure Cosmos DB para Cassandra, ter um nível de consistência de TWOou THREELOCAL_QUORUM dará uma consistência forte local para um pedido de leitura. Uma vez que o caminho de escrita garante a replicação para um mínimo de três em quatro réplicas, uma leitura de duas réplicas na região especificada garantirá uma leitura do quórum dos dados nessa região.

Diagrama de consistência de leitura forte local no Azure Cosmos DB para Apache Cassandra.

Consistência eventual no Apache Cassandra

Um nível de consistência de LOCAL_ONEe OneANY with LOCAL_ONE resultará numa consistência eventual. Esta consistência é utilizada nos casos em que o foco está na latência.

Diagrama de consistência de leitura eventual no Apache Cassandra.

Consistência eventual no Azure Cosmos DB para Apache Cassandra?

Um nível de consistência de LOCAL_ONE, ONE ou Any irá dar-lhe uma consistência eventual. Com uma consistência eventual, uma leitura é servida a partir de apenas uma das réplicas na região especificada.

Diagrama de consistência de leitura eventual no Azure Cosmos DB para Apache Cassandra.

Substituir o nível de consistência das operações de leitura no Azure Cosmos DB para Cassandra

Anteriormente, o nível de consistência dos pedidos de leitura só podia ser substituído por uma consistência inferior à predefinição definida na conta. Por exemplo, com a consistência predefinida de Strong, os pedidos de leitura podem ser emitidos com Strong por predefinição e substituídos por pedido (se necessário) para um nível de consistência mais fraco do que Forte. No entanto, não foi possível emitir pedidos de leitura com um nível de consistência substituído superior à predefinição da conta. Uma conta com consistência Eventual não conseguiu receber pedidos de leitura com um nível de consistência superior a Eventual (que nos controladores do Apache Cassandra traduzem para TWO, THREEou QUORUMLOCAL_QUORUM ).

Agora, o Azure Cosmos DB para Cassandra facilita a substituição da consistência nos pedidos de leitura para um valor superior à consistência predefinida da conta. Por exemplo, com a consistência predefinida na conta do Cosmos DB definida como Eventual (Apache Cassandra equivalente a ou ANY), os pedidos de One leitura podem ser substituídos por pedido para LOCAL_QUORUM. Esta substituição garante que um número de quórum de réplicas na região especificada é consultado antes de devolver o conjunto de resultados, conforme exigido por LOCAL_QUORUM.

Esta opção também impede a necessidade de definir uma consistência predefinida que seja superior Eventuala , quando só é necessária para pedidos de leitura.

Passos seguintes

Saiba mais sobre os níveis globais de distribuição e consistência do Azure Cosmos DB: