Accueil Nos publications Blog Parlez-vous NoSQL?

Parlez-vous NoSQL?

Ce petit article n’abordera pas, à proprement parler, NoSQL mais sera plutôt une très rapide introduction au dialecte utilisé par les concepts de NoSQL ou plus communément dans les problématiques d’architecture distribuée.
Il prend comme base de départ le manuel d’utilisation d’Oracle Coherence en se focalisant sur ses premières parties, à savoir ses concepts.

Allez, démarrons avec quelques concepts de base :

  • Data Grid : c’est un système composé de différents serveurs travaillant ensemble pour gérer de l’information et traiter des opérations (comme le calcul) dans un environnement distribué.
  • In-Memory Data Grid : c’est un Data Grid qui stoque de l’information en mémoire afin d’obtenir de meilleures performances et qui utilise la redondance (en gérant des copies des informations synchronisées entre les différents serveurs) pour s’assurer de la résilience du système et la disponibilité des informations en cas d’anomalies serveurs.
  • Les objets de l’application sont les composants réels de l’application qui contiennent l’information partagée entre les multiples serveurs. Ces objets doivent survivre si une anomalie des serveurs se produit afin que l’application soit toujours disponible. Cependant, contrairement à un schéma relationnel, les objets de l’application sont souvent hiérarchiques et peuvent contenir de l’information qui est utilisée par la base de données.

En effet, dans le cas d’eBay ou d’Amazon, on peut se douter que l’un de leur objectif principal est de pouvoir supporter un trafic plus ou moins important, en rendant “scalable horizontalement” leur applications, permettant ainsi d’ajouter ou d’enlever facilement des serveurs.
Pour ce faire, les objets de l’application doivent être distribués entre les différents serveurs. En effet, puisque chaque instance de l’application qui s’exécute sur un serveur peut lire et écrire les mêmes informations qu’une autre instance de l’application qui se trouve sur un autre serveur, l’information doit être partagée.
Bien sûr, une autre possibilité consisterait à accéder à l’information au travers d’une ressource partagée (comme une base de données), mais cela réduirait les performances puisqu’il serait alors nécessaire de gérer l’accès distant de manière partagé et le mapping objet/relation (ORM – Object Relational Mapping) et puisque cela diminuerait également la capacité à scaler l’application (au sens large du terme) en créant un point de contention. En outre, puisqu’un objet de l’application n’est pas un objet relationnel en tant que tel, le récupérer d’une base de données impliquerait qu’il faille le lier à une requête relationnelle (telle que c’est le cas avec une solution ORM) et que cela risquerait de coûter cher en termes de charge sur la base de données mais aussi en temps d’accès.
Ainsi, une In-Memory Data Grid permet d’arriver à un meilleur temps de réponse lors de l’accès aux données en conservant l’information en mémoire sous sa forme réelle (ie. sans avoir besoin de le convertir dans un autre format) tout en le partageant l’information entre les serveurs.

Bien sûr, les solutions répondant à ces différentes problématiques se doivent de respecter un certain nombre de points afin de pouvoir être exploitées :

  • rapidité de lecture et d’écriture à/de l’information
  • haute disponibilité
  • résilience à la panne
  • fiabilité de l’information

Ce sont ces principes et ces constatations qui sont, à mon sens, le point de départ de la mouvance NoSQL qui, toujours selon moi, n’est q’un buzzword qui encapsule un ensemble de produits, permettant de gérer de manière distribuée une grosse masse de données (en gros un cache distribué) sans qu’il n’y ait de besoin de normalisation de cette dernière et qui répondent aux points cités ci-dessus.

Aussi, vous l’aurez compris, le titre de cet article était trompeur et il n’avait pas pour objectif de parler de NoSQL mais bien de comprendre les concepts (de manière très macroscopique) sous-jacents pouvant vous amener à faire le choix d’une solution NoSQL 😉 .