Qu’est-ce que Datomic et à quoi peut-il servir ;?
Datomic est un système de gestion de base de données opérationnelle distribuée et une implémentation de Datalog, le langage de programmation logique déclaratif. Selon Nubank, il n’est pas conçu pour être un entrepôt de données ni un système à haut débit et à haut taux de désabonnement (tel qu’une base de données de séries chronologiques ou un magasin de journaux). Par contre, il conviendrait parfaitement aux systèmes qui stockent des informations précieuses, nécessitant une flexibilité opérationnelle et de développement et qui ont besoin de capacités d’historique et d’audit avec une évolutivité en lecture. En guise d’exemple, Nubank rapporte que quelques cas d’utilisation réussis de Datomic incluent les données transactionnelles, les dossiers commerciaux, les dossiers médicaux, les dossiers financiers, les dossiers scientifiques, l’inventaire, la configuration, les applications Web, les bases de données départementales et les applications cloud. Il a été conçu pour une utilisation de première classe avec des langages JVM tels que Java et Clojure.
En quoi Datomic est-il différent ;?
La principale chose qui distingue Datomic est qu’il accumule des faits. Les faits d’une base de données sont immuables : une fois stockés, ils ne changent pas. Cependant, la plupart des bases de données attribuent des valeurs à des emplacements nommés, tels qu’un champ dans une ligne particulière, un nœud dans un document particulier. Dans ces systèmes, à mesure que ces valeurs changent, les nouvelles valeurs écrasent les anciennes. Datomic par contre se distingue de ces bases de données en ce sens qu’il suit l’historique complet d’un fait et vous permet d’accéder rapidement et facilement à ses états précédents. Selon Nubank, en plus ce modèle de données — basé sur des faits immuables stockés au fil du temps — Datomic qui se présente comme une base de données décomposée distribue le traitement de la lecture, de l’écriture et des requêtes sur différents composants au lieu de traiter toutes les requêtes dans un seul composant serveur.
Datomic divise le modèle de base de données traditionnel en rôles indépendants :
Pairs : le composant pair est une bibliothèque qui s’intègre dans les applications. Il soumet les transactions de l’agent et accepte les modifications de celui-ci. Il inclut tous les composants de communication pour parler aux agents et aux services de stockage. En sus, il fournit une capacité d’accès aux données, de mise en cache et de requête à l’application, en lisant à partir du service de stockage si nécessaire.
Clients : la bibliothèque Client peut être utilisée pour connecter des processus légers à Datomic. Elle soumet les transactions et les requêtes au serveur pair. Elle prend en charge toutes les fonctionnalités de requête disponibles pour le serveur pair. Selon Nubank, elle n’entraîne aucune surcharge de mémoire de la totalité de la bibliothèque paire et n’effectue pas de mise en cache locale dans le processus léger. Enfin, elle peut prendre en charge des langages non JVM.
Serveur pair : le Server pair est un processus JVM qui fournit une interface pour la bibliothèque Datomic Client. Il accepte les requêtes et les transactions des clients Datomic et lui soumet des transactions. De même, il accepte des modifications de l’agent. Enfin, il fournit une capacité de requête, d’accès aux données, de mise en cache aux clients connectés, et une lecture à partir du service de stockage si nécessaire.
Agents : ils acceptent les transactions et les traitent en série. Ils enregistrent les résultats sur le service de stockage. À noter que toutes les écritures sont effectuées de manière synchrone sur un stockage redondant. Ils transmettent les modifications aux serveurs pairs et placent des index en arrière-plan dans le service de stockage.
Services de stockage : il fournit une interface vers un stockage hautement fiable et redondant et est disponible auprès de tiers (par exemple Amazon DynamoDB qui est un service de stockage pris en charge).
Alors, comment ça marche ;?
Il existe deux principaux modèles de développement avec Datomic que vous pouvez choisir ou intégrer ensemble : le modèle Pair et le modèle Client.
Dans un système basé sur Datomic, votre application (ou une partie de votre application) est un Pair. Un pair est un processus qui manipule une base de données à l’aide de la bibliothèque Datomic Peer. Tout processus peut être un pair — des processus de serveur Web qui hébergent des sites ou des services, à un démon, une application graphique ou un outil de ligne de commande. Le code d’application spécifique à Datomic que vous écrivez s’exécute dans vos pairs. Les pairs lisent les faits à partir du service de stockage. Les faits renvoyés par le service de stockage ne changent jamais. Les pairs effectuent donc une mise en cache étendue. Le cache de chaque pair représente une copie partielle de tous les faits de la base de données. Le cache pair implémente une politique la moins récemment utilisée pour supprimer les données, ce qui permet de travailler avec des bases de données qui ne tiennent pas entièrement en mémoire. Une fois que l’ensemble de travail d’un pair est mis en cache, il y a peu ou pas de trafic réseau pour les lectures. Les pairs écrivent de nouveaux faits en demandant à l’agent de les ajouter au service de stockage. L’agent traite ces demandes à l’aide de transactions ACID, en s’assurant qu’elles réussissent ou échouent de manière atomique et qu’elles n’interfèrent pas les unes avec les autres. L’agent informe tous les Pairs des nouveaux faits afin qu’ils puissent les ajouter à leurs caches.
Les pairs peuvent interroger et accéder aux données localement à l’aide d’une valeur de base de données. Les valeurs de la base de données sont construites lorsque le code d’un pair les demande. Par défaut, une valeur de base de données est construite à partir de l’ensemble de faits les plus récents dont dispose un pair. Cependant, il est également possible de construire une valeur pour une base de données à un moment particulier dans le passé en utilisant les faits stockés à ce moment. Ceci est possible, car les anciens faits sont immuables et restent inchangés dans le temps. Les valeurs de base de données partagent des structures de données sous-jacentes, ne différant que dans la mesure nécessaire pour représenter les modifications. Ce partage structurel rend la construction de nouvelles valeurs de base de données très efficace en termes de temps et d’espace.
La bibliothèque Client quant à elle nécessite qu’un ou plusieurs serveurs Pairs soient en cours d’exécution. Les serveurs Pairs sont des nœuds intermédiaires spéciaux qui gèrent les requêtes et la mise en cache. Les serveurs pairs peuvent être mis à l’échelle horizontalement, tout comme les pairs. Les clients ont un saut de réseau pour les opérations de lecture lorsque les requêtes sont envoyées aux serveurs Pairs. La bibliothèque Client est beaucoup plus légère que la bibliothèque Pair au prix d’une latence accrue lors des lectures.
Que doit-on retenir de la récente annonce de Nubank ;?
Après que Nubank ait annoncé que toutes les éditions de Datomic sont disponibles sans frais de licence, nombreux sont les utilisateurs qui ont commencé à jubiler. En effet, pour les utilisateurs de ces produits ou pour ceux qui s’y intéressent, cela sous-entend que les fonctionnalités des versions professionnelles et cloud de Datomic qui étaient disponibles uniquement après avoir payé une licence sont maintenant offertes gratuitement. Il s’agit par exemple des pairs et/ou clients illimités, de la prise en charge memcached intégrée, de la prise en charge d’une variété de stockage, de la haute disponibilité pour le basculement, et bien plus encore. Nubank explique qu’elle a fait ce choix de la gratuité pour rendre Datomic plus utile à plus de personnes dans plus de situations, et est impatiente d’élargir la communauté Datomic et Clojure en conséquence.
Si cette annonce semble entièrement faire l’affaire de certains utilisateurs, cette joie est à demi teinte chez d’autres. Mjorlab, un utilisateur qui s’intéresse à Datomic, avance « ;qu’ils ont en fait publié des binaires sous la licence Apache, pas le code source. Ce qui est gentiment dit, trompeur ;». Mistro par contre voit les choses sous un autre angle et affirme « ;qu’il comprend que les gens soient grincheux au sujet du fait que seuls les binaires sont gratuits ;». Mais à son avis, « ;cela semble être un moyen intéressant de garder leurs options ouvertes à l’avenir. Et puisqu’il s’agissait toujours d’une source fermée, le fait qu’elle soit désormais “source fermée, mais gratuite” est toujours une victoire nette ;». Pour lui, « ;la relation Datomic/Cognitect/NuBank est une dynamique symbiotique intéressante et même s’il est sûr que nous pouvons tous penser que cela pourrait horriblement mal tourner à l’avenir, il espère plutôt que ce ne sera pas le cas ;». EternalBan de son côté fait remarquer qu’il a eu à assister à une présentation de Datomic dans une banque du centre-ville (NYC) vers 2014. Selon l’internaute, lors de la présentation, quelqu’un de l’iirc a posé une question technique spécifique qui a poussé le présentateur à déclarer que même les personnes travaillant pour Nubank n’ont pas toutes accès à la source complète de la base de données. Seule une petite équipe a accès au code source, et il n’en faisait pas partie.
Enfin, Clavanderdeen quant à lui pointe du doigt plusieurs tares du produit après avoir vécu une expérience peu satisfaisante avec Datomic. Bien qu’il admette que l’implémentation de ce gestionnaire de base de données part d’une bonne idée, il ne peut pas s’empêcher de décrier certains points qui l’ont frustré comme le fait que Datomic Cloud soit lent, coûteux, gourmand en ressources, conçu dans le style baroque de CloudFormation extrêmement compliquée. De par son expérience, il est difficile de diagnostiquer les problèmes de performance et impossible d’effectuer des sauvegardes. Dans un scénario où apparemment son entreprise n’était pas assez rapide pour migrer vers la dernière version du système, AWS avait abandonné la prise en charge de $runtime dans Lambda et il était devenu impossible pour eux de mettre à niveau le modèle CloudFormation. Il a donc dû écrire du code d’application pour exporter/réimporter des données de production d’un cluster à un autre, car il n’y avait pas d’autre voie de migration. En fin de compte, son entreprise a migré vers Postgres et ils utilisent désormais un dixième des ressources de calcul, souligne l’intervenant.
Source : Blog Datomic
Et vous ?
Utilisez-vous Datomic ;? À quelles fins ;?
Datomic disponible gratuitement, sous licence Apache 2.0, mais pas open source, quels commentaires en faites-vous ;?
Pensez-vous que le fait que le code source de Datomic demeure toujours fermé cache des desseins inavoués de la part de l’entreprise ;?