Mémo: Base de données et conteneurs

D’après toute la littérature trouvée, la gestion des données “vivantes” est un des principaux points de difficulté dans les infrastructures applicatives basées sur les conteneurs.

Globalement, les recommandations de la communauté oscillent entre le conseil d’éviter absolument d’exécuter des bases de données dans des conteneurs ou au minimum de gérer la montée en charge en se basant sur les mécanismes de réplication internes aux moteurs de base de données (master/slave avec failover principalement).

Le répertoire de données de la base devrait être un volume monté à partir de la machine hôte afin d’éviter la surcharge induite par l’abstraction du système de fichier “par couche” utilisé par Docker par défaut.

Dans le cas d’un usage des conteneurs en mode Swarm, il faudra identifier un driver de volumes capable de faire migrer ceux ci en même temps que leurs conteneurs de rattachement et évaluer le coût en temps de traitement supplémentaire.

Deux possibilités sont donc envisageables pour l’application Zéphir:

  • Les bases de données des différents services ne sont PAS incluses dans l’infrastructure de conteneurs et sont exécutées directement sur la machine hôte (ou une autre machine physique/virtuelle). Leur installation et leur suivi de la montée en charge ne sont donc pas gérés de la même manière que les services de l’application.
  • Les bases de données sont exécutées dans des conteneurs comme les services de l’application. Il faut donc faire la configuration nécessaire pour gérer le mode “cluster” de celles ci et s’assurer qu’une nouvelle instance démarrée rejoigne automatiquement le cluster existant. Pour permettre la découverte automatisées des instances “pairs”, l’usage d’outil de découverte de services comme Serf ou Consul sera nécessaire (potentiellement en suivant le patron de conception “Autopilot”, voir la bibliographie).