Transações

Entendendo as transações ACID distribuídas de vários documentos

O CTO do Couchbase, Ravi Mayuram, anunciou as transações ACID distribuídas de vários documentos no Couchbase Server 6.5. Eu recomendo fortemente lendo o blog do Ravi que destaca como as transações do Couchbase são uma união inovadora de garantias ACID com escala, alta disponibilidade, desempenho e flexibilidade.

Neste blog, vou me aprofundar em nosso projeto de Transações ACID funcionalidade. 

Simples, mas poderoso

Primeiramente, vamos ver como é fácil escrever uma transação do Couchbase. Você abre uma transação, faz algum trabalho e confirma (ou falha) com Atomicidade, Consistência, Isolução e Durabilidade. Aproveitando o SDK e as APIs regulares do Couchbase, você pode utilizar os recursos da plataforma de programação subjacente. Aqui está um trecho de código que mostra um débito/crédito básico, transferindo fundos de uma conta para outra com uma transação ACID:

Há muitos recursos incorporados para facilitar a programação com transações no Couchbase:

  • Confirmação ou reversão automática com flexibilidade para também fazer isso explicitamente.
  • Tentativas automáticas para erros transitórios, como atrasos de durabilidade devido a falhas na rede ou conflitos de bloqueio.
  • Duração configurável para uma transação. Os deadlocks são resolvidos automaticamente, pois uma das transações atingirá o tempo limite e liberará seus recursos.
  • Limpeza automática de transações órfãs em caso de falha do cliente.

Se você quiser um tutorial rápido sobre programação com a API Java de transações e um exemplo de código para download, consulte Blog e vídeo de Graham Pople.

Garantias da ACID

As transações do Couchbase fornecem atomicidade, consistência, isolamento e durabilidade, conforme exigem as garantias ACID:

  • Atomicidade e Durabilidade são propriedades binárias - ou você tem ou não tem. 
  • Isolamento é um espectro com compensações. Os bancos de dados relacionais populares, como Oracle, MySQL e SQL Server, escolheram diferentes níveis de isolamento padrão e máximo. 
  • Consistência tem significados diferentes para o público do ACID tradicional e para o público dos sistemas distribuídos. A definição tradicional de ACID diz que uma transação deve levar o banco de dados de um estado válido para outro. A definição de sistemas distribuídos decorrente do teorema CAP diz que cada leitura deve receber a última gravação, embora isso comece a parecer um pouco com a semântica de isolamento.

Aqui está um resumo das garantias ACID fornecidas pelas transações no Couchbase Server 6.5.

Atomicidade Semântica de tudo ou nada para atualizar vários documentos em vários fragmentos em nós diferentes.
Consistência As réplicas são imediatamente consistentes com a confirmação da transação.

GSI, FTS, XDCR são eventualmente consistentes com o commit da transação (O N1QL pode impor uma consistência forte na leitura com request_plus)  

Isolação Leitura Isolamento comprometido para todos os leitores simultâneos - se são leituras transacionais ou não transacionais
Durabilidade 3 níveis de durabilidade disponíveis para proteção de dados:

  • replicar para uma maioria 
  • replicar para uma maioria e persistir em disco no primário
  • persistir no disco em uma maioria

Sim, eles são distribuídos

As transações ACID do Couchbase são multi-documento e multi-nó - portanto, são realmente distribuídas, como você pode ver na ilustração arquitetônica simplificada do Couchbase abaixo. A ilustração mostra um cluster simples do Couchbase com 3 nós e 9 vbuckets/shards com 2 réplicas (total de 3 cópias de dados). A transação modifica dois documentos, Andy e Beth, com sua cópia ativa em dois nós separados. A conclusão bem-sucedida da transação garantirá que a cópia ativa de cada um dos dois documentos, bem como a maioria de suas cópias totais (o que, nesse caso, significa 1 de 2 réplicas além da ativa), sejam atualizadas com o novo valor. A falha garantirá que o estado permaneça inalterado e idêntico ao anterior à transação.

Detalhamento de recursos

Embora o resumo do ACID forneça uma perspectiva de alto nível, os detalhes a seguir fornecem uma compreensão mais profunda da semântica:

Multi-nó, multi-bucket, multi-documento

Uma única transação pode abranger vários documentos, em vários buckets, em vários nós. Como no Couchbase, um bucket mapeia um banco de dados, uma transação pode, na verdade, abranger vários bancos de dados que vivem no mesmo cluster do Couchbase. Isso, juntamente com a capacidade do Couchbase de executar JOINs entre buckets, proporciona enorme flexibilidade ao aplicativo.

Somente os dados confirmados podem ser lidos pelos consumidores de DCP

Todas as leituras feitas de qualquer maneira, inclusive de N1QL, XDCR, Analytics, Mobile, Eventing e Connectors, retornarão apenas dados confirmados. Ninguém jamais poderá ler dados não confirmados/sujos. O protocolo DCP (Data Change Protocol) do Couchbase garante que nenhum dado intermediário não confirmado seja lido por um consumidor downstream.

Bloqueio e detecção de conflitos

Os conflitos entre transações que tentam atualizar os mesmos documentos são detectados e tratados revertendo uma delas e tentando novamente (até o tempo limite da transação que, por padrão, é de 15s). Isso é feito por meio de uma combinação de otimismo e bloqueio pessimista no nível do documento.

Qualquer documento que você queira modificar em uma transação deve ser lido primeiro dentro da transação e todas as gravações nela são automaticamente gravações CAS (Check and Set). Portanto, se uma transação ler dados que posteriormente são alterados por outra gravação transacional (ou não transacional), no momento da gravação essa transação detectará o conflito de CAS, reverterá e tentará novamente.  

Na transação de débito/crédito acima, em que o dinheiro está sendo transferido da conta de Beth para a conta de Andy, se a conta de Beth for alterada após a transação ter lido a conta dela, mas antes de modificá-la, a transação detectará isso, reverterá e tentará novamente.

Quando o documento é modificado na transação, ele obtém implicitamente um bloqueio de gravação no documento, que é liberado somente quando a transação termina. Se uma segunda transação tentar modificar um documento que já esteja bloqueado por uma transação, essa última transação detectará o conflito de gravação, fará uma reversão e tentará novamente até o período de tempo limite da transação.  

Voltando ao exemplo de débito/crédito acima, suponha uma transação durante o voo em que a conta de Beth tenha sido deduzida, mas a de Andy ainda não tenha sido atualizada. Nesse momento, o documento da conta de Beth está bloqueado. Portanto, se outra transação para transferir dinheiro da conta da Beth para a conta do Bill estiver sendo tentada simultaneamente, ela detectará o conflito de gravação na Beth e reverterá.

Durabilidade síncrona

No Couchbase Server 6.5, temos uma nova implementação do protocolo de replicação que garante que uma mutação seja visível para os leitores somente depois de atender aos critérios de replicação/persistência e possa ser revertida se esses critérios não forem atendidos. Esse novo mecanismo de replicação está sendo submetido a testes internos abrangentes da Jepsen. Leia o blog de Korrigan para saber mais.

A replicação síncrona oferece durabilidade ajustável, permitindo que você escolha o nível de proteção contra falhas (falha de nó, falha de disco, falhas únicas ou múltiplas) que deseja para cada gravação. Há três níveis para escolher:

  • maioria - Esse nível de durabilidade garante que a gravação seja propagada para a maioria das réplicas antes de retornar (por exemplo, se o cluster estiver configurado com 2 réplicas, ela será gravada na RAM na réplica ativa e propagada para pelo menos 1 réplica antes de retornar o sucesso ao aplicativo)
  • persistToActive - Esse nível garante que a gravação seja propagada na RAM para a maioria das réplicas e persista no disco na réplica ativa antes de retornar o sucesso ao aplicativo.
  • persistToMajority - esse nível garante que a gravação seja mantida no disco na maioria dos nós antes de retornar o sucesso ao aplicativo.

Se a durabilidade falhar (tempo limite, falha no nó etc.), a gravação será automaticamente revertida e o cliente será notificado da falha.

Observação: as novas gravações de durabilidade síncrona são aplicáveis a transações e a mutações de documentos únicos.

Observação: se você não especificar nenhum nível de durabilidade, ele será tratado de forma assíncrona, o que acaba sendo durável.

As transações são colocadas em camadas sobre o novo mecanismo de replicação síncrona e, por padrão, definem o nível de durabilidade em 'maioria'. Você pode substituir o padrão escolhendo um nível de durabilidade diferente por transação. 'persistToMajority' oferece a mais forte proteção de dados em caso de várias falhas. 

Compartimentos efêmeros

Você também pode usar transações e durabilidade síncrona em buckets efêmeros. Há casos de uso de cache que não precisam de persistência, mas ainda querem garantir que os itens no cache sejam atualizados com garantias ACID.

Próximas etapas

O suporte a transações ACID de vários documentos no Couchbase Server 6.5 é inovador e abre novos casos de uso para sua empresa. Aplicativos NoSQL. Gostaríamos muito de receber seus comentários e sugestões sobre os aprimoramentos adicionais necessários para as transações. Aqui estão alguns recursos para você começar:

Baixar

Faça o download do Couchbase Server 6.5

Documentação

Documentação do Couchbase Transactions 6.5

Guia de instruções do Couchbase Transactions 6.5 para SDKs

Blogs

O Couchbase traz as transações ACID multidocumento distribuídas para o NoSQL

Introdução à API Java do Couchbase Transactions [Vídeo]

Anunciando o Couchbase Server 6.5 - Novidades e aprimoramentos

Todos os blogs 6.5

Compartilhe este artigo
Receba atualizações do blog do Couchbase em sua caixa de entrada
Esse campo é obrigatório.

Autor

Postado por Shivani Gupta

Shivani Gupta é diretora de gerenciamento de produtos da Couchbase para o Core Server. Shivani tem mais de 20 anos de experiência variada em Big Data, sistemas distribuídos e bancos de dados em diferentes empresas, incluindo Oracle, Microsoft, VMWare, Hortonworks e agora Couchbase.

Deixe um comentário

Pronto para começar a usar o Couchbase Capella?

Iniciar a construção

Confira nosso portal do desenvolvedor para explorar o NoSQL, procurar recursos e começar a usar os tutoriais.

Use o Capella gratuitamente

Comece a trabalhar com o Couchbase em apenas alguns cliques. O Capella DBaaS é a maneira mais fácil e rápida de começar.

Entre em contato

Deseja saber mais sobre as ofertas do Couchbase? Deixe-nos ajudar.