- Logiciel local-first : logiciel qui stocke principalement les données en local et ne les synchronise ou ne les sauvegarde via Internet qu’en cas de besoin
- Problèmes du local-first
- Il est appréciable que l’utilisateur puisse posséder et contrôler ses données
- Mais il faut toujours un serveur de synchronisation pour la synchronisation en ligne entre plusieurs appareils
- Si l’entreprise disparaît, le serveur de synchronisation disparaît aussi, rendant la synchronisation impossible
- Comment résoudre ce problème ?
Une solution avec Dropbox
- Synchronisation cloud : il est possible d’utiliser diverses solutions de synchronisation de fichiers basées sur le cloud comme Dropbox, iCloud Drive, OneDrive ou Google Drive
- Avantage : beaucoup de gens les utilisent déjà, et il existe plusieurs implémentations, donc des alternatives sont possibles
- Inconvénient : la synchronisation de fichiers repose sur un protocole simple, avec peu de prise en charge des événements de synchronisation ou de la résolution des conflits
Version 1 : une méthode très simple
- Enregistrer l’état dans un fichier et le synchroniser avec Dropbox
- Si l’état est modifié sur deux appareils, un fichier de conflit est créé
- En utilisant des CRDT (Conflict-free Replicated Data Types), il est possible de résoudre les conflits
- Les CRDT sont un ensemble de types de données qui peuvent toujours être fusionnés
- La solution consiste à ouvrir le fichier en conflit, fusionner l’état, puis enregistrer à nouveau
Version 2 : un fichier par client
- Attribuer un fichier unique à chaque client pour éviter les conflits
- Détecter les modifications des fichiers des autres clients et les fusionner
- Comme les modifications ne se font qu’en local, Dropbox ne signale pas de conflit
Version 3 : basée sur les opérations
- Si le CRDT est operation-based, les opérations peuvent être enregistrées dans un fichier séparé en ajout seul
- Chaque client écrit dans son propre fichier afin d’éviter les conflits
- Lorsque le journal d’opérations devient long, le fichier est découpé en chunks pour améliorer l’efficacité de la synchronisation
Conclusion
- Pour créer des applications local-first où l’utilisateur dispose d’un contrôle total et de la propriété complète de ses données, la synchronisation des données est nécessaire
- Les services de synchronisation de fichiers comme Dropbox offrent une méthode de synchronisation simple mais efficace
- Ce n’est pas aussi temps réel qu’une solution sur mesure, mais c’est suffisant pour une synchronisation au quotidien
- Par exemple, comme avec Apple Photos, il suffit de pouvoir voir ses propres photos depuis n’importe où à la fin de la journée
- Les utilisateurs peuvent obtenir une synchronisation permanente gratuite en utilisant leur propre cloud
L’avis de GN⁺
- Importance du logiciel local-first : comme l’utilisateur possède et contrôle directement ses données, cela est favorable à la protection de la vie privée et à la sécurité des données.
- Limites des services de synchronisation : des services comme Dropbox permettent une synchronisation de base, mais ont des limites dans des scénarios de synchronisation complexes.
- Usage des CRDT : l’utilisation des CRDT facilite la résolution des conflits et améliore la fiabilité de la synchronisation.
- Solutions alternatives : des solutions open source de synchronisation comme Syncthing méritent aussi d’être envisagées.
- Points à considérer lors de l’adoption : lors de l’adoption d’un logiciel local-first, il faut examiner attentivement la stabilité du serveur de synchronisation et les mécanismes de résolution des conflits de données.
1 commentaires
Avis Hacker News
Il est important de permettre l’hébergement local du serveur de synchronisation backend pour les applications local-first : une simple synchronisation de fichiers ne suffit pas pour fournir certaines fonctionnalités. Il faut permettre aux utilisateurs d’enregistrer à tout moment un
workspace.zipet de téléchargerserver.exe/.binafin d’auto-héberger le backend.La monétisation des applications local-first est difficile : il existe des modèles comme celui d’Obsidian, où l’application de base est fournie gratuitement et où les fonctions réseau sont payantes. Il est recommandé d’utiliser Yjs pour créer une application local-first + collaborative.
Les CRDTs ne sont pas toujours le meilleur choix : ils peuvent convenir à la synchronisation de fichiers, mais il peut être préférable qu’un serveur central valide la logique métier et résolve les conflits de fusion. Une approche par machine à états distribuée peut être complexe et difficile à maintenir.
Le protocole RemoteStorage : toutes les applications peuvent l’implémenter et les utilisateurs peuvent fournir leur propre URL RemoteStorage. Cependant, la plupart des implémentations ne sont plus maintenues.
Les limites des solutions de synchronisation de fichiers basées sur le cloud : elles ne conviennent pas aux logiciels collaboratifs ni aux logiciels temps réel. Il faut un modèle capable d’offrir des fonctions de collaboration sans dépendance à un fournisseur.
Les avantages des logiciels local-first : le développement devient plus simple et l’expérience utilisateur s’améliore. On peut s’attendre à voir émerger des frameworks local-first offrant une expérience développeur comparable à Nuxt ou Next.
Les risques du stockage cloud : le fournisseur cloud peut supprimer les données ou bloquer l’accès. Lorsqu’on utilise un stockage cloud local-first, il faut configurer le téléchargement de tous les fichiers.
Expérience de synchronisation avec une PWA : quelqu’un a construit une PWA qui synchronise avec AWS et WebDAV. Pour réduire le temps de synchronisation, il est important de minimiser les temps de lecture et d’écriture.
Les limites de l’idée du cloud-first : en cas de panne réseau à l’échelle d’un continent, les problèmes de l’approche cloud-first deviendraient évidents.
La difficulté de la synchronisation local-first sur mobile : sur iPhone, il est difficile de gérer en arrière-plan une synchronisation de fichiers de type Dropbox.