Les tests sont une préoccupation transversale ; les bases de données aussi

Nous sommes tous familiers avec les principes de DevOps : construire des incréments petits et bien testés, déployer fréquemment et automatiser les pipelines pour éliminer le besoin d’étapes manuelles. Nous surveillons nos applications de près, configurons des alertes, annulons les changements problématiques et recevons des notifications lorsque des problèmes surviennent.

Cependant, en ce qui concerne les bases de données, nous manquons souvent du même niveau de contrôle et de visibilité. Déboguer des problèmes de performance peut être difficile, et nous pouvons avoir du mal à comprendre pourquoi les bases de données ralentissent. Les migrations et modifications de schéma peuvent devenir incontrôlables, entraînant des défis significatifs.

Surmonter ces obstacles nécessite des stratégies qui rationalisent la migration et l’adaptation des schémas, permettant des changements de structure de base de données efficaces avec un temps d’arrêt ou un impact sur la performance minimal. Il est essentiel de tester tous les changements de manière cohésive tout au long du pipeline. Explorons comment cela peut être réalisé.

Automatisez vos tests

Les bases de données sont sujettes à de nombreux types de défaillances, pourtant elles ne reçoivent souvent pas le même niveau de tests rigoureux que les applications. Alors que les développeurs testent généralement si les applications peuvent lire et écrire les bonnes données, ils négligent souvent de comprendre comment cela est réalisé. Des aspects clés comme garantir l’utilisation appropriée des index, éviter le chargement paresseux inutile ou vérifier l’efficacité des requêtes passent souvent inaperçus.

Par exemple, nous nous concentrons sur le nombre de lignes renvoyées par la base de données mais négligeons d’analyser le nombre de lignes qu’elle a dû lire. De même, les procédures de retour en arrière sont rarement testées, ce qui nous rend vulnérables à une perte potentielle de données à chaque modification. Pour combler ces lacunes, nous avons besoin de tests automatisés complets qui détectent les problèmes de manière proactive, minimisant ainsi le besoin d’intervention manuelle.

Nous nous appuyons souvent sur des tests de charge pour identifier les problèmes de performance, et bien qu’ils puissent révéler si nos requêtes sont assez rapides pour la production, ils présentent des inconvénients significatifs. Tout d’abord, les tests de charge sont coûteux à construire et à maintenir, nécessitant une manipulation prudente de la conformité GDPR, de l’anonymisation des données et des applications stateful. De plus, ils interviennent trop tard dans le pipeline de développement. Lorsque les tests de charge mettent en évidence des problèmes, les modifications sont déjà implémentées, examinées et fusionnées, ce qui nous oblige à revenir à la case départ et potentiellement recommencer. Enfin, les tests de charge sont chronophages, nécessitant souvent des heures pour remplir les caches et valider la fiabilité de l’application, les rendant moins pratiques pour détecter les problèmes tôt.

Les migrations de schéma tombent souvent en dehors du champ de nos tests. En général, nous n’exécutons les suites de tests qu’après la fin des migrations, ce qui signifie que nous n’évaluons pas leur durée, si elles ont déclenché des réécritures de tables ou si elles ont provoqué des goulets d’étranglement de performance. Ces problèmes passent souvent inaperçus lors des tests et ne deviennent apparents qu’une fois déployés en production.

Un autre défi est que nous testons avec des bases de données trop petites pour déceler tôt les problèmes de performance. Cette dépendance à des tests inadéquats peut entraîner une perte de temps sur les tests de charge et laisse des aspects critiques, comme les migrations de schéma, entièrement non testés. Ce manque de couverture réduit notre vélocité de développement, introduit des problèmes cassant l’application et nuit à l’agilité.

La solution à ces défis réside dans la mise en place de garde-fous de base de données. Les garde-fous de base de données évaluent les requêtes, les migrations de schéma, les configurations et les conceptions de bases de données pendant que nous écrivons du code. Au lieu de se fier aux exécutions de pipeline ou aux tests de charge longs, ces vérifications peuvent être effectuées directement dans l’EDI ou l’environnement de développement. En exploitant l’observabilité et les projections de la base de données de production, les garde-fous évaluent les plans d’exécution, les statistiques et les configurations, garantissant que tout fonctionnera correctement après le déploiement.

Créer de l’Observabilité Autour des Bases de Données

