Servidor Couchbase

Historia de todo en Couchbase: DCP

M. David Allen es un ingeniero de software y emprendedor que, durante más de una década, ha trabajado con casi todos los lenguajes de programación y sistemas de bases de datos que ha tenido a su alcance. David ha trabajado anteriormente en muchos sectores, como el financiero, el sanitario y el gubernamental, centrándose normalmente en retos de integración de datos a gran escala, investigación aplicada en transición e innovación de nuevas tecnologías. Tiene un máster de la Virginia Commonwealth University, pero desde que abandonó la educación formal sigue siendo un estudiante permanente de tecnología.

Historia de todo en Couchbase: DCP

Escondido detrás de un acrónimo DCP (database change protocol), Couchbase tiene un superpoder secreto. La mayoría de la gente piensa en las bases de datos como ubicaciones de almacenamiento de datos en un momento determinado. Pero con Protocolo de cambio de base de datos (DCP)Un cluster Couchbase puede ser visto como un flujo continuo de cambios.

Esencialmente, Couchbase puede "rebobinar la historia" y reproducir todo lo ocurrido en la base de datos desde el principio. Al hacerlo, puede resolver cualquier estado interno desde entonces. En este artículo vamos a cubrir por qué alguien querría hacer una cosa tan loca en primer lugar, y cómo podemos explotar este superpoder para hacer cosas extra cool con nuestros documentos.

¿Qué es DCP?

Como base de datos en clúster, Couchbase aborda toda una serie de problemas especializados que la arquitectura de bases de datos tiene que resolver. Tiene que mantener varios nodos sincronizados entre sí, incluso si uno de ellos falla temporalmente o se produce una interrupción de la red entre ellos. También tiene que ser rápida, lo suficiente como para recibir grandes volúmenes de documentos nuevos y gestionar las consultas a medida que surgen.

Parte del diseño subyacente de Couchbase y la forma en que esto es posible es a través de los cambios de flujo en un enfoque de sólo apéndice[1]. Esto significa que cuando cambias un documento, Couchbase no busca el documento y lo modifica en el disco. En lugar de eso, simplemente añade a un registro de claves y valores el resultado de tu mutación, y sigue moviéndose. De esta forma, las escrituras pueden hacerse muy rápido, y es más fácil coordinar múltiples nodos.

Si está familiarizado con las bases de datos relacionales, el planteamiento de DCP es algo similar al de registro de escritura anticipada que se ven en otros programas.

¿Por qué preocuparse de cómo lo hace Couchbase internamente?

A cierto nivel, querrá que su base de datos se preocupe de estas cosas para para que tú no tengas que hacerlo. Pero en el caso de DCP, nos importa porque podemos vampiro aprovechar ese flujo de eventos y hacer todo tipo de cosas interesantes con él, como:

Replicación de datos en bases de datos completamente distintas. Couchbase ya dispone de una serie de conectorescomo Elasticsearch. Puedes configurar un cluster separado de Elasticsearch, y hacer que contenga una copia de todos los datos de Couchbase, exponiendo todos tus datos a las características que la otra base de datos puede proporcionarte. Mantener estos dos clusters normalmente sería un problema de sincronización bastante peliagudo, pero como los conectores se alimentan principalmente de DCP, podemos pensar en los mensajes de DCP como un flujo de "git commits" que mantienen continuamente actualizada la otra base de datos.

Uso de enfoques basados en colas e integración con otros microservicios. Si puedes escribir un trozo de código para escuchar ese flujo DCP, también puedes filtrarlo sólo a los mensajes que te interesan. Tal vez sea sólo cuando algo se elimina, o sólo las actualizaciones de un determinado tipo de documento. En cualquier caso, puedes usar un cliente DCP para filtrar ese flujo de mensajes, y publicar los mensajes extra en una cola RabbitMQ, un tema Kafkao lo que necesites. Esto puede ser muy útil para implementar otra lógica de negocio compleja. Por ejemplo, imaginemos una compañía de seguros que, dependiendo del estado del cliente, necesita activar alguna lógica adicional relacionada con el cumplimiento. Escuche las mutaciones de los documentos del cliente, filtre por estado, publique en la cola correcta y deje que algún otro servicio se preocupe de la diferencia entre lo que debe hacerse para los clientes de Virginia frente a los de Maryland.

Análisis de series temporales/revisiones. Cada valor de su base de datos cambia con el tiempo. Algunos se escriben una vez y se olvidan. Otros pueden actualizarse con frecuencia. Para los que se actualizan con frecuencia, DCP le permite tratar cada elemento como un series temporales. Se sabe cuál era el valor antes, cuándo cambió y a qué cambió. Esto permite familias enteras de interesantes análisis de datos posteriores. ¿Adivinaría que la gente valora más cervezas en su sitio los viernes y sábados por la noche, o los martes por la mañana?

Esencialmente, DCP se puede utilizar como una especie de pegamento arquitectónico; una forma de sacar los datos de Couchbase y llevarlos a otros sistemas, y eso hace que Couchbase sea más fácil y flexible de integrar con otros sistemas.

Por último, hay que decir que la función estándar de replicación entre centros de datos (XDCR) de Couchbase, que permite replicar a otro clúster de Couchbase para copias de seguridad y recuperación en caso de desastre. puede utilizar DCP de manera muy similar. Así que, en esencia, DCP no es sólo una "bonita característica extra", está realmente integrada en el núcleo, desde los fundamentos de cómo funciona la arquitectura de almacenamiento, hasta proporcionar una base para otras características de Couchbase como XDCR.

¿Y si quisiera hacer ?

Vas a necesitar un cliente DCP, que no es más que un módulo de software que te permite aceptar mensajes DCP y procesarlos. En el momento de escribir esto, hay uno bueno listo para Javay una para Python aunque puede que esté desfasado.

Algunos detalles de DCP ...

El DCP puede considerarse básicamente como un flujo de mensajes de mutación y borrado. Una mutación es cualquier cambio en una clave o en su contenido. Un borrado es exactamente lo que parece. Existen otros tipos de mensajes DCPpero limitémonos por ahora a las supresiones y mutaciones.

¿Qué contiene un mensaje DCP? Hay dos elementos importantes:

  • Un identificador de vBucket. Entre bastidores, Couchbase no es más que un gran almacén de claves/valores. Como sabemos que es una base de datos distribuida, Couchbase trocea todas las claves de la base de datos y las asigna a diferentes "particiones", llamadas vBuckets. El identificador vBucket sólo le dice a la base de datos qué segmento del espacio de claves está cambiando. Hay mucha más información disponible sobre este tema si quieres profundizar, pero hay mucha configurabilidad en Couchbase alrededor de los vBuckets. En esta imagen, podemos ver que 9 vBuckets están siendo distribuidos a través de 3 servidores, sin redundancia.
  • Un número creciente. El valor del número no es muy importante, pero lo importante es que siempre sube. Así es como Couchbase puede ordenar todos los mensajes DCP en el tiempo, lo cual es bastante importante.

vbuckets

Fuente de la imagen: https://static.couchbaseinc.hosting.ca.onehippo.com/images/server/3.x/20170420-170703/vbuckets.png

Nuestro sencillo caso práctico

Tomemos como ejemplo muestra de cerveza como ejemplo. Los usuarios pueden valorar las cervezas; cuando la valoración agregada de una cerveza alcanza un determinado umbral, los responsables de marketing quieren saberlo. Probablemente llamarán a la cervecera y le preguntarán si quiere anunciarse en nuestro sitio web de cerveza. O mejor aún, tal vez si una cerveza alcanza las 5 estrellas se abastezcan para la próxima reunión de empresa. En cualquier caso, quieren conocer las cervezas de 5 estrellas.

El problema es que los chicos de marketing tienen un sistema de clientes potenciales independiente. Podemos notificárselo con un simple mensaje HTTP a su sistema. Cuando una cerveza alcanza las 5 estrellas, avisamos a su sistema de contactos para que echen un vistazo a Foo Brew.

Código

El código que se muestra a continuación está adaptado del tutorial de la aplicación Cliente Java DCP. Una vez que entiendes lo que ocurre, es bastante sencillo adaptarlo a tus necesidades.

¿Qué ocurre en este código?

  • Conexión a una instancia cliente (y a un bucket concreto)
  • Indique al cliente el intervalo de tiempo de los mensajes que nos interesan. Nosotros vamos a por el historial completo del cluster, pero podríamos elegir cualquier periodo de tiempo que queramos: StreamFrom.BEGINNING, StreamTo.INFINITY
  • Indica al cliente cómo procesar un mensaje individual; ése es el código dataEventHandler.
  • En nuestro caso, estamos analizando el JSON del documento subyacente y comprobando la calificación de la cerveza.
  • En este caso, nuestro proceso se ejecuta eternamente, recibiendo continuamente nuevos mensajes a medida que se producen.

Aspectos a tener en cuenta

En nuestro ejemplo simplificado, lo que estamos almacenando en Couchbase es siempre un documento JSON. Pero este no tiene por qué ser el caso. Así que en tu aplicación, probablemente tendrás que construir algunas más inteligentes en ella para filtrar en base a las claves que te interesan, y no tratar de analizar todo como JSON. El contenido del evento DCP es un buffer de bytes, no es una cadena o un documento JSON. Esto es fiel a lo que Couchbase realmente almacena bajo el capó.

DCP también te informa de las mutaciones en momentos puntuales. Un detalle que hemos pasado un poco por alto es que, aunque las puntuaciones de algunas cervezas pueden superar el 4, esto no garantiza que la cerveza tenga esa puntuación. ahora mismosólo una garantía de que era una vez mutado a ese estado. Una construcción más sofisticada podría tener esto en cuenta.

Por último, ten en cuenta que realmente puede ser largo, dependiendo del tamaño y la velocidad de mutación del clúster. Así que tal vez quieras echar un vistazo a técnicas de control de flujo para que su cliente pueda seguir el flujo de acontecimientos.

¿Y ahora qué?

Ahora que ya conoce los DCP, puede que le interese echar un vistazo a Conectores disponibles en Couchbaseque, en su mayoría, ya se basan en DCP, y le ofrecen una forma de aprovechar todo esto sin necesidad de codificación.

Otro tema que hay que estudiar es sistemas de transmisión de datosLa mayoría de los proveedores de computación en nube, como AWS, Google Compute Engine y otros, están haciendo cosas notables en este ámbito. La mayoría de los proveedores de computación en la nube como AWS, Google Compute Engine y otros están haciendo algunas cosas notables en este espacio, y con DCP eres totalmente capaz de poner cualquier cosa que tengas en tu clúster de Couchbase en un flujo de datos que se puede conectar con cualquiera de estas potentes herramientas downstream.

[1] Es un poco más complicado, pero estoy simplificando y enlazando la arquitectura de almacenamiento para que puedas profundizar en el conocimiento de este tema.

Este post forma parte del Programa de Escritura de la Comunidad Couchbase

Comparte este artículo
Recibe actualizaciones del blog de Couchbase en tu bandeja de entrada
Este campo es obligatorio.

Author

Posted by Laura Czajkowski

Laura Czajkowski es la Snr. Developer Community Manager en Couchbase supervisando la comunidad. Es responsable de nuestro boletín mensual para desarrolladores.

Deja un comentario

¿Listo para empezar con Couchbase Capella?

Empezar a construir

Consulte nuestro portal para desarrolladores para explorar NoSQL, buscar recursos y empezar con tutoriales.

Utilizar Capella gratis

Ponte manos a la obra con Couchbase en unos pocos clics. Capella DBaaS es la forma más fácil y rápida de empezar.

Póngase en contacto

¿Quieres saber más sobre las ofertas de Couchbase? Permítanos ayudarle.