Decisiones de diseño influidas por el teorema CAP

El teorema CAP establece que una base de datos no puede ofrecer simultáneamente las tres garantías siguientes:

    • Consistencia (la información más reciente siempre está disponible en todas partes)
    • Availability (cada solicitud de lectura y escritura recibe una respuesta)
    • Partitioning Tolerance (considérelo una forma de tolerancia a fallos)

En el teorema CAP para bases de datos, la mayoría de las bases de datos necesitan persistir el estado y el valor de sus datos. Los datos necesitan un contenedor y un sistema anfitrión. Pero ejecutar una única copia de los datos en un único host sólo funciona si el host tiene electricidad. Y los datos sólo pueden estar disponibles en el host antes y después de un corte eléctrico si se persisten en un almacenamiento que pueda tolerar la falta de electricidad. Estas dos necesidades generan la necesidad de hacer copias de los datos y almacenarlas en múltiples hosts y unidades de almacenamiento. Así pues, los clústeres son necesarios para Partición tolerancia en una base de datos (la P del teorema CAP).

Por lo tanto, si debe tener tolerancia a las particiones, las ventajas y desventajas de las bases de datos distribuidas están entre Coherencia y Disponibilidad. La coherencia requiere que las escrituras en cada nodo o partición de datos sean coherentes entre sí en todo el clúster, ya que la integridad de los datos es lo más importante. A CockroachDB le gusta llamar a ejemplos de datos importantes como "los códigos nucleares". 

La disponibilidad es el otro atributo de CAP que debe soportar una base de datos para garantizar la fiabilidad de su funcionamiento: al igual que la partición, la base de datos es inútil si no se puede encontrar. En muchos casos, es importante estar siempre "encendida" y no perder nunca una petición de guardar o recuperar los datos. Tanto para las personas como para innumerables aplicaciones, una base de datos no disponible es un problema. Por eso, para los sistemas AP, la experiencia es lo más importante.

CockroachDB está basado en CP, Couchbase es Variable de CP a AP

CockroachDB es una base de datos basada en CPcada escritura en CockroachDB es transaccional y se replica de acuerdo con el consenso basado en RAFT a almacenes de disco que contienen rangos de datos Clave/Valor. Por lo tanto, CockroachDB es una base de datos extremadamente consistente. Su gran blog explica que son "casi" capaces de mantener "Serializable estricto" de Jepsen nivel de coherencia en su base de datos.

Couchbase es, de hecho, una base de datos fuertemente consistente también, pero ofrece variables para permitirse a sí misma modificar los niveles de consistencia para la disponibilidad, transformándola en un sistema AP. La consistencia se puede conseguir en milisegundos a través de la replicación asíncrona entre un clúster debido a su diseño en memoria. En términos comerciales, Couchbase se centra en ofrecer un rendimiento, una capacidad de ajuste y una disponibilidad extremadamente altos. Ofrecer baja latencia a las aplicaciones es un principio de diseño primordial.

El punto fuerte de Cockroach es su enfoque en la transaccionalidad a través de un diseño de clúster escalable. El punto fuerte de Couchbase es su enfoque en el rendimiento y la flexibilidad a escala. Su principal preocupación para una aplicación es la integridad de los datos, mientras que la nuestra es cómo se utilizan los datos (a menudo por personas). Los datos no te dicen cuando son el valor incorrecto, pero la gente te dirá cuando tu aplicación es lenta o no está disponible.

Transacciones ACID

Desde el punto de vista transaccional, Couchbase no sigue el protocolo RAFT, pero los principios son los mismos. Sin embargo, Couchbase ofrece, y recientemente ha recibido la aprobación de patente para, multi-documento Transacciones ACID para documentos JSON. A diferencia de CockroachDB, estas características son ajustables para durabilidad y niveles de aislamiento. Según Jepsen, las transacciones pueden aislarse para apoyar Lecturas atómicas monotónicasque es el nivel más alto de aislamiento que se concede a los sistemas siempre disponibles.

Escalado de clusters mediante mapas de localización de datos

Ambas bases de datos distribuidas escalan bien. CockroachDB escala sus nodos definiendo clusters de raft (normalmente tres) de rangos de datos clave/valor en una partición o almacén de datos. Un nodo CockroachDB puede alojar tanto líderes como réplicas de los rangos de datos en su almacén, y el tamaño de los rangos se gestiona y particiona automáticamente. La parte inteligente de CockroachDB es que estos rangos de datos KV basados en balsas son pequeños y fácilmente replicables a otros nodos. Así, una instancia EC2 puede alojar muchos conjuntos de rangos de datos de líder y dos réplicas. 

La capa de distribución de su arquitectura es la que utiliza cada nodo de CockroachDB para encontrar la ubicación de los datos de la aplicación utilizando su "estructura de mapa ordenado monolítico". La estructura de árbol de este mapa se llama recursivamente y almacena en caché las ubicaciones en el nodo. A continuación, los RPC envían solicitudes de consulta por lotes al nodo que aloja al líder del rango de balsas.