Lorsque nous déployons en production, la dynamique du système peut changer avec le temps. La charge CPU peut augmenter, l’utilisation de la mémoire peut croître, les volumes de données pourraient s’étendre, et les schémas de distribution des données peuvent évoluer. Identifier rapidement ces problèmes est essentiel, mais ce n’est pas suffisant. Les outils de surveillance actuels nous submergent de signaux bruts, nous laissant recoller les morceaux du raisonnement. Par exemple, ils pourraient indiquer une augmentation de la charge CPU sans expliquer pourquoi cela s’est produit. Le fardeau d’enquêter et d’identifier les causes premières nous incombe entièrement. Cette approche est obsolète et inefficace.

Pour vraiment avancer rapidement, nous devons passer d’une surveillance traditionnelle à une pleine observabilité. Au lieu d’être inondés de données brutes, nous avons besoin d’informations exploitables qui nous aident à comprendre la cause profonde des problèmes. Les garde-fous de base de données offrent cette transformation. Ils relient les points, montrant comment divers facteurs s’interconnectent, identifiant le problème et suggérant des solutions. Au lieu de simplement observer une augmentation de l’utilisation du CPU, les garde-fous nous aident à comprendre qu’un déploiement récent a modifié une requête, entraînant le contournement d’un index, ce qui a conduit à une charge CPU accrue. Avec cette clarté, nous pouvons agir de manière décisive, en corrigeant la requête ou l’index pour résoudre le problème. Ce passage de « voir » à « comprendre » est essentiel pour maintenir la vitesse et la fiabilité.

La prochaine évolution dans la gestion des bases de données consiste à passer de l’investigation automatique des problèmes à la résolution automatique. De nombreux problèmes peuvent être corrigés automatiquement avec des systèmes bien intégrés. Les outils d’observabilité peuvent analyser les problèmes de performance et de fiabilité et générer les modifications de code ou de configuration nécessaires pour les résoudre. Ces corrections peuvent être appliquées automatiquement ou nécessiter une approbation explicite, garantissant que les problèmes soient traités immédiatement avec un minimum d’effort de votre part.

Au-delà de la résolution rapide des problèmes, l’objectif ultime est de prévenir les problèmes avant qu’ils ne surviennent. Des retours en arrière fréquents ou des échecs entravent le progrès et l’agilité. La véritable agilité ne se réalise pas en résolvant rapidement des problèmes, mais en concevant des systèmes où les problèmes surviennent rarement. Bien que cette vision puisse nécessiter des étapes incrémentielles pour y parvenir, elle représente la direction ultime pour l’innovation.

Metis vous permet de surmonter ces défis. Il évalue vos modifications avant même qu’elles ne soient engagées dans le dépôt, en analysant les requêtes, les migrations de schéma, les plans d’exécution, la performance et la conformité tout au long de vos pipelines. Metis s’intègre parfaitement aux workflows CI/CD, empêchant les modifications défectueuses d’atteindre la production. Mais il va plus loin — offrant une observabilité approfondie de votre base de données de production en analysant les métriques et en suivant les déploiements, les extensions et les configurations. Il corrige automatiquement les problèmes lorsque c’est possible et vous alerte lorsque l’intervention manuelle est nécessaire. Avec Metis, vous pouvez avancer plus rapidement et automatiser chaque aspect de votre pipeline CI/CD, garantissant une gestion de base de données plus fluide et plus fiable.

Tout le monde doit participer

Observabilité de la base de données consiste à prévenir proactivement les problèmes, à progresser vers une compréhension et une résolution automatisées, et à incorporer des contrôles spécifiques aux bases de données tout au long du processus de développement. S’appuyer sur des outils et des workflows obsolètes n’est plus suffisant ; nous avons besoin de solutions modernes qui s’adaptent aux complexités d’aujourd’hui. Les garde-fous de base de données fournissent ce soutien. Ils aident les développeurs à éviter de créer du code inefficace, à analyser les schémas et les configurations, et à valider chaque étape du cycle de vie du développement logiciel au sein de nos pipelines.

Les garde-fous transforment également les données de surveillance brutes en informations exploitables, expliquant non seulement ce qui a mal tourné, mais aussi comment y remédier. Cette capacité est essentielle dans tous les secteurs, car la complexité des systèmes ne fera que croître. Pour rester en avance, nous devons adopter des outils et des processus innovants qui nous permettent d’agir plus rapidement et plus efficacement.

Source:
https://dzone.com/articles/testing-is-a-cross-cutting-concern-so-are-databases