Migrations PostgreSQL à grande échelle
Migrations PostgreSQL à grande échelle :
Comment assurer zéro downtime et haute disponibilité
Le pass Culture c’est plusieurs dizaines de devs, un trac intense à toute heure du jour et de la nuit, des tables de base de données de plusieurs centaines de millions de lignes et une volonté forte de ne jamais afcher une page de maintenance à nos utilisateurs.
Ce contexte techniquement exigeant nous a forcé à régulièrement améliorer nos processus de mise en production. En période d’afluence, notre base de données doit en effet gérer jusqu’à 6000 opérations par seconde.
Dans cet article nous détaillons comment nous faisons évoluer au quotidien nos schémas de base de données sans downtime.
Situation
Pour gérer nos changements de schéma de base de données, nous utilisons des migrations DDL (Data Denition Language) qui nous garantissent que notre schéma de base de données Postgresql est en cohérence avec nos modèles Python grâce au duo SQLAlchemy & Alembic.
Dans le cadre d’un service sans downtime, certaines migrations peuvent se révéler complexes.
Prenons un exemple: dans un modèle User
, je souhaite supprimer un champ obligatoire (non-nullable) :