CockroachDB está diseñado para que cada nodo sea homogéneo, requiera poca configuración y todos los nodos realicen el mismo tipo de trabajo. Caracterizan su diseño de disponibilidad como "disponibilidad multiactiva".

Diseño de clúster activo-activo

Couchbase soporta un diseño de cluster activo-activo donde cualquier miembro del cluster puede tomar una escritura o una lectura. Esta flexibilidad es posible gracias a dos decisiones de diseño. En primer lugar, de forma similar a CockroachDB, la ubicación de los datos de Couchbase es gestionada por el clúster. Pero a diferencia de CockroachDB, que requiere que cada nodo para gestionar, consultar y almacenar en caché el mapa, Couchbase entrega el mapa del clúster al aplicación dentro del SDK de Couchbase. De este modo, la aplicación siempre sabe dónde están sus datos, eliminando las consultas de ubicación que suelen minar los recursos de la infraestructura. Couchbase reduce el tráfico ruidoso dentro de la base de datos para poder almacenar en caché el trabajo real. Una explicación de las diferencias se puede encontrar en este presentación del tratamiento de datos en la nube.

La replicación de Couchbase y las funciones de particionamiento automático se gestionan de forma similar a Cockroach-vBuckets divide los datos de Couchbase en particiones para la replicación y la gestión del almacenamiento. El mapa del cluster de Couchbase indica a la aplicación dónde se encuentra el nodo activo con permisos de escritura para el vBucket y dónde se encuentran sus réplicas. En caso de fallo de un vBucket activo, una réplica toma el relevo y se convierte en el conjunto de documentos activo y con permisos de escritura. A continuación, se construye y llena una réplica de sustitución. Toda la replicación dentro del clúster (y la replicación entre clústeres a través de XDCR) se realiza en memoria y se puede ajustar el rendimiento.

Caché en memoria y ajuste del rendimiento

El blog de CockroachDB explica su consumo de memoria, ya que puede utilizarse simultáneamente para muchos tipos de actividades de caché, como la caché RocksDB (que contiene los datos KV de un rango de datos), el mapa que localiza los nodos donde se alojan los líderes de rangos de datos, las conexiones de sesión de los clientes, los canales de consulta para ejecutar consultas SQL, las operaciones de consulta SQL y otras actividades de cada capa arquitectónica. Por supuesto, cuanto más rápida sea la CPU del host, más rápidas serán algunas operaciones. Aún así, no parece haber forma de ajustar el rendimiento de los recursos a operaciones específicas como el escalado multidimensional de Couchbase.

Al igual que CockroachDB, el núcleo de Couchbase es un almacén de datos clave/valor de alto rendimiento (llamado Magma), que permite acceder a los datos a gran velocidad. Además, Couchbase utiliza su memcached ofreciendo procesamiento en memoria no sólo de este acceso Clave/Valor, sino también de todas las operaciones internas, incluyendo replicación intra-cluster para tolerancia a fallos, replicación inter-cluster (XDCR) para localización geográfica, así como operaciones de consulta, búsqueda, análisis y eventos. Pero a diferencia de CockroachDB, Couchbase es configurable en cuanto a rendimiento, de modo que cualquiera de estos servicios de Couchbase puede ajustarse en cuanto a rendimiento a su infraestructura de alojamiento y a los requisitos de la aplicación. Si el servicio de acceso a datos necesita más memoria o CPU, dale más nodos, RAM o CPU. Puedes hacer lo mismo con todos los servicios independientes de Couchbase. Esta característica se llama escalado multidimensionaly es exclusivo de Couchbase.

Con el escalado multidimensional de Couchbase, la replicación de datos y los servicios de acceso pueden tener su propio conjunto de nodo dedicado y asignaciones de memoria, al igual que cada uno de los servicios de consulta, indexación, búsqueda, eventos y analítica.

Soporte de consultas SQL

Ambas bases de datos ofrecen soporte para SQL. Sin embargo, CockroachDB soporta la API PostgreSQL, estructuras de esquema y ANSI SQL. Couchbase no requiere estructuras de esquema, pero están disponibles. Del mismo modo, Couchbase no requiere una fuerte tipificación de datos, ni ofrece soporte para restricciones de esquema específicas dentro de la base de datos, dejando al desarrollador de aplicaciones la tarea de implementarlas.

Couchbase utiliza JSON como formato de acceso a datos flexible y fácil de modificar, y lo ha ampliado para que admita, entre otros, la búsqueda de texto completo y las estructuras de series temporales. Esta extensibilidad da a Couchbase la ventaja de poder hacer el trabajo de hasta seis productos diferentes. Couchbase también ofrece motores de servicio para eventos en JavaScript y Python, funciones definidas por el usuario, un optimizador de consultas basado en costes para SQL++ (SQL para JSON, antes llamado N1QL), agregaciones analíticas sobre datos activos y realización de copias de seguridad de la base de datos. Las interfaces con estos servicios son intencionadamente intuitivas para ayudar a una rápida integración, por ejemplo, utilizando SQL++, ya que funciona de forma idéntica a SQL para la mayoría de los usuarios.

Replicación y sincronización

CockroachDB no soporta replicación entre centros de datos, pero puede desplegar nodos de cluster en diferentes regiones geográficas. Couchbase soporta consistencia eventual para XDCR y utiliza un método de resolución de conflictos basado en CAS (Check and Swap) cuando se encuentran documentos con el mismo valor CAS con sello HCL (reloj híbrido-local). En este caso, se puede especificar como ganador el documento al que se haya accedido más activamente o el más reciente. CockroachDB también utiliza un HCL como sello de tiempo para la coherencia y la resolución de conflictos. Couchbase también ofrece funciones de sincronización móvil para su base de datos móvil Couchbase Lite.

Lectura de datos obsoletos

Las características de replicación, incluyendo aquellas para mantener la consistencia de escritura y lectura (Serialized para CockroachDB, Monotonic Atomic View para transacciones distribuidas Couchbase) y cualquier otra actividad en CockroachDB es tratada como una transacción con garantías ACID. Para las lecturas, CockroachDB ofrece ambas:

    • Muy coherente ("no-ventas") lee: El tipo de lectura por defecto y más común, pasan por el arrendatario donde estas lecturas ven todas las escrituras realizadas por escritores que se comprometieron antes de que comenzara la transacción de lectura. Siempre devuelven datos correctos y actualizados.
    • Lecturas rancias: Útil en situaciones en las que puede permitirse leer datos ligeramente obsoletos a cambio de lecturas más rápidas. Sólo se pueden utilizar en transacciones de sólo lectura que utilicen la función A LA HORA DEL SISTEMA cláusula. No es necesario que pasen por el arrendatario, ya que garantizan la coherencia leyendo de una réplica local en una marca de tiempo que nunca es superior a la de la cláusula hora de cierre.

Couchbase es una base de datos fuertemente consistente cuyo nivel de aislamiento debe ser considerado Vista atómica monotónica para lecturas transaccionales. Couchbase podría devolver datos obsoletos cuando no se utilizan transacciones ACID, pero esto es controlable por el desarrollador.  

¿Qué base de datos elegir?

Si las transacciones duraderas para 100% de sus datos son su principal (o única) preocupación, elija CockroachDB. Pero debido a su inflexibilidad, ya que se trata de un diseño relacional y una instalación monolítica, no es fácilmente ajustable a las necesidades de rendimiento y escalado de su aplicación, excepto para su escalado de transacciones y almacenamiento. Debido a esto, CockroachDB probablemente introducirá problemas de rendimiento imprevistos cuya única solución es escalar verticalmente añadiendo RAM o CPU además de escalar horizontalmente para el almacenamiento. Como utiliza un diseño basado en esquemas, será más difícil evolucionar y cambiar una vez desplegada la base de datos.

Si el rendimiento, la flexibilidad, la adaptabilidad de las aplicaciones, la felicidad de los usuarios, la escala geográfica, la rentabilidad o la movilidad le preocupan lo más mínimo, utilice Couchbase. Couchbase ofrece numerosas funciones de ajuste del rendimiento y optimización de la infraestructura que pueden maximizar la eficiencia de su entorno. Couchbase ofrecerá tiempos de latencia impresionantemente bajos que no se deteriorarán bajo carga o a escala. Esto asegura que Couchbase puede hacer más trabajo con menos recursos y también ser más rentable en general.

El diseño basado en JSON de Couchbase permite al equipo de desarrollo controlar las estructuras de datos utilizadas por la aplicación, y se pueden hacer modificaciones a estas estructuras continuamente, incluso después de que la aplicación esté en producción. Couchbase ofrece transacciones ACID distribuidas y multidocumento, pero no las requiere. Esta elección de diseño permite a los desarrolladores equilibrar las garantías transaccionales con las necesidades de rendimiento y disponibilidad. 

Couchbase ofrece servicios XDCR y de aplicaciones móviles, incluida una base de datos integrable, Couchbase Lite. En última instancia, Couchbase ofrece datos más cerca de donde una aplicación los consumirá y soporta más patrones de diseño de acceso a datos (clave/valor, JSON, búsqueda, relacional, series temporales, analítica y eventos), dando a los desarrolladores más libertad de características sin introducir más complejidad arquitectónica. Couchbase ofrece a los equipos de desarrollo más opciones y libertad para crear lo que necesiten.  

Ambas son grandes bases de datos, pero por motivos diferentes.

 

Autor

Publicado por Jeff Morris, Vicepresidente de Marketing de Producto

Jeff Morris es vicepresidente de marketing de productos y soluciones de Couchbase. Lleva más de tres décadas comercializando herramientas de desarrollo de software, bases de datos, herramientas analíticas, servicios en la nube y otros productos de código abierto. Él sería el primero en decir que cualquiera que busque una base de datos como servicio en la nube rápida, flexible, familiar y asequible puede dejar de buscar después de echar un vistazo a Couchbase.

Dejar una respuesta