Blue/Green : comment mettre en prod sans interruption avec Drupal

30 janvier 2020
Blue/Green : comment mettre en production sans interruption avec Drupal

Blue/Green est un modèle de déploiement applicatif qui nécessite la création de deux environnements en parallèle et ce afin de garantir une continuité de service lors de la bascule d’une version N à N+1 en production. Nous allons partir du principe que le projet Drupal est hébergé chez AWS.

Qu'est ce que la méthode Blue/Green ?

Il existe plusieurs types de mode de déploiement en production :

  • Rip & Replace : on remplace les anciennes sources par les nouvelles.
  • Continuous : on ajoute les nouveaux codes aux anciennes sources
  • Blue/Green : environnement en parallèle

C’est Blue/Green qui va nous intéresser ici. Un modèle de déploiement applicatif qui nécessite la création de deux environnements en parallèle et ce afin de garantir une continuité de service lors de la bascule d’une version N à N+1 en production.

Processus : On met à jour une version N+1 à côté de la version N et une fois celle-ci installée on bascule le trafic de la version N à la version N+1.

Voici un premier schéma explicatif :

Blue Green - mettre en production sans interruption avec Drupal - Processus

Source : Amazon

 

Pourquoi Blue/Green n'est faisable que dans certains cas précis sur Drupal ?

Avec Drupal, le premier constat est que l’utilisation d’une unique base de données durant le processus n’est pas réalisable en l’état. Lors de la mise à jour, la maintenance du site sur Drupal 8 n’est pas obligatoire. Cependant la navigation n’est pas assurée, ce qui va à l’encontre de ce processus de mise à jour sans interruption. Il est donc fortement conseillé de passer le site en maintenance pendant la montée en version du schéma.

Le schéma sera donc plus proche de celui-ci :

Blue Green - mettre en production sans interruption avec Drupal - MySQL

Source : Nelap

 

Ou le MySQL de Green et un réplica du MySQL Blue juste avant la nouvelle installation de Green.

Comment mettre en place Blue/Green avec Drupal ?

Voici un schéma montrant une instance Drupal en production chez AWS. Cela représente l’instance Blue par exemple.

Blue Green - mettre en production sans interruption avec Drupal - AWS

 

La mise en place de Blue/Green nécessitera la duplication de cette instance, cela implique donc un prix assez élevé.

Blue Green - mettre en production sans interruption avec Drupal - AWS

 

Il est important de bien comprendre que durant la période de synchronisation des configurations (entre les nouvelles sources Drupal et la BDD), un temps de contribution sur le site pourra être perdu. Exemple :

  1. On lance la nouvelle installation de la version N+1
  2. On copie la BDD de la version N
  3. On lance les scripts de mise à jour.

Si durant ce laps de temps des contenus (node, entité ou user) sont créés, ils ne seront pas reportées sur la BDD N+1 (sauf si un script de maj de ces contenus est prévu à cet effet).

Quels sont les développements spécifiques à prévoir ?

Il y a d’autres points à prendre en considération pour la bonne mise en place de Drupal avec Blue/Green. Dans un premier temps, il faut sortir le stockage du cache de la BDD et le mettre dans Redis (ou Memcached) dans le but de pouvoir mutualiser ce dernier entre les deux instances.

Blue Green - mettre en production sans interruption avec Drupal - Redis

Source : Redis

 

De la même façon les sessions utilisateurs peuvent être stocker dans Redis ce qui permettra de ne pas perdre les sessions lors de la bascule de Blue vers Green.

Blue Green - mettre en production sans interruption avec Drupal - Redis

Source : Create submodule to store PHP sessions in Redis

 

Il sera donc important de se rapprocher du schéma suivant :

Blue Green - mettre en production sans interruption avec Drupal - Docker

 

En ce qui concerne la perte de data lors de la procédure de déploiement, des modules comme entity_share pourront permettre de mettre en place une synchronisation entre les environnements au niveau des contenus.

Blue Green - mettre en production sans interruption avec Drupal - Entity Share

 

Retour d'expérience Actency

Ce que nous pouvons dire en retour d’expérience c’est que ce processus ne peut s’appliquer qu’a certains types de projets Drupal.
Un projet qui génère beaucoup de contenus (node, commentaire etc.) à la minute ne sera pas adapté à ce mode de déploiement car il sera assez compliqué de rapatrier l’ensemble des contenus créés durant la procédure de déploiement.

Il est possible de bloquer temporairement les contributions afin d’éviter d’avoir des contenus à synchroniser. Cela peut être fait assez facilement en bloquant temporairement la page de connexion au site ainsi que celle de création de compte et de s’assurer que personne ne sera connecté sur le site ou ne pourra contribuer. Cependant il est sûr que ce système n’est pas idéal.

Cela nous montre bien que pour rendre ce mode de déploiement possible avec Drupal, il faut préparer en amont l’infrastructure ainsi que le socle applicatif. C’est donc à la création de l’environnement qu’il faudra se poser ces questions. Il est d’ailleurs très difficile d’envisager cette méthode de déploiement sur un projet déjà existant et qui ne prend pas en compte les éléments cités précédemment.

 

Envie de discuter de la méthode Blue/Green ou d'un de vos projets ?

Contactez-nous

Rubrique
Rodolphe Schnell
Rodolphe Schnell
Scrum Master