Skip to main content

Migrations sans interruption de service : comment DataraDB gère les modifications de schéma

Les migrations de schéma comptent parmi les causes les plus courantes d'interruptions de service en production. Non pas parce que les développeurs manquent de rigueur, mais parce que le processus standard ne prévoit pratiquement aucune mesure de sécurité entre la rédaction d'une modification et son application aux données en production.

7 min read
Migrations sans interruption de service : comment DataraDB gère les modifications de schéma

Les migrations de schéma comptent parmi les causes les plus courantes d’interruptions de service en production. Non pas parce que les développeurs manquent de rigueur, mais parce que le workflow standard ne prévoit pratiquement aucune mesure de sécurité entre la rédaction d’une modification et son application aux données en production.

Le processus type se déroule à peu près ainsi : vous écrivez un fichier SQL, vous l'enregistrez dans le système de contrôle de version, puis vous l'exécutez en production lors d'un déploiement. Si un problème survient — incompatibilité de type de colonne, violation de contrainte, verrouillage de table plus long que prévu —, vous réagissez à un incident plutôt que de le prévenir. La migration a déjà commencé. Effectuer une annulation propre devient alors un véritable casse-tête.

DataraDB a été conçu pour bouleverser complètement cette boucle de rétroaction.

Pourquoi les migrations échouent-elles ?

La plupart des échecs de migration relèvent d’un petit nombre de catégories.

Les incompatibilités de types sont les plus courantes. Vous modifiez une colonne de varchar à integer, mais certaines données existantes ne peuvent pas être converties. La migration échoue en cours d’exécution, laissant le schéma dans un état partiellement modifié que ni l’ancienne ni la nouvelle version de votre application ne peuvent gérer correctement.

L’absence de scripts de rollback est presque aussi courante. La migration est appliquée, un problème survient en aval, et la première question que tout le monde se pose est : « Peut-on revenir en arrière ? » Si la réponse est « nous n’en avons pas écrit », vous vous retrouvez alors à rédiger un script de restauration sous pression, sur une base de données de production, alors qu’un incident est en cours.

Les verrous sur les grandes tables prennent régulièrement les équipes au dépourvu. Une instruction ALTER TABLE sur une table contenant des dizaines de millions de lignes peut maintenir un verrou exclusif pendant plusieurs minutes. Pendant ce laps de temps, toutes les requêtes qui touchent cette table sont mises en file d’attente. Votre application ralentit considérablement, voire s’arrête complètement.

La dérive de l’environnement aggrave encore tout cela. Si votre base de données de préproduction ne reflète pas fidèlement la configuration de production — volumes de données différents, lignes de cas limites différentes, index différents —, une migration qui s’exécute correctement en préproduction peut échouer immédiatement en production.

Le workflow de migration de DataraDB

DataraDB s’attaque directement à chacun de ces points de défaillance, en traitant les migrations comme un processus structuré plutôt que comme un fichier que l’on exécute en espérant que tout se passe bien.

Ébauche et aperçu avant application

Chaque migration commence par un brouillon. Avant que quoi que ce soit ne touche à votre base de données, DataraDB vous présente un comparatif détaillé de ce qui va exactement changer : quelles colonnes sont ajoutées, modifiées ou supprimées ; quelles contraintes sont ajoutées ou supprimées ; quels index seront affectés. Vous pouvez ainsi examiner l’impact complet de la migration avant même qu’une seule requête ne soit exécutée.

Cette étape de prévisualisation permet de détecter les erreurs évidentes — les incompatibilités de types, les valeurs par défaut NOT NULL manquantes, les suppressions accidentelles de colonnes — avant qu’elles ne se transforment en incidents.

Simulation sur des données réelles

Le mode de simulation exécute la logique de migration sur un instantané de votre schéma réel et signale toutes les erreurs rencontrées, sans apporter de modifications. Si une violation de contrainte se cache dans vos données existantes, vous le découvrez dès maintenant, et non lors d’un déploiement en production un vendredi à 18 h.

Close-up of programming code on a dark monitor screen

Les scripts de restauration sont obligatoires, et non facultatifs

Le processus de migration de DataraDB impose la présence d’un script de restauration avant qu’une migration puisse être appliquée à l’environnement de production. Il ne s'agit pas d'une case à cocher que vous pouvez ignorer, mais d'une étape incontournable. Si vous n'avez pas rédigé le script de migration vers une version antérieure, vous ne pouvez pas exécuter la migration vers une version supérieure dans un environnement de production.

Cela peut sembler strict, et ça l'est. C'est également la pratique la plus efficace pour limiter la durée des incidents de migration lorsqu'ils surviennent.

Voici à quoi ressemble un exemple simple de « avant/après » :

L’approche manuelle :

-- up.sql
ALTER TABLE users ADD COLUMN subscription_tier varchar(50);

-- (script de restauration : peut exister, peut ne pas exister)

Avec DataraDB :

-- DataraDB exige les deux avant l’application en production

-- up
ALTER TABLE users ADD COLUMN subscription_tier varchar(50) DEFAULT 'free' NOT NULL;

-- down
ALTER TABLE users DROP COLUMN subscription_tier;

La différence peut sembler minime. En pratique, la deuxième approche signifie que si un problème survient trois étapes plus loin dans un déploiement, vous disposez d’une restauration testée et prête à l’emploi, plutôt que d’un fichier de migration vide et d’un fil de discussion sur l’incident qui ne cesse de s’allonger.

Historique des migrations et piste d’audit

Chaque migration appliquée via DataraDB est enregistrée : ce qui a été exécuté, quand, sur quel environnement et par qui. Cela est important pour la conformité, et l’est encore plus lorsque vous déboguez un problème et que vous essayez de déterminer exactement ce qui a changé et à quel moment.

La vue « Historique » affiche également les données relatives à la durée des migrations au fil du temps ; vous pouvez ainsi constater qu’une migration qui prenait auparavant deux secondes en prend désormais trente — ce qui indique que votre table est devenue suffisamment volumineuse pour que l’approche soit modifiée avant que cela ne pose problème.

Partir de ce dont vous disposez

Si vous héritez d’une base de code comportant un schéma existant et une multitude de fichiers de migration historiques, DataraDB peut importer l’état actuel de votre schéma et vous permettre de poursuivre votre travail à partir de là. Vous n’avez pas besoin de repartir de zéro ni de rejouer chaque migration depuis le tout début.

L’objectif n’est pas de changer votre façon d’envisager l’évolution du schéma, mais d’ajouter une couche de sécurité qui vous permette de mener cette évolution en toute confiance, à votre rythme, sans passer des nuits blanches à vous demander si le déploiement va tenir la route.

Essayez DataraDB lors de votre prochaine migration. Dès la première fois que vous détecterez une violation de contrainte lors d’un test en mode simulation plutôt que lors d’un incident en production, l’outil aura déjà fait ses preuves.