Estoy implementando mi primer código de sincronización. En mi caso, tendré 2 tipos de clientes iOS por usuario que sincronizarán registros con un servidor usando un lastSyncTimestamp
, un entero de 64 bits que representa la época Unix en milisegundos de la última sincronización. Los registros se pueden crear en el servidor o los clientes en cualquier momento y los registros se intercambian como JSON a través de HTTP.¿Cuáles son las dificultades más comunes de la sincronización basada en la marca de tiempo?
No me preocupan los conflictos ya que hay pocas actualizaciones y siempre del mismo usuario. Sin embargo, me pregunto si hay cosas comunes que debo tener en cuenta que pueden salir mal con un enfoque basado en la marca de tiempo como la sincronización durante el horario de verano, las sincronizaciones en conflicto con otras u otras trampas.
Sé que git y algunos otros sistemas de control de versiones evitan la sincronización con marcas de tiempo para un enfoque de sincronización de negociación basado en contenido. También podría imaginar un enfoque así para mis aplicaciones, donde usando el uuid
o el hash
de los objetos, ambos pares anuncian qué objetos poseen y luego los intercambian hasta que ambos pares tengan los mismos conjuntos.
Si alguien conoce las ventajas o desventajas de la sincronización basada en contenido en comparación con la sincronización basada en la marca de tiempo en general, también sería útil.
Editar - Estas son algunas de las ventajas/desventajas que he encontrado para la sincronización de la marca de tiempo y el contenido. Por favor desafíe/corrija.
Nota - Estoy definiendo la sincronización basada en contenidos de negociación tan simple de 2 conjuntos de objetos tales como la forma 2 niños intercambiaban tarjetas si se les dio a cada uno partes de un embarullado encima de pila de 2 conjuntos idénticos de tarjetas de béisbol y les dijo que a medida que miraban a través de ellos para anunciar y entregar los duplicados que encontraron al otro hasta que ambos tengan conjuntos idénticos.
- Johnny - "Tengo esta tarjeta".
- Davey - "Recibí este montón de tarjetas. Dame esa tarjeta".
- Johnny - "Aquí está su tarjeta. Dame ese montón de cartas".
- Davey - "Aquí tienes tu montón de cartas".
- ....
- Tanto - "Hemos terminado"
Ventajas de la marca de tiempo basada en la sincronización de
- Fácil de implementar
- propiedad individual se utiliza para la sincronización.
Desventajas de la marca de tiempo basada en la sincronización de
- El tiempo es un concepto relativo al observador y relojes diferentes de máquina puede estar fuera de sincronía. Hay un par de formas de resolver esto. Genere la marca de tiempo en una sola máquina, que no se escala bien y representa un único punto de falla. O usa relojes lógicos como relojes vectoriales. Para el desarrollador promedio que construye su propio sistema, los relojes vectoriales pueden ser demasiado complejos para implementarlos.
- La sincronización basada en la marca de tiempo funciona para que el cliente domine la sincronización, pero no funciona tan bien para la sincronización de igual a igual o cuando la sincronización puede ocurrir con 2 maestros.
- Único punto de falla, cualquiera que sea la fuente de la marca de tiempo.
- El tiempo no está realmente relacionado con el contenido de lo que se está sincronizando.
Ventajas de la sincronización basada en contenidos
- n por pares marca de tiempo debe ser mantenido. 2 pares pueden iniciar una sesión de sincronización e iniciar la sincronización según el contenido.
- Punto final bien definido para sincronizar: cuando ambas partes tienen conjuntos idénticos.
- Permite una arquitectura de igual a igual, donde cualquier par puede actuar como cliente o servidor, siempre que puedan alojar un servidor HTTP.
- Sync funciona con el contenido de los conjuntos, no con un tiempo de concepto abstracto.
- Dado que la sincronización se basa en el contenido, la sincronización se puede utilizar para realizar la verificación de contenido si se desea. P.ej. un hash SHA-1 se puede calcular en el contenido y usar como uuid. Se puede comparar con lo que se envía durante la sincronización.
- Además, los hashes SHA-1 se pueden basar en hashes previos para mantener un historial constante de contenido.
desventajas de sincronización basada en contenidos
- propiedades extra en sus objetos pueden ser necesarios para poner en práctica.
- Más lógica en ambos lados en comparación con la sincronización basada en la marca de tiempo.
- Un poco más de protocolo de conversación (esto se puede sintonizar mediante la sincronización de contenido en clústeres).
Buen punto. Gotcha # 1, siempre use una máquina para calcular las marcas de tiempo. No había considerado esto, pero probablemente siempre debería producir el últimoSyncTimestamp en el servidor. –