Me complace anunciar la compatibilidad con "transacciones ACID distribuidas multidocumento" en Servidor Couchbase 6.5.
Tanto si está escribiendo una nueva aplicación como modernizando una aplicación relacional existente, con transacciones En Couchbase 6.5 tu trabajo es más fácil que nunca.
¿Por qué distribuir transacciones ACID?
Couchbase siempre ha soportado transacciones ACID de documento único. Estas son el pan de cada día de las transacciones en un modelo de base de datos de documentos y cubren más de 95% de casos de uso. También hay casos de uso críticos para el negocio en los que se necesitan transacciones ACID multi-documento, y hasta ahora nuestros clientes han modelado estos casos a nivel de aplicación. Con nuestra nueva función de transacciones ACID multidocumento, puede dejar que la capa de base de datos se encargue de ello. Esto libera al nivel de aplicación de la gestión de toda la semántica de recuperación de fallos del sistema durante una actualización multidocumento. La capa de base de datos ofrece ahora transacciones ACID en varios documentos, varios buckets y varios nodos.
Así de sencillo es el código:
Todo el trabajo dentro de una transacción se realiza utilizando las API estándar del SDK de Couchbase con acceso a la destreza programática de la plataforma subyacente. El manejo de errores se simplifica con reintentos incorporados para los muchos fallos que están destinados a ocurrir en un sistema distribuido altamente concurrente.
Garantías ACID
Veamos cómo abordamos las garantías de transacción ACID en nuestra base de datos distribuida que está construida sobre una arquitectura compartida-nada.
Atomicidad
Con esta versión ampliamos nuestras garantías de atomicidad de un solo documento a múltiples documentos a través de múltiples nodos. Ahora tienes una semántica de todo o nada para tu aplicación estándar donde estás actualizando varios documentos a la vez. Dentro del límite de la transacción, Couchbase cambiará todos los documentos afectados o ninguno. Esta atomicidad multi-documento es crítica para escenarios de aplicación como la coordinación multi-activos y la orquestación de sagas de microservicios - y ahora puedes confiar en Couchbase para proporcionarla.
Consistencia y Isolación
Couchbase siempre ha proporcionado una fuerte consistencia en las lecturas desde APIs key-value y desde N1QL con GSI (usando request_plus). Ahora hemos extendido esa consistencia a transacciones multi-documento también. Por supuesto, cualquier discusión de consistencia multi-documento está incompleta sin una descripción de los niveles de aislamiento soportados. Couchbase Server 6.5 proporciona un nivel de aislamiento "Read Committed". Según los estándares ANSI, el nivel El nivel de aislamiento Read Committed garantiza que cualquier dato leído se consigna en el momento en que se lee. También requiere que nunca se lean datos "sucios" no comprometidos. Las transacciones de Couchbase garantizan que siempre obtengas la semántica Read Committed independientemente de cómo se realice la lectura, ya sea a través de la interfaz clave-valor, una consulta N1QL, un clúster XDCR, analítica, móvil o una función de eventos.
Durabilidad
Las transacciones se superponen a un nuevo mecanismo de replicación síncrona en Couchbase Server 6.5 para proporcionar garantías de durabilidad. La replicación sincrónica asegura que una escritura no es visible hasta que se replica y/o persiste de forma duradera. Una vez que una transacción es confirmada, todas las actualizaciones en la transacción están garantizadas para ser duraderas, independientemente de donde residan los documentos en el cluster.
Con la replicación sincrónica, Couchbase ahora hace más fácil usar durabilidad sintonizable con mejor resiliencia. La durabilidad puede ajustarse utilizando la replicación como estrategia para la durabilidad, o utilizando la persistencia para la durabilidad.
El nuevo mecanismo de replicación se está sometiendo a pruebas internas exhaustivas utilizando Jepsenun marco de pruebas que somete a los sistemas distribuidos a múltiples fallos simultáneos y comprueba la coherencia de los datos en esos fallos. Los resultados de estas pruebas se harán públicos.
Transacciones de alta disponibilidad y escalabilidad
Como plataforma de datos distribuida y escalable, Couchbase se distingue desde hace tiempo por ser líder en escalabilidad, rendimiento y alta disponibilidad. Con las transacciones distribuidas multi-documento nos mantenemos fieles a esos principios. No estamos introduciendo ningún planificador global o coordinación global, y no dependemos de servidores de tiempo finamente ajustados.
Al utilizar nuestros clientes inteligentes, evitamos la necesidad de un monitor de transacciones único o un gestor de bloqueos distribuido. Históricamente, las transacciones se implementan utilizando un 2PC. En una base de datos distribuida scale-out, 2PC es demasiado lento, induce bloqueos distribuidos y, lo que es más importante, introduce SPOF. En nuestra implementación, hemos adoptado un enfoque diferente.
Cada transacción está vinculada a una lógica de aplicación en los clientes inteligentes. A medida que se ejecuta la transacción, los clientes inteligentes rastrean el estado de la transacción y determinan si continuar con ella. Si el estado del sistema no coincide con el estado de la transacción del cliente inteligente, éste deshará automáticamente el estado de la transacción y volverá a intentar la lógica de la aplicación. Como los clientes inteligentes conocen el estado de la transacción, se eliminan las limitaciones de disponibilidad y escalabilidad del protocolo 2PC.
Además, en las bases de datos fragmentadas, las limitaciones de escala y rendimiento de 2PC se superan tradicionalmente ofreciendo las garantías de transacción en un único fragmento. Esto requiere una partición previa de los datos en un único fragmento. Pero requerir la partición manual de los datos es también un problema bien documentado que ayudó a precipitar toda la industria NoSQL. Con nuestra arquitectura, son independientes de las particiones y no requieren ninguna manipulación especial de la ubicación de los datos. Básicamente, la semántica de la transacción se respeta para cualquier documento, independientemente de su ubicación física en el clúster.
Pague el precio sólo cuando lo necesite
Por último, pero no menos importante entre las virtudes de las transacciones ACID de Couchbase está el hecho de que no pagas ninguna penalización de rendimiento excepto cuando las usas. Puedes intercalar operaciones que requieran fuertes garantías ACID con aquellas que no para obtener lo mejor de ambos mundos: el rendimiento y la escala de un sistema NoSQL, más las garantías transaccionales de una base de datos tradicional. Esto da a las aplicaciones el poder de decidir cuándo pagar el coste de transacción en lugar de que la base de datos lo imponga incondicionalmente para cada operación.
Conclusión
Esta combinación de rendimiento a escala, disponibilidad, flexibilidad del modelo de datos de JSON, poder de programación de SQL y garantías de transacción ACID hacen que Couchbase sea muy potente para las aplicaciones modernas. Si tu aplicación requiere lo que NoSQL y Couchbase proporcionan, ya no necesitas un sistema separado para conseguir la misma semántica ACID a la que estás acostumbrado en las bases de datos relacionales.
Próximos pasos
Couchbase Server 7.0 Beta está disponible para su descarga. Hay blogs y documentación adicionales publicados por el equipo de Couchbase para profundizar en las transacciones ACID de Couchbase. Te animo a que lo pruebes y esperamos tus comentarios.
Descargar
Descargar Couchbase Server 6.5
Documentación
Documentación de Couchbase Transactions 6.5
Guía de Couchbase Transactions 6.5 para SDKs
Blogs
Transacciones ACID distribuidas multidocumento en Couchbase
Introducción a la API Java de Couchbase Transactions [Vídeo]
Hola Ravi,
Qué bien.
Según tengo entendido, con la versión 6.5.0, las transacciones ACID se consiguen mediante las API del SDK. Hay algún plan para permitir que N1QL realice transacciones?
Además, para muchos clientes que planean migrar desde bases de datos relacionales, ¿hay alguna forma o plan para soportar la migración de PL/SQL existente (procedimientos almacenados y similares) a algo que pueda ejecutarse en couchbase?
Gracias
La función de transacciones N1QL está prevista para la próxima versión de Couchbase. Espera el anuncio de la beta en noviembre de 2020.
Detalles: https://www.couchbase.com/transactions-n1ql-couchbase-distributed-nosql/
Habla: https://connectonline.couchbase.com/forum/t/n1ql-new-features-new-features-in-the-upcoming-release/274
Hola Purav,
Estudiaremos la compatibilidad de N1QL con las transacciones en una futura versión. Está en nuestra hoja de ruta.
N1QL tiene una función de vista previa para Funciones Definidas por el Usuario que debería permitir la portabilidad de procedimientos almacenados PL/SQL.
Consulte los detalles de las funciones en Couchbase 6.5(preview) en: https://docs.couchbase.com/server/6.5/n1ql/n1ql-language-reference/createfunction.html
"A medida que se ejecuta la transacción, los clientes inteligentes rastrean el estado de la transacción y determinan si continuar con la transacción. Si el estado del sistema no coincide con el estado de la transacción del cliente inteligente, el cliente inteligente deshará automáticamente el estado de la transacción y volverá a intentar la lógica de la aplicación"
por favor, ayúdame a entender la lógica detrás de la coincidencia de estado del sistema y el estado de la transacción. Estoy muerto de curiosidad por saber la lógica utilizada para deshacerse de 2PC.
gracias
Hola seeraven242,
La innovación clave aquí es que sacamos a la superficie, a través de operaciones específicas de metadatos de transacción en la red, detalles sobre el estado de la transacción. Esto permite que todo el sistema distribuido que compone Couchbase, incluyendo las operaciones del cliente en nombre de su código de aplicación, para coordinar si es necesario y de otra manera dejar que las transacciones individuales proceden con cero sobrecarga.
Con 2PC a través de sistemas en el enfoque clásico de gestor de transacciones para escalar más allá de un único sistema monolítico, el coste de la transacción se paga varias veces como bien señalas.
La solución Couchbase refactoriza el trabajo en todo el sistema en lugar de pagar ese coste intentando ocultarlo tras una capa existente.
Desde que se publicó este blog, hay algunos recursos nuevos. Graham Pople La presentación de Couchbase Connect 2020 entra un poco más en detalle y mi presentación demuestra cómo se junta todo.
Espero que esto responda a su pregunta y gracias por su interés.