L’équipe chargée du développement d’Automerge a annoncé la sortie de la version 2.0 d’Automerge. « Automerge 2.0 est là, il est prêt pour vous, et nous sommes très heureux de le partager avec vous. Nous avons rendu Automerge plus rapide, plus efficace en termes de mémoire, et nous l'apportons à plus de plateformes que jamais », écrit l'équipe chargée de son développement.Automerge 2.0 est la première version supportée résultant d'une réécriture complète. Le résultat est un CRDT (Conflict-free Replicated Data Type ) prêt pour la production avec d'énormes améliorations en termes de performance et de fiabilité. Il est disponible à la fois en JavaScript et Rust, et inclut des types TypeScript et des liaisons C pour une utilisation dans d'autres écosystèmes. Mieux encore, Automerge 2.0 est livré avec une documentation améliorée et, pour la première fois, des options de support pour les utilisateurs en production.
Automerge est un CRDT qui permet d'enregistrer les modifications apportées aux données, puis de les rejouer à d'autres endroits, en produisant de manière fiable le même résultat à chaque fois. Il prend en charge les données de type JSON, y compris les cartes et les tableaux imbriqués arbitrairement, ainsi que certains types de données plus avancés tels que le texte et les compteurs numériques.
Type de données répliqué sans conflit (CRDT)
Un Conflict-free Replicated Data Type en français, type de données répliqué sans conflit, ou CRDT est une structure de données qui simplifie les systèmes de stockage de données distribués et les applications multi-utilisateurs. Dans de nombreux systèmes, des copies de certaines données doivent être stockées sur plusieurs ordinateurs (appelés répliques). Voici quelques exemples de tels systèmes :
- Les applications mobiles qui stockent des données sur le périphérique local, et qui doivent synchroniser ces données avec d'autres périphériques appartenant au même utilisateur (comme les calendriers, les notes, les contacts ou les rappels) ;
- Les bases de données distribuées, qui maintiennent plusieurs répliques des données (dans le même centre de données ou dans différents endroits) afin que le système continue de fonctionner correctement si certaines des répliques sont hors ligne ;
- Les logiciels de collaboration, tels que Google Docs, Trello, Figma, ou bien d'autres, dans lesquels plusieurs utilisateurs peuvent apporter simultanément des modifications au même fichier ou aux mêmes données ;
- les systèmes de stockage et de traitement de données à grande échelle, qui répliquent les données afin d'obtenir une évolutivité globale.
Les CRDT sont utilisés dans les systèmes avec réplication optimale, où ils prennent en charge la résolution des conflits. Les CRDT garantissent que, quelles que soient les modifications apportées aux données sur les différentes répliques, les données peuvent toujours être fusionnées dans un état cohérent. Cette fusion est effectuée automatiquement par le CRDT, sans nécessiter de code spécial de résolution de conflit ou d'intervention de l'utilisateur.
En outre, une caractéristique importante des CRDT est qu'ils supportent un fonctionnement décentralisé : ils ne supposent pas l'utilisation d'un serveur unique, ils peuvent donc être utilisés dans des réseaux peer-to-peer et d'autres environnements décentralisés. À cet égard, les CRDT diffèrent des algorithmes utilisés par Google Docs, Trello et Figma, qui exigent que toute communication entre utilisateurs passe par un serveur.
Automerge-RS : reconstruit pour la performance et la portabilité
Les versions précédentes d'Automerge étaient implémentées en JavaScript. Les implémentations initiales étaient théoriquement valables, mais beaucoup trop lentes et utilisaient trop de mémoire pour la plupart des cas d'utilisation en production.
De plus, le support de JavaScript sur les appareils mobiles et les systèmes embarqués est limité. « Nous voulions une version rapide et efficace d'Automerge qui soit disponible partout : dans le navigateur, sur n'importe quel appareil mobile, et même sur des microcontrôleurs comme l'ESP32 », indique l’équipe chargée d’Automerge.
Au lieu d'essayer de coordonner plusieurs versions distinctes d'Automerge, elle a décidé de réécrire Automerge en Rust et d'utiliser des wrappers spécifiques aux plateformes pour le rendre disponible dans chaque écosystème linguistique. De cette façon, elle pouvait être sûre que la logique de base de CRDT est identique sur toutes les plateformes et que tout le monde bénéficie des nouvelles fonctionnalités et optimisations.
Pour les applications JavaScript, cela signifie compiler Rust...
La fin de cet article est réservée aux abonnés. Soutenez le Club Developpez.com en prenant un abonnement pour que nous puissions continuer à vous proposer des publications.