8 points par GN⁺ 2024-06-26 | 1 commentaires | Partager sur WhatsApp
  • 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

 
GN⁺ 2024-06-26
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.zip et de télécharger server.exe/.bin afin 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.