Benchmarking Real-Time Database Synchronisation Architectures: REST Polling, WebSocket Push, and CockroachDB CDC
Este artículo presenta un benchmark controlado que compara las arquitecturas de polling REST, WebSocket push y CockroachDB CDC para la sincronización de bases de datos en tiempo real, revelando que mientras WebSocket push ofrece la latencia mediana más baja y el polling REST proporciona retrasos acotados predecibles, CDC ofrece medianas competitivas pero sufre una latencia de cola significativa debido al procesamiento por lotes e incompatibilidades de protocolo específicas.
Artículo original bajo licencia CC BY 4.0 (https://creativecommons.org/licenses/by/4.0/). Esta es una explicación generada por IA del artículo a continuación. No ha sido escrita ni avalada por los autores. Para mayor precisión técnica, consulte el artículo original. Leer descargo de responsabilidad completo
En el mundo del software moderno, existe un deseo creciente de aplicaciones que se sientan como si vivieran en tu dispositivo, incluso cuando no estás conectado a internet. Este enfoque, a menudo llamado software de primera prioridad local (local-first), te permite editar un documento o actualizar una lista mientras estás desconectado, con los cambios esperando ser enviados a un servidor central una vez que tu conexión regrese. El desafío radica en el momento en que la conexión se restablece: ¿cómo decide la computadora qué versión de los datos es la correcta y con qué rapidez puede actualizar el servidor central sin hacer esperar al usuario? Para que esto funcione sin problemas, el sistema necesita una forma fiable de escuchar nueva información y entregarla instantáneamente. Si la actualización es demasiado lenta, el usuario siente un retraso; si el sistema es demasiado complejo, agota la batería o falla. La pregunta central para los ingenieros es cómo construir este mecanismo de escucha: ¿debería el dispositivo preguntar constantemente al servidor si algo ha cambiado, debería el servidor gritar los cambios inmediatamente, o debería la propia base de datos llevar un registro continuo de cada acción para ser leído después?
Un investigador del Instituto Indio de Tecnología de Kharagpur se propuso probar estas tres estrategias comunes de forma paralela para ver cuál rinde mejor en un entorno controlado. El estudio comparó un método donde el cliente busca actualizaciones en intervalos de tiempo fijos, un método donde el servidor envía los cambios instantáneamente a través de una conexión permanente, y un método donde la base de datos transmite un registro de cada cambio a los suscriptores. Para asegurar una prueba justa, el investigador construyó tres sistemas que parecían idénticos para el usuario pero utilizaban engranajes internos diferentes. Un sistema utilizó una base de datos estándar con un simple bucle de "registro" (check-in). Otro utilizó la misma base de datos pero añadió un activador que disparaba una señal en el momento en que ocurría un cambio. El tercero utilizó una base de datos distribuida diferente que fue diseñada para transmitir su propio historial. El objetivo era medir el tiempo exacto que tardaba un cambio realizado por un usuario en viajar a través del sistema y aparecer en la pantalla del oyente, probando desde un solo usuario hasta cincuenta usuarios escribiendo al mismo tiempo.
Los resultados pintaron un cuadro claro de cómo se comporta cada método bajo presión. El sistema que dependía de que el servidor gritara los cambios instantáneamente mediante una conexión permanente resultó ser el más rápido. En los mejores casos, un cambio aparecía en la pantalla del oyente en tan solo dos milisegundos, e incluso cuando cincuenta personas escribían a la vez, el retraso rara vez superaba los sesenta y tres milisegundos. Este método mantuvo su velocidad notablemente constante, con las actualizaciones más lentas llegando todavía en menos de un cuarto de segundo. El método que dependía de que el cliente pidiera actualizaciones cada cien milisegundos era predecible pero más lento. Debido a que el cliente tenía que esperar su turno para preguntar, el retraso promedio era de alrededor de sesenta milisegundos, pero nunca podía ser más rápido que el tiempo entre comprobaciones. Cuando muchos usuarios escribían a la vez, este tiempo de espera crecía, elevando el retraso promedio a más de cien milisegundos. El sistema que utilizó el registro interno de cambios de la base de datos mostró un rendimiento mixto. Aunque la actualización típica llegaba rápidamente, a menudo en menos de un segundo, el sistema sufrió retrasos severos para las actualizaciones más lentas. Ocasionalmente, un cambio tardaba más de dos segundos en llegar, y en algunos casos, el retraso se extendía a más de tres segundos y medio.
El investigador descubrió que las actualizaciones más lentas en el sistema basado en registros no eran un fallo de la idea de registrar cambios en sí misma, sino un resultado de cómo el software específico estaba conectado. El sistema utilizó un recurso temporal para leer el registro de la base de datos porque la herramienta de conexión estándar no hablaba correctamente el lenguaje de la base de datos. Este recurso requería iniciar un nuevo proceso cada vez que la conexión se interrumpía, lo que añadía una pesada penalización de uno a cuatro segundos al retraso. Sin este obstáculo técnico específico, el método basado en registros podría haber funcionado mucho mejor, pero en esta prueba, los largos retrasos lo hacían inadecuado para aplicaciones donde los usuarios esperan una respuesta instantánea. El estudio también confirmó una regla simple para el método de comprobación: cuanto más tiempo se espere entre comprobaciones, mayor será el retraso promedio. Si un sistema comprueba cada cincuenta milisegundos, el tiempo de espera promedio es de unos treinta y seis milisegundos; si espera quinientos milisegundos entre comprobaciones, el tiempo de espera salta a más de trescientos milisegundos.
Estos hallazgos ofrecen una guía práctica para construir software que necesite mantenerse sincronizado. Para aplicaciones donde la velocidad es crítica, como herramientas de edición colaborativa donde los usuarios escriben juntos en tiempo real, el método donde el servidor envía los cambios instantáneamente es la elección clara. Ofrece el menor retraso y el rendimiento más consistente, incluso cuando muchas personas están usando el sistema a la vez. El método donde el cliente comprueba las actualizaciones a intervalos regulares es una opción sólida para aplicaciones más simples donde un retraso de unos pocos cientos de milisegundos es aceptable, o donde mantener la conexión abierta es difícil, como en dispositivos móviles que intentan ahorrar batería. El método que transmite el registro de la base de datos es potente para mover grandes cantidades de datos o crear copias de seguridad, pero la implementación específica probada aquí era demasiado lenta e impredecible para el uso interactivo. El estudio concluye que, si bien los tres métodos funcionan, la mejor elección depende enteramente de si la prioridad es la respuesta instantánea o la simplicidad operativa.
¿Ahogado en artículos de tu campo?
Recibe resúmenes diarios de los artículos más novedosos que coincidan con tus palabras clave de investigación — con resúmenes técnicos, en tu idioma.