Estoy pensando en la construcción de una solución de sincronización base de la nube (algo así como Dropbox):nube arquitectura de sincronización basada
¿Cómo sería una arquitectura robusta parece?
¿Qué tecnologías necesitarías para soportar diferentes plataformas como Windows, Mac, Linux y dispositivos móviles?
¿Qué algoritmos de sincronización eficientes usarías?
sé una arquitectura/solución ingenua sería:
Realizar una llamada de red a su almacenamiento en la nube y obtener la estructura de árbol de carpetas sincronización (solo información de metadatos).
tiene un monitor de sistema de archivos en el cliente para construir la estructura de árbol de carpetas de sincronización local (supongo que usaría algo así como Lsyncd para el monitor del sistema de ficheros?)
recuperar la estructura de carpetas de sincronización de la anterior sincronizar Ahora usted tiene 3 estructuras de árbol de carpetas en el cliente. Utilizando estos 3 árboles puede determinar qué se debe hacer en la carpeta local y qué se debe hacer en la carpeta remota en el servidor . Por ejemplo, agregar, eliminar, editar, resolución de conflictos, etc. usando algún tipo de reglas predeterminadas que sean específicas de la aplicación.
Esta arquitectura puede ser suficiente pero el diablo está en los detalles. ¿Qué pasa si el árbol de carpetas de sincronización es muy grande (que es muy amplio y muy profundo). Claramente, se necesitaría un algoritmo eficiente para determinar los diffs. ¿Qué sucede si la conexión de red se cae y no recibe o no envía el árbol completo correctamente? También enviando solo archivos diffs para reducir la carga de la red, etc.
Soy consciente de que estas son cosas para las que tengo diseño pero mi pregunta es si esta arquitectura es suficiente y si debería dedicar mi tiempo a los detalles. ¿Cómo se diseña Dropbox y qué tecnologías y algoritmos usan para hacer que la sincronización de las estructuras de carpetas grandes y el tamaño de los datos sea tan eficiente? ¿Hay algún recurso/libro que pueda consultar sobre el diseño de algo como esto?
Gracias de antemano.