Tous les documents cliniques de la plateforme passent par un unique
service de stockage, initialement adossé à une instance MinIO
auto-hébergée que j'avais contribué à développer. Lorsque l'entreprise a
migré la plateforme vers Azure, un collègue et moi avons pris en charge le
volet stockage. Les médecins utilisent le produit pendant leurs journées
de consultation : il n'y avait donc pas de fenêtre de maintenance
suffisante pour migrer tous les documents en une fois. La migration devait
se faire plateforme en fonctionnement, sans perdre un seul fichier.
Plutôt qu'une bascule unique, nous avons rendu le service capable de
dialoguer avec les deux systèmes de stockage en même temps, et déplacé la
décision de routage dans la base de données : chaque tenant MinIO pointait
vers le tenant Azure qui le remplaçait, et le bucket de chaque cabinet
pointait vers celui qui le détenait physiquement. Migrer un bucket
devenait une mise à jour en base plutôt qu'un déploiement, et un feature
toggle permettait de renvoyer instantanément tout le trafic vers MinIO,
puisque rien n'y avait été supprimé, précisément pour assurer la
rétrocompatibilité.
J'ai développé l'outillage de migration en Python, exécuté comme job
Kubernetes : copie parallélisée, table de suivi rendant chaque exécution
reprenable, et comparaison du nombre d'objets des deux côtés avant tout
basculement du routage : copier, vérifier, puis basculer. Nous le lancions
en dehors des heures de consultation, migrant un ensemble de buckets, puis
nous arrêtions et reprenions plus tard là où nous nous étions arrêtés.
J'ai également écrit les chemins de lecture et d'écriture rétrocompatibles
permettant aux deux systèmes de coexister pendant que les buckets
basculaient un à un.
Le chantier s'est étendu sur environ neuf mois, de la conception à la
bascule finale, sans interruption de service ni perte de données. Une fois
la production stabilisée sur Azure, j'ai pris en charge le nettoyage :
suppression de l'ancienne implémentation, du feature toggle, des scripts
de provisionnement et des dépendances.