Yousign publie une librairie open source pour le Zero Downtime Deployment

Smaine Milianni
Yousign Engineering & Product
4 min readJan 19, 2024

Chez Yousign nous faisons du déploiement sans interruption de service, plus communément connu sous le nom de zero-downtime deployment, ou ZDD 📖 (j’ai abordé le ZDD dans une conférence dont voici les slides.)*

Le ZDD demande de la rigueur et de la réflexion, il faut penser à de nombreux “edge cases” car la moindre erreur peut provoquer une interruption de service 💥 (ce que nous cherchons à tout prix à éviter 😅).

Pour que votre déploiement se fasse sans interruption de service il faut que les services que vous allez mettre à jour soient compatibles avec la version du code en production — le temps de déployer la nouvelle version. Pour s’assurer de cette comptabilité, il faut les tester, de manière manuelle 🤝 ou automatisée 🤖.

Les tests manuels sont chronophages, ils peuvent être oubliés. Si vous souhaitez mettre en prod fréquemment il faut privilégier les tests automatisés 🦾.

💡 Dans le cadre de cet article, nous allons parler uniquement des messages asynchrones qui transitent via un Message Broker. Il y a une série d’autres endroits de la stack qui sont des points d’attention en ZDD (en particulier la DB), mais ceux-ci ne seront pas couverts dans cet article.

Pour être compatibles avec le ZDD, les messages écrits en version N doivent pouvoir être consommés en version N+1.

Si la version N+1 n’est pas capable de déserialiser et consommer un message produit en version N, vous allez avoir des erreurs 🐛 et de quoi vous réveiller si vous étiez un peu dans la lune 😴.

🛠 À ma connaissance, aucun outil PHP ne permet de tester qu’une version d’un message (objet PHP) est compatible avec une autre version, c’est pourquoi nous avons initié un outil en interne chez Yousign.

Pour développer cet outil, nous avons profité des journées qu’accorde Yousign aux équipes technique pour améliorer la stack technique et/ou faire de la refacto 😍.

Cette journée s’appelle l’Engineering day (un article dédié sur ce sujet va paraître bientôt).

Voici sommairement comment fonctionne l’outil, développé à la base pour le périmètre d’une seule équipe:

  • Il sérialise les messages en version N dans un fichier,
  • puis les déserialise en version N+1.

Notez qu’il y a aussi d’autres contrôles pour s’assurer que les changements sont bien compatibles avec le ZDD.

1 image vaux mieux que 1000 mots👇👀

Make it work, then make it better 🧼

Comme pour les outils de tests et de qualité, le plus “difficile” dans ce genre de situation c’est la première étape.

Une fois les fondations en place c’est plus simple d’apporter sa pierre à l’édifice et c’est ce qui s’est passé.

Après une première implémentation concluante, de multiples devs se sont appropriés l’outil et y ont apportés des modifications. Après tout “Rome ne s’est pas faite en un jour 🏟 “

Don’t Repeat Yourself 🔂

Avec le temps une autre équipe chez Yousign a eu le même besoin. Les devs de cette équipe ont donc littéralement dupliqué le code pour l’ajouter dans leur processus de release.

À partir de là, nous avons eu une réflexion sur l’extraction de cette brique logicielle de manière à n’avoir à maintenir qu’une base de code et éviter d’appliquer des changements sur les deux projets.

L’open source dans tout ça 🗺

Yousign supporte les évènements tech tels que le Forum PHP 🙌🏿 et contribue également de manière financière et humaine à l’open source ❤️‍🔥.

Nous mettons la technique au service d’un produit.

Le secteur de la signature électronique étant novateur, les équipes de développement sont amenées à faire de la R&D et à repousser les limites des outils qu’ils et elles utilisent. Il n’est pas rare que nos équipes contribuent à l’open source pour créer et/ou améliorer des librairies existantes, voici quelques examples:

Rendre open source une librairie qui pourrait aider d’autres équipes nous paraissait normal, c’est pourquoi nous rendons open source “le Zero Downtime Deployment Message Bundle” 🎉.

N’hésitez pas à l’implémenter et à y contribuer 🤝

--

--