Les bases de données relationnelles telles que MariaDB ou MySQL forment le noyau d’Internet et d’innombrables applications. Quand il s’agit de satisfaire aux exigences actuelles, les outils des systèmes de gestion de bases de données sont dépassés depuis bien longtemps. Après le clustering et la réplication maître-esclave, MariaDB tente désormais avec MaxScale de trouver une solution aux principaux problèmes des bases de données à l’ère du Big Data. Pour ce faire, les finnois suivent un concept concluant.
Les personnes qui développent des applications ou exploitent des sites Web utilisent généralement une base de données comme élément central. De nombreuses entreprises et développeurs misent ici sur des solutions open source, et ce pas uniquement pour des raisons de coûts. Ce n’est pas un hasard si MySQL et son fork MariaDB font partie des solutions de gestion de bases de données les plus fréquemment utilisées : elles sont gratuites tant que vous n’avez pas besoin de faire appel à l’assistance professionnelle. Dans la zone critique, l’ensemble des services indispensables à l’exploitation sûre et fiable d’une application basée sur ces derniers peuvent être activés en supplément. Néanmoins, les technologies de la base de données relationnelle et de la langue de la base de données SQL présentent des limites.
Un problème fondamental qu’il devient de plus en plus urgent de résoudre au vu des importantes quantités de données à traiter est l’évolutivité. Deux méthodes se sont établies dans ce domaine, permettant un comportement de réponse satisfaisant et une bonne sécurité de fonctionnement des serveurs de bases de données : la grappe avec réplication maître- esclave et le sharding. Toutefois ces deux approches, qui sont fréquemment combinées, rendent très complexe l’administration de l’infrastructure des bases de données. Sans compter que le développement des applications est souvent plus compliqué, sachant que les développeurs doivent en partie tenir compte de la structure maître-esclave dans leurs applications. Dans le cas du sharding, la charge administrative augmente en outre considérablement lorsqu’il faut modifier un tableau.
Le clustering et le sharding permettent certes d’obtenir une excellente disponibilité, tout en permettant à l’administrateur de garantir des temps de réponse exceptionnels, néanmoins la nécessité de maintenir les applications disponibles 24 heures sur 24 contrecarre de plus en plus cette organisation. Les maintenances planifiées au sein d’une infrastructure complexe entraînent systématiquement un travail conséquent pour pouvoir être menées en bonne et due forme. Les mises à jour et les mises à niveau doivent être entièrement testées au préalable, le cas échéant des ajustements de l’application ou du système de bases de données sont inévitables. On peut y remédier en procédant au découplage de la couche données et de la couche application, réduisant ainsi la complexité.
Un proxy spécifique aux bases de données
MariaDB a recours à une telle approche. Le dernier proxy présenté, du nom de MariaDB MaxScale, forme une couche d’abstraction entre l’application et les bases de données. Le concept d’un proxy dédié aux bases de données n’est pas tout à fait nouveau, on compte déjà quelques solutions de proxys sur le marché. Toutefois ces derniers se concentrent souvent sur certains sous- domaines tels que la réplication ou la répartition de charge. MariaDB va ici largement plus loin et dote MaxScale de nombreuses fonctions devant faciliter la tâche à l’administrateur et s’étendant au-delà des possibilités du proxy MySQL, déjà établi et très similaire. L’élément design essentiel de MaxScale, le serveur proxy, est totalement transparent pour les applications. Pour la couche application, MaxScale reproduit
simplement une instance de base de données des plus normales. Cela signifie que les modifications apportées aux bases de données n’ont généralement aucune répercussion sur les applications ; par ailleurs la base de données peut évoluer indépendamment de l’application. Le travail des développeurs d’applications est alors considérablement simplifié. Mais les administrateurs des bases de données auront également la part belle. Contrairement à d’autres proxys DB, MaxScale traite les requêtes exactement de la même manière que le fait MariaDB ou MySQL, ce qui promet des avantages considérables en termes de vitesse.
Les fonctions du proxy MaxScale reposent sur cette transparence. Il sert d’abord de répartiteur de charge et veille à une répartition homogène des requêtes et des connexions. La particularité de MaxScale est qu’il est optimisé pour les bases de données. Contrairement à la répartition de charge générique, le proxy est en mesure d’analyser le trafic de données et par conséquent d’agir de manière contextuelle sur la base des requêtes SQL. Le proxy maîtrise aussi bien la répartition de charge sous forme de connexions que sous forme de requêtes. Dans le cas de la répartition de charge sous forme de connexions, le proxy ne vérifie pas le contenu des requêtes envoyées à la base de données. Le routage des accès en lecture pour la réplication maître-esclave repose exclusivement sur la connexion établie entre les applications et la base de données. On utilise ici Round-Robin comme algorithme d’ordonnancement. Le proxy travaille de façon similaire en combinaison avec des grappes Galera. MaxScale travaille sans transition avec la grappe et peut piloter la répartition de charge sur plusieurs maîtres dans la grappe. D’autre part, le proxy surveille tous les nœuds de la grappe et transmet la requête uniquement aux nœuds entièrement synchronisés. Ainsi la disponibilité d’une grappe peut encore être augmentée : avec cet algorithme sous forme de connexions, il est possible de retirer de la grappe ou d’ajouter certains nœuds très facilement et de manière dynamique, ce qui constitue un véritable avantage pour les travaux de maintenance planifiés tels que les mises à jour. MaxScale garde également la connexion avec l’application en cas de défaillance de l’esclave, l’application n’a pas besoin d’établir de nouveau la liaison.
Un proxy qui allège le travail
Puisque les applications doivent être conçues explicitement pour l’interaction avec une réplication maître-esclave notamment pour les accès en écriture, il est intéressant de constater que MaxScale propose une solution de contournement pour les applications ne faisant pas la séparation entre connexion lecture et écriture.
Dans le cas de la répartition de charge sous forme de requêtes, l’application communique avec le proxy via une simple connexion. Le proxy analyse les requêtes et décide si elles sont transmises au maître ou à un esclave. Ainsi il n’est plus indispensable de développer des applications « sensibles à la réplication » pour l’évolutivité des accès en écriture.
La capacité de MaxScale d’analyser les requêtes présente d’autres avantages encore. Il est par exemple possible de contrôler les requêtes SQL avant leur transmission à la base de données, réduisant le risque d’une injection SQL. MaxScale permet en outre l’exploitation d’applications héritées pour des versions plus actuelles de MariaDB ou MySQL, sans devoir modifier le code de l’application. Le proxy tient compte des modifications de la syntaxe via un filtre et les remplace dans les requêtes et les réponses.
La commande
CREATE TABLE… TYPE = InnoDB
des anciennes versions MySQL donne la variante actuelle :
CREATE TABLE… ENGINE = InnoDB
Il est ainsi possible d’exploiter des bases de données avec des dialectes SQL différents pour des applications existantes. Cette possibilité est particulièrement judicieuse lorsque les bases de données doivent être migrées. Grâce aux filtres, les serveurs DB peuvent passer à une nouvelle version de manière asynchrone sans temps d’arrêt. De plus, MaxScale permet de dupliquer des requêtes pour d’autres systèmes de bases de données, moteurs de stockage ou applications. Il est possible de cette manière d’envoyer des données à des tableaux également avec différents moteurs.
Un proxy extensible par modules
Les nombreuses fonctionnalités reposent sur l’architecture de plugin du proxy dédié aux bases de données. MaxScale a recours ici au concept modulaire déjà éprouvé avec MySQL et la base de données MariaDB. Le nombre de modules disponibles est jusqu’à présent encore gérable. Comme c’est le cas avec les protocoles clients : pour le lancement du produit, MaxScale travaille avec MariaDB Enterprise, MariaDB Enterprise Cluster, MariaDB 5.5, MariaDB 10 et Oracle MySQL. La répartition de charge implique l’utilisation de la grappe MariaDB Galera, de la réplication maître-esclave MariaDB ou de la réplication Oracle-serveur MySQL. Il est prévu de supporter à l’avenir d’autres systèmes de bases de données.
D’autres fonctions de base telles que l’authentification ou le monitoring sont également réalisées comme modules. Les modules sont généralement des objets partagés externes pouvant être chargés en cours de fonctionnement. Comme les API sont généralement connues dans le cas d’une solution open source, il est possible pour une moindre charge de travail d’adapter MaxScale aux propres besoins et à de nouveaux scénarios d’utilisation. On ne devrait donc pas tarder à voir une communauté active regroupée autour du proxy. Le fabricant a lui-même mentionné sur sa feuille de route certaines fonctions essentielles pour l’emploi notamment dans des environnements plus complexes. Il est par exemple prévu d’implémenter un module spécifique à Galera pour le routage sous forme de requêtes, ce qui doit permettre de réduire le risque d’interblocage en cas d’échecs de transactions. Un modèle de routage hiérarchique est également prévu qui permettra de combiner comme pipeline différentes méthodes de routage dans une suite constante.
MaxScale peut être exploité aussi bien dans des environnements virtuels que sur du matériel physique. Le proxy dédié aux bases de données supporte actuellement les dérivés de Linux suivants dans la variante 64 bits comme plateforme :
CentOS 5, 6 et 7
Red Hat Enterprise Linux 5 et 6
Fedora 19 et 20
Debian 6 et 7
Ubuntu 12.04 LTS, 13.10 et 14.04
Une version doit être prochainement disponible pour OpenSuse 13.1. Comme MaxScale en tant que proxy dédié aux bases de données doit faire face à un débit de données très important, il fait d’après le fabricant un usage très intensif de la capacité I/O asynchrone du système Epoll de Linux. Il est donc recommandé d’exploiter MaxScale comme serveur dédié et de n’exécuter aucune autre charge de travail sur cette machine.
MaxScale est actuellement disponible sous la licence open source GPL v2. Les données binaires peuvent être téléchargées à l’adresse https://mariadb.com/user/login?destination=my_porta l/download#maxscale, et le code source via Github https://github.com/mariadb- corporation/MaxScale.