- Software Local-First: software que almacena los datos principalmente de forma local y solo sincroniza o hace respaldo por internet cuando es necesario
- Problemas de Local-First
- Es bueno que el usuario pueda poseer y controlar sus datos
- Pero aun así se necesita un servidor de sincronización para la sincronización en línea entre varios dispositivos
- Si la empresa quiebra, el servidor de sincronización también desaparece, así que ya no se puede sincronizar
- ¿Cómo se puede resolver?
Solución usando Dropbox
- Sincronización en la nube: se pueden usar varias soluciones de sincronización de archivos basadas en la nube, como Dropbox, iCloud Drive, OneDrive y Google Drive
- Ventajas: mucha gente ya las usa y existen varias implementaciones, por lo que pueden reemplazarse
- Desventajas: la sincronización de archivos es un protocolo simple, con pocas funciones para eventos de sincronización o resolución de conflictos
Versión 1: método muy simple
- Guardar el estado en un archivo y sincronizarlo con Dropbox
- Si se cambia el estado en dos dispositivos, se crea un archivo en conflicto
- Usando CRDT (Conflict-free Replicated Data Types) se pueden resolver los conflictos
- Los CRDT son un conjunto de tipos de datos que siempre pueden fusionarse
- Se resuelve abriendo el archivo en conflicto, fusionando el estado y guardándolo otra vez
Versión 2: archivo por cliente
- Asignar un archivo único a cada cliente para evitar conflictos
- Cuando cambia el archivo de otro cliente, se detecta y se fusiona
- Como las modificaciones se hacen solo en local, Dropbox no reporta conflictos
Versión 3: basada en operaciones
- Si el CRDT es operation-based, se pueden registrar las operaciones en un archivo separado de solo anexado
- Cada cliente escribe en su propio archivo para evitar conflictos
- Cuando el registro de operaciones se hace largo, el archivo se divide en fragmentos para mejorar la eficiencia de sincronización
Conclusión
- Para construir aplicaciones local-first donde el usuario tenga control y propiedad total, se necesita sincronización de datos
- Los servicios de sincronización de archivos como Dropbox ofrecen un método de sincronización simple pero efectivo
- No es tan en tiempo real como una solución hecha a medida, pero es suficiente para la sincronización cotidiana
- Por ejemplo, basta con algo como Apple Photos: poder ver tus propias fotos en cualquier lugar al final del día
- El usuario puede usar su propia nube para tener sincronización permanente gratis
Opinión de GN⁺
- Importancia del software Local-First: permite que el usuario posea y controle directamente sus datos, lo que favorece la privacidad y la seguridad de la información.
- Límites de los servicios de sincronización: servicios como Dropbox permiten la sincronización básica, pero tienen limitaciones en escenarios de sincronización complejos.
- Uso de CRDT: usar CRDT facilita la resolución de conflictos y puede aumentar la confiabilidad de la sincronización.
- Soluciones alternativas: también vale la pena considerar soluciones de sincronización de código abierto como Syncthing.
- Aspectos a considerar al adoptar esta tecnología: al adoptar software Local-First, hay que revisar bien la estabilidad del servidor de sincronización y cómo se resolverán los conflictos de datos.
1 comentarios
Comentarios en Hacker News
Es importante permitir alojar localmente el servidor backend de sincronización de las aplicaciones local-first: la simple sincronización de archivos no basta para ofrecer ciertas funciones. Hay que permitir que el usuario guarde en cualquier momento un
workspace.zipy descargueserver.exe/.binpara autoalojar el backend.Dificultad para monetizar aplicaciones local-first: existe el modelo de Obsidian, donde la app base se ofrece gratis y se cobra por las funciones de red. Recomiendan usar Yjs para construir una app local-first + colaborativa.
Los CRDTs no siempre son la mejor opción: pueden servir para sincronización de archivos, pero puede ser mejor que un servidor central valide la lógica de negocio y resuelva conflictos de fusión. El enfoque de máquina de estados distribuida puede ser complejo y difícil de mantener.
Protocolo RemoteStorage: todas las aplicaciones podrían implementarlo y permitir que el usuario proporcione su propia URL de RemoteStorage. Sin embargo, la mayoría de las implementaciones ya no reciben mantenimiento.
Limitaciones de las soluciones de sincronización de archivos basadas en la nube: no son adecuadas para software colaborativo ni para software en tiempo real. Se necesita un modelo que ofrezca funciones de colaboración sin dependencia del proveedor.
Ventajas del software local-first: facilita el desarrollo y mejora la experiencia de usuario. Se espera que aparezcan frameworks local-first que ofrezcan una experiencia para desarrolladores similar a Nuxt o Next.
Riesgos del almacenamiento en la nube: el proveedor de nube puede borrar los datos o bloquear el acceso. Al usar almacenamiento en la nube local-first, hay que configurarlo para descargar todos los archivos.
Experiencia de sincronización usando PWA: alguien construyó una PWA que sincroniza usando AWS y WebDAV. Para reducir el tiempo de sincronización, es importante minimizar los tiempos de lectura y escritura.
Limitaciones de la idea cloud-first: si ocurre una caída de red a escala continental, quedarán expuestos los problemas del enfoque cloud-first.
Dificultad de la sincronización local-first en móviles: en iPhone es difícil manejar en segundo plano la sincronización de archivos tipo Dropbox.