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_QUORUM
ou 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_ONE
ou 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 TWO
leitura, esta consistência é equivalente a escrever com QUOROM
e ler a partir de ONE
.
Serial
ou 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
, session
e 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 , session ou consistent prefix |
All |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
Quorum |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
LocalQuorum |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
Two |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
Three |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
Serial |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
LocalSerial |
Não permitido (erro) |
Bounded staleness , session ou consistent prefix |
One |
Alterações de consistência para Eventual |
Bounded staleness , session ou consistent prefix |
LocalOne |
Alterações de consistência para Eventual |
Bounded staleness , session ou consistent prefix |
Any |
Não permitido (erro) |
Bounded staleness , session ou 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.
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.
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
, , Serial
LOCAL_QUORUM
ou 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
.
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 Strong
a , é devolvida uma resposta de êxito assim que a região local persistir a escrita em, pelo menos, três em cada quatro réplicas.
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.
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.
Consistência forte local no Apache Cassandra
Um pedido de leitura com um nível de consistência de TWO
, THREE
ou 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.
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 TWO
ou THREE
LOCAL_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.
Consistência eventual no Apache Cassandra
Um nível de consistência de LOCAL_ONE
e One
ANY with LOCAL_ONE
resultará numa consistência eventual. Esta consistência é utilizada nos casos em que o foco está na latência.
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.
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
, THREE
ou QUORUM
LOCAL_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 Eventual
a , 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: