Estou animado em anunciar o suporte a "transações ACID distribuídas de vários documentos" em Servidor Couchbase 6.5.
Não importa se você está criando um novo aplicativo ou modernizando um aplicativo relacional existente, com o transações No Couchbase 6.5, seu trabalho está mais fácil do que nunca.
Por que as transações ACID distribuídas?
O Couchbase sempre foi compatível com transações ACID de documento único. Essas são as transações mais comuns em um banco de dados de modelo de documento e abrangem mais de 95% de casos de uso. Há também casos de uso críticos para os negócios em que são necessárias transações ACID com vários documentos e, até agora, nossos clientes modelavam esses casos no nível do aplicativo. Com nosso novo recurso de transação ACID com vários documentos, você pode deixar que a camada de banco de dados cuide disso para você. Isso alivia a camada de aplicativos do gerenciamento de toda a semântica de recuperação de falhas do sistema durante uma atualização de vários documentos. A camada de banco de dados agora oferece transações ACID em vários documentos, vários buckets e vários nós.
Veja como o código é simples:
Todo o trabalho dentro de uma transação é feito usando APIs padrão do SDK do Couchbase com acesso à proeza programática da plataforma subjacente. O tratamento de erros é simplificado com novas tentativas incorporadas para as muitas falhas que podem ocorrer em um sistema distribuído altamente simultâneo.
Garantias ACID
Vejamos como abordamos as garantias de transação ACID em nosso banco de dados distribuído que foi criado em uma arquitetura de nada compartilhado.
Atomicidade
Com esta versão, ampliamos nossas garantias de atomicidade de um único documento para vários documentos em vários nós. Agora você tem uma semântica de tudo ou nada para o seu aplicativo padrão em que está atualizando vários documentos ao mesmo tempo. Dentro do limite da transação, o Couchbase alterará todos os documentos afetados ou nenhum. Essa atomicidade de vários documentos é essencial para cenários de aplicativos, como coordenação de vários ativos e orquestração de sagas de microsserviços, e agora você pode contar com o Couchbase para fornecê-la.
Consistência e Isolação
O Couchbase sempre forneceu uma forte consistência nas leituras de APIs de valor-chave e de N1QL com GSI (usando request_plus). Agora, estendemos essa consistência também às transações com vários documentos. Obviamente, qualquer discussão sobre a consistência de vários documentos fica incompleta sem uma descrição dos níveis de isolamento suportados. O Couchbase Server 6.5 oferece um nível de isolamento "Read Committed". De acordo com os padrões ANSI, o nível O nível de isolamento Read Committed garante que todos os dados lidos sejam confirmados no momento em que são lidos. Ele também exige que nenhum dado "sujo" não confirmado seja lido. As transações do Couchbase garantem que você sempre obtenha a semântica de leitura confirmada, independentemente de como a leitura é feita - seja por meio da interface de valor-chave, de uma consulta N1QL, de um cluster XDCR, de análises, de dispositivos móveis ou de uma função de eventos.
Durabilidade
As transações são colocadas em camadas sobre um novo mecanismo de replicação síncrona no Couchbase Server 6.5 para oferecer garantias de durabilidade. A replicação síncrona garante que uma gravação não seja visível até que seja replicada e/ou persistida de forma durável. Depois que uma transação é confirmada, todas as atualizações na transação têm garantia de durabilidade, independentemente de onde os documentos residam no cluster.
Com a replicação síncrona, o Couchbase agora facilita o uso da durabilidade ajustável com melhor resiliência. A capacidade de ajuste da durabilidade vem do uso da replicação como uma estratégia de durabilidade ou do uso da persistência para durabilidade.
O novo mecanismo de replicação está sendo submetido a testes internos abrangentes usando JepsenO sistema de teste de consistência de dados da Microsoft, uma estrutura de teste que submete os sistemas distribuídos a várias falhas simultâneas e verifica a consistência dos dados nessas falhas. Os resultados desses testes serão divulgados publicamente.
Transações altamente disponíveis e dimensionáveis
Como uma plataforma de dados distribuída de escalonamento horizontal, o Couchbase tem uma longa tradição de ser líder em escalabilidade, desempenho e alta disponibilidade. Com as transações distribuídas de vários documentos, permanecemos fiéis a esses princípios. Não estamos introduzindo nenhum agendador global ou coordenação global, e não dependemos de servidores de tempo finamente ajustados.
Ao usar nossos clientes inteligentes, evitamos a necessidade de um monitor de transação única ou de um gerenciador de bloqueio distribuído. Historicamente, as transações são implementadas usando um 2PC. Em um banco de dados distribuído de expansão horizontal, o 2PC é muito lento, induz deadlocks distribuídos e, o mais importante, introduz o SPOF. Em nossa implementação, adotamos uma abordagem diferente.
Cada transação é anexada a alguma lógica de aplicativo nos clientes inteligentes. À medida que a transação é executada, os clientes inteligentes rastreiam o estado da transação e determinam se devem prosseguir com a transação. Se o estado do sistema não coincidir com o estado da transação do cliente inteligente, o cliente inteligente automaticamente desfaz o estado da transação e tenta novamente a lógica do aplicativo. Como os clientes inteligentes estão cientes do estado da transação, isso elimina as limitações de disponibilidade e escalabilidade do protocolo 2PC.
Além disso, em bancos de dados que são fragmentados, as limitações de escala e desempenho do 2PC são tradicionalmente superadas oferecendo as garantias de transação em um único fragmento. Isso requer um pré-particionamento dos dados em um único fragmento. Mas a necessidade de fragmentação manual dos dados também é um problema bem documentado que ajudou a precipitar todo o setor de NoSQL. Com nossa arquitetura, As transações são independentes de partição e não exigem nenhum tratamento ou manipulação especial dos posicionamentos de dados. Basicamente, a semântica da transação é honrada para qualquer documento, independentemente de onde ele reside fisicamente no cluster.
Pague o preço somente quando você precisar dele
Por último, mas não menos importante, entre as virtudes das transações ACID do Couchbase está o fato de que você não paga nenhuma penalidade de desempenho, exceto quando as utiliza. Você pode intercalar operações que exigem garantias ACID fortes com aquelas que não exigem para obter o melhor dos dois mundos: o desempenho e a escala de um sistema NoSQL, além das garantias transacionais de um banco de dados tradicional. Isso dá aos aplicativos a capacidade de decidir quando pagar o custo da transação, em vez de o banco de dados impô-lo incondicionalmente para cada operação.
Conclusão
Essa combinação de desempenho em escala, disponibilidade, flexibilidade do modelo de dados do JSON, poder de programação do SQL e garantias de transação ACID tornam o Couchbase muito eficaz para os aplicativos modernos. Se o seu aplicativo precisar do que o NoSQL e o Couchbase oferecem, você não precisará mais de um sistema separado para obter a mesma semântica ACID a que está acostumado nos bancos de dados relacionais.
Próximas etapas
O Couchbase Server 7.0 Beta está disponível para download. Há outros blogs e documentação publicados pela equipe do Couchbase para se aprofundar nas transações ACID do Couchbase. Recomendo que você experimente e aguardamos seu feedback!
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
Entendendo as transações ACID distribuídas de vários documentos no Couchbase
Introdução à API Java do Couchbase Transactions [Vídeo]
Anunciando o Couchbase Server 6.5 - Novidades e aprimoramentos
Oi Ravi,
Isso é bom.
Pelo que entendi, com a versão 6.5.0, a realização de transações ACID é feita por meio das APIs do SDK. Existe algum plano para permitir que o N1QL realize transações?
Além disso, para muitos clientes que planejam fazer a portabilidade de bancos de dados relacionais, há alguma maneira/plano de oferecer suporte à portabilidade do PL/SQL existente (procedimentos armazenados e similares) para algo que possa ser executado no couchbase?
Agradecimentos
O recurso de transações N1QL está planejado para a próxima versão do Couchbase. Aguarde o anúncio da versão beta em novembro de 2020.
Detalhes: https://www.couchbase.com/transactions-n1ql-couchbase-distributed-nosql/
Conversa: https://connectonline.couchbase.com/forum/t/n1ql-new-features-new-features-in-the-upcoming-release/274
Oi Purav,
Analisaremos o suporte N1QL para transações em uma versão futura. Isso está em nosso roteiro.
O N1QL tem um recurso de visualização para Funções Definidas pelo Usuário que deve permitir a portabilidade de procedimentos armazenados PL/SQL.
Veja os detalhes das funções no Couchbase 6.5(preview) em: https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/createfunction.html
"À medida que a transação é executada, os clientes inteligentes rastreiam o estado da transação e determinam se devem prosseguir com a transação. Se o estado do sistema não coincidir com o estado da transação do cliente inteligente, o cliente inteligente automaticamente desdobrará o estado da transação e tentará novamente a lógica do aplicativo"
Por favor, ajude-me a entender a lógica por trás da correspondência entre o estado do sistema e o estado da transação. Estou muito curioso para saber qual é a lógica usada para eliminar o 2PC.
Obrigado
Oi seeraven242,
A principal inovação aqui é que, por meio de operações específicas de metadados de transação na rede, apresentamos detalhes sobre o estado da transação. Isso permite que todo o sistema distribuído que compõe o Couchbase, incluindo as operações do cliente em nome do código do aplicativo, coordene-se, se necessário, e permita que as transações individuais prossigam sem nenhuma sobrecarga.
Com o 2PC em todos os sistemas na abordagem clássica do gerenciador de transações para escalonar além de um único sistema monolítico, o custo da transação é pago várias vezes, como você bem observou.
A solução do Couchbase refatora o trabalho em todo o sistema em vez de pagar esse custo tentando ocultá-lo atrás de uma camada existente.
Desde que este blog foi publicado, há alguns recursos novos. O livro de Graham Pople A apresentação do Couchbase Connect 2020 apresenta um pouco mais de detalhes e minha apresentação demonstra como tudo isso acontece.
Espero que isso tenha respondido sua pergunta e obrigado pelo interesse!