Lanzamiento de Couchbase Lite 2.8 ha anunciado la compatibilidad con la solución de sincronización de bases de datos peer-to-peer para empresas. La nueva capacidad permite la sincronización directa entre aplicaciones móviles y no móviles integradas con Couchbase Lite sin necesidad de un punto de control basado en la nube.
En este post, ofrecemos una visión general de la función y vamos a demostrar lo fácil que es configurar la sincronización peer-to-peer entre dos clientes. Para más detalles, consulte la documentación para ver la API específica de la plataforma y fragmentos de código de ejemplo.
En primer lugar, algunos casos de uso...
Casos prácticos
Los usuarios de aplicaciones en entornos desconectados que requieren la capacidad de colaborar entre sí son candidatos para la sincronización de bases de datos peer-to-peer. He aquí algunos ejemplos
- Aplicaciones de campo :
Los trabajadores sobre el terreno en una obra, los voluntarios en una zona de recuperación de catástrofes, los mineros o los sanitarios en clínicas móviles pueden colaborar y coordinar tareas entre sí a través de una red de área local sin necesidad de conexión a Internet. - Viajar :
Los auxiliares de vuelo que actualizan los pedidos de comida pueden actualizar la información de inventario que se sincroniza automáticamente con otros auxiliares durante el vuelo. De este modo, un auxiliar de vuelo no ofrece una comida después de que se haya ofrecido la última. - Hostelería :
Los flujos de trabajo de los pedidos de comida en los restaurantes pueden automatizarse. Los camareros pueden tomar y enviar pedidos a la cocina, comprobar el estado de los pedidos, cobrar, etc. desde dispositivos móviles sin moverse de la mesa del cliente. - Marítimo :
Los miembros de la tripulación a bordo de los buques pueden registrar y sincronizar en tiempo real las métricas de los equipos con otros miembros de la tripulación, lo que permite tomar decisiones en tiempo real.
Despliegue típico
A continuación se muestra un despliegue típico utilizando Couchbase para la sincronización de bases de datos peer-to-peer en entornos desconectados. Un entorno desconectado o el "borde" puede funcionar de forma autónoma sin ninguna conectividad a los servidores backend basados en la nube. Sin embargo, cuando hay conectividad a Internet, los cambios desde el borde desconectado pueden ser sincronizado con el servidor Couchbase remoto a través de Sync Gateway.
Los clientes de Couchbase Lite pueden organizarse en diferentes topologías. Puede ser una topología en estrella donde un cliente puede ser designado como punto de control primario o escucha y los otros clientes pueden comunicarse entre sí a través del escucha designado. Alternativamente, los clientes pueden ser organizados en una topología de malla conectada donde cada cliente está conectado directamente a cada otro cliente en la misma red.

Flujo de trabajo entre iguales
La sincronización entre pares se basa en Websockets y funciona en redes basadas en IP. Es el mismo protocolo que se utiliza para sincronizar con el Sync Gateway remoto. Este es un flujo de trabajo de alto nivel de sincronización de datos peer-to-peer con Couchbase Lite. Cada par participante toma el papel de un "Par pasivo" que es análogo a un servidor en una comunicación típica cliente-servidor y/o un "Par Activo" que es análogo a un cliente en una comunicación típica cliente-servidor. Una aplicación puede desempeñar tanto el papel de par activo como el de par pasivo.

- En receptor de websockets se inicializa en el Peer Pasivo con la base de datos de Couchbase Lite a sincronizar. Hay una serie de opciones configurables disponibles, incluyendo la posibilidad de especificar el puerto, la interfaz de red, TLSIdentity, etc.
- Una de las opciones configurables del
Oyente
es la función de llamada de retorno del autenticador que se invocará cuando el receptor reciba las credenciales del par activo. EsteListenerAuthenticator
debe ser implementada por la aplicación e incluir lógica para autenticar las credenciales del cliente. - El par pasivo anuncia sus servicios. Este paso se maneja completamente dentro de la aplicación y Couchbase Lite no juega ningún papel aquí. Típicamente, las aplicaciones aprovechan marcos de trabajo específicos de la plataforma como NSNetService para este fin. De hecho, dependiendo del despliegue, este paso puede ser opcional. Por ejemplo, el dispositivo podría estar configurado con una dirección IP estática o, si hay soporte DNS, el cliente podría estar a la escucha en una URL conocida.
- El peer activo o cliente busca peers pasivos a los que conectarse. De nuevo, este paso se maneja completamente dentro de la aplicación y Couchbase Lite no juega ningún papel aquí. Típicamente, las aplicaciones aprovechan marcos de trabajo específicos de la plataforma como NSNetService para este fin. Por supuesto, si el
Oyente
está escuchando en una dirección conocida, entonces este paso sería opcional. - Una vez que el par activo identifica el par al que debe conectarse, debe establecer una conexión de replicación con el otro extremo. El replicador para la sincronización entre pares se configura exactamente de la misma forma que si estableciera la conexión con la puerta de enlace de sincronización remota.
- Como parte del protocolo TLS de establecimiento de la conexión, se autentican los certificados del servidor. Esto ocurre de forma transparente para la aplicación.
- Una vez autenticado el certificado del servidor, las credenciales del cliente se envían al receptor para su autenticación. Couchbase Lite soporta tanto la autenticación básica como la basada en las credenciales del cliente. autenticación.
- Las credenciales entrantes se envían a la dirección registrada
ListenerAuthenticator
donde se validan. Una vez autenticados, se establece el canal de comunicación entre los pares. - A partir de ese momento, cada vez que se produce un cambio de documento en la base de datos, el cambio de datos se sincroniza automáticamente con el otro extremo. La dirección de la transferencia de datos puede ser unidireccional o bidireccional.
Atributos de la tecnología Sync
Sincronizar correctamente es difícil. Hay varias consideraciones a tener en cuenta y aquí tienes una hoja de trucos sobre cómo funciona la sincronización entre pares. Consulta la documentación para más detalles
Característica | Sincronización Peer-to-Peer de Couchbase Lite |
---|---|
Seguridad | Compatibilidad inmediata con el cifrado TLS. Autenticación basada en certificados. Autenticación básica. Las aplicaciones tienen que escribir 0 líneas de código para obtener el cifrado TLS. |
Resistencia de la red | Reintentos con retroceso exponencial. Las réplicas continuas reintentan indefinidamente, mientras que las réplicas únicas abandonan tras un número determinado de intentos. |
Eficacia | Con la tecnología Delta Sync, optimice los costes de transferencia de datos sincronizando sólo las partes del documento que han cambiado. |
Conflictos de datos | Integrado. Por defecto, los conflictos se resuelven automáticamente utilizando políticas predefinidas. Además, las aplicaciones tienen flexibilidad para especificar sus propias funciones personalizadas de fusión bidireccional para tratar los conflictos. |
Facilidad de uso para los desarrolladores | Sólo hacen falta unas pocas líneas de código para poner en marcha la sincronización peer-to-peer. Por supuesto, hay una serie de opciones configurables para personalizarlo según tus necesidades |
Soporte multiplataforma | Couchbase Lite es compatible con varias plataformas móviles y no móviles. La funcionalidad de sincronización de datos peer-to-peer permite la sincronización entre plataformas heterogéneas - por ejemplo entre una aplicación Android y iOS |
Topologías flexibles | Dado que cada peer participante puede actuar como Listener, Replicator o ambos, los clientes de Couchbase Lite que participan en la sincronización peer-to-peer pueden organizarse en diferentes topologías como estrella, malla, etc. La elección depende de las necesidades de la aplicación |
Código de inicio
Puede consultar nuestra páginas de tutoriales para una aplicación completa que demuestra las capacidades de sincronización peer-to-peer. Pero aquí, me gustaría compartir el código mínimo necesario para poner en marcha la sincronización para que puedas ver por ti mismo lo fácil que es poner en marcha el flujo de trabajo descrito anteriormente. Aunque los fragmentos son para iOS, debería ser sencillo adaptarlo a cualquier otra plataforma Couchbase Lite.
Par pasivo
El siguiente fragmento de código inicializa la escucha en el par pasivo que escucha las conexiones entrantes entre pares
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
// 1: Inicializar la Configuración del Listener con la base de datos Couchbase Lite a sincronizar deje listenerConfig = URLEndpointListenerConfiguration(base de datos: db) // 2: Adjuntar el autenticador que se utilizará para validar las credenciales del cliente. // En este ejemplo, he adjuntado un autenticador para validar las credenciales de autenticación básicas listenerConfig.autentificador = ListenerPasswordAuthenticator.init { (nombre de usuario, contraseña) -> Bool en si (auto._allowlistedUsers.contiene(["contraseña" : contraseña, "nombre":nombre de usuario])) { devolver verdadero } devolver falso } // Opcionalmente, anule otras opciones de configuración como delta sync, TLSIdentity del servidor, etc. // Por defecto, el listener se configura con un cert autofirmado que es generado por Couchbase LIte // Este certificado se denomina "certificado anónimo autofirmado". // 3: Inicializar Listener con la configuración de Listener _websocketListener = URLEndpointListener(config: listenerConfig) // 4: Iniciar el Listener. El listener está ahora a la escucha de conexiones entrantes pruebe? websocketListener.iniciar() |
Par activo
El siguiente fragmento de código inicializa el replicador para seguro sincronización peer-to-peer. Es la misma lógica de replicación que se utiliza cuando se replica a un punto final remoto.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
// 1: Inicializar la configuración del replicador con la base de datos Couchbase Lite a sincronizar // y el endpoint URL correspondiente a la escucha de websockets deje config = ReplicatorConfiguration.init(base de datos: userDb, objetivo: URLEndpoint.init(url:targetUrl)) // 2: Configurar el autenticador con las credenciales del cliente. En este caso, estamos utilizando autenticación básica deje autentificador = BasicAuthenticator(nombre de usuario: usuario, contraseña: contraseña) config.autentificador = autentificador // Opcionalmente, establezca otras opciones de configuración como el modo de replicación, la resolución de conflictos, etc. // 3: Inicializar el replicador con la configuración del replicador replicadorParaUsuarioDb = Replicador.init(config: config) // 4: Configurar el replicador para que sólo acepte certificados autofirmados para el servidor/oyente // Esto se debe a que estamos utilizando el TLSIdentity por defecto en el lado del oyente que corresponde a // certificado anónimo autofirmado config.acceptOnlySelfSignedServerCertificate = true // 5: Iniciar la replicación replicadorParaUsuarioDb?.iniciar() |
Ya está. En tan sólo unos sencillos pasos, puedes conseguir una sincronización segura peer-to-peer con Couchbase Lite.
¿Qué pasa con la Sincronización entre iguales en 2.1?
Si ha estado trabajando con Couchbase Lite, probablemente esté familiarizado con la función Sincronización entre pares que se introdujo en 2.1 liberación de Couchbase Lite. En la versión 2.1, proporcionamos un MessageEndpointConnection que debía ser implementada por la aplicación. El replicador de Couchbase Lite se comunicaba con la aplicación a través de esta interfaz, proporcionando los cambios de datos que debían sincronizarse. Cómo se transferían los datos al par receptor dependía completamente de la aplicación. Proporcionar una interfaz ofrecía a los desarrolladores de aplicaciones la flexibilidad de utilizar cualquier marco de comunicaciones de su elección y podía utilizarse a través de cualquier transporte (IP o no IP).
En 2.8 hemos simplificado enormemente la tarea proporcionando una implementación "out-of-box" para la sincronización peer-to-peer sobre redes IP. Como verás en breve, sólo hacen falta unas pocas líneas de código para ponerlo en marcha. El sitio MessageEndpointConnection sigue siendo compatible. Así que si ya has implementado tu solución de sincronización con lo que se ofrecía en 2.1, no es necesario que migres tu solución para utilizar la nueva API. De hecho, esa sigue siendo su única opción si está sincronizando a través de redes no basadas en IP. Sin embargo, si estás sincronizando a través de redes IP, sería recomendable ya que simplificaría enormemente el código de tu aplicación y reduciría los costes de pruebas y mantenimiento.
¿Qué sigue?
Couchbase es la única solución de sincronización de bases de datos peer-to-peer que permite a los clientes comunicarse directamente entre sí en entornos desconectados.
Puede descargar Couchbase Lite y evauar la funcionalidad de forma gratuita.
Si quiere profundizar en los detalles, aquí puede encontrar más información
– Documentación: Peer-to-Peer
– Tutoriales: Peer-to-Peer
– Página de soluciones: Soluciones entre iguales
– Conectar vídeo con demostración: Sincronización entre pares con Couchbase Lite
En Foros de Couchbase es un buen lugar para plantear preguntas. Por favor, deje un comentario a continuación o no dude en ponerse en contacto conmigo a través de Twitter o envíame un correo electrónico
Supongo que couchbase ha renunciado a la sincronización móvil peer-to-peer en una plataforma Android. He mirado la documentación y no he conseguido que funcione. Los únicos ejemplos de demostración son con Ios y Xamarin. No estoy seguro de si es tan simple de implementar por qué un simple ejemplo de demostración de la comunicación bidireccional debe ser fácil de proporcionar a la comunidad Android. Estoy a punto de renunciar a couchbase.