Saltar al contenido

¿Patrón / algoritmo de sincronización cliente-servidor?

Solución:

Debería observar cómo funciona la gestión de cambios distribuida. Mire SVN, CVS y otros repositorios que administran el trabajo deltas.

Tienes varios casos de uso.

  • Sincronizar cambios. Su enfoque de registro de cambios (o historial delta) se ve bien para esto. Los clientes envían sus deltas al servidor; servidor consolida y distribuye los deltas a los clientes. Este es el caso típico. Las bases de datos llaman a esto “replicación de transacciones”.

  • El cliente ha perdido la sincronización. Ya sea a través de una copia de seguridad / restauración o debido a un error. En este caso, el cliente necesita obtener el estado actual del servidor sin pasar por los deltas. Esta es una copia del maestro al detalle, al diablo con los deltas y el rendimiento. Es una cosa de una sola vez; el cliente está roto; no intente optimizar esto, simplemente implemente una copia confiable.

  • El cliente sospecha. En este caso, debe comparar el cliente con el servidor para determinar si el cliente está actualizado y necesita deltas.

Debe seguir el patrón de diseño de la base de datos (y SVN) de numerar secuencialmente cada cambio. De esa manera, un cliente puede realizar una solicitud trivial (“¿Qué revisión debería tener?”) Antes de intentar sincronizar. E incluso entonces, la consulta (“Todos los deltas desde 2149”) es deliciosamente simple para que el cliente y el servidor la procesen.

Como parte del equipo, realicé muchos proyectos que implicaban sincronización de datos, por lo que debería ser competente para responder a esta pregunta.

La sincronización de datos es un concepto bastante amplio y hay mucho que discutir. Cubre una variedad de enfoques diferentes con sus ventajas y desventajas. Esta es una de las posibles clasificaciones basadas en dos perspectivas: Sincrónica / Asincrónica, Cliente / Servidor / Peer-to-Peer. La implementación de la sincronización depende en gran medida de estos factores, la complejidad del modelo de datos, la cantidad de datos transferidos y almacenados, y otros requisitos. Entonces, en cada caso particular, la elección debe ser a favor de la implementación más simple que cumpla con los requisitos de la aplicación.

Basándonos en una revisión de las soluciones estándar existentes, podemos delinear varias clases principales de sincronización, diferentes en la granularidad de los objetos sujetos a sincronización:

  • La sincronización de un documento completo o una base de datos se utiliza en aplicaciones basadas en la nube, como Dropbox, Google Drive o Yandex.Disk. Cuando el usuario edita y guarda un archivo, la nueva versión del archivo se carga en la nube por completo, sobrescribiendo la copia anterior. En caso de conflicto, ambas versiones del archivo se guardan para que el usuario pueda elegir qué versión es más relevante.
  • La sincronización de pares clave-valor se puede utilizar en aplicaciones con una estructura de datos simple, donde las variables se consideran atómicas, es decir, no se dividen en componentes lógicos. Esta opción es similar a la sincronización de documentos completos, ya que tanto el valor como el documento se pueden sobrescribir por completo. Sin embargo, desde la perspectiva del usuario, un documento es un objeto complejo compuesto por muchas partes, pero un par clave-valor no es más que una cadena corta o un número. Por tanto, en este caso podemos utilizar una estrategia más sencilla de resolución de conflictos, considerando el valor más relevante, si ha sido el último en cambiar.
  • La sincronización de datos estructurados como un árbol o un gráfico se utiliza en aplicaciones más sofisticadas donde la cantidad de datos es lo suficientemente grande como para enviar la base de datos en su totalidad en cada actualización. En este caso, los conflictos deben resolverse a nivel de objetos, campos o relaciones individuales. Nos enfocamos principalmente en esta opción.

Por lo tanto, recopilamos nuestro conocimiento en este artículo que creo que podría ser muy útil para todos los interesados ​​en el tema => Sincronización de datos en aplicaciones iOS basadas en datos centrales (http://blog.denivip.ru/index.php/2014/04 / data-syncing-in-core-data-based-ios-apps /? lang = en)

Lo que realmente necesita es Operational Transform (OT). Esto incluso puede solucionar los conflictos en muchos casos.

Esta sigue siendo un área de investigación activa, pero existen implementaciones de varios algoritmos de TO. He estado involucrado en dicha investigación durante varios años, así que avíseme si esta ruta le interesa y con gusto lo pondré en recursos relevantes.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *