Le processus de déploiement de Slack
(slack.engineering)-
Toutes les PR doivent passer la code review et les tests
-
Le code fusionné n’est déployé que pendant les heures de bureau en Amérique du Nord (pour pouvoir résoudre les problèmes en cas d’incident)
-
Environ 12 déploiements planifiés par jour
-
Un responsable de déploiement est désigné pour chaque déploiement
-
Création d’une branche de release
-
Déploiement en staging et tests manuels
-
Déploiement sur le Slack interne (tier « dogfooding »), puis déploiement canari (avec seulement 2 % du trafic total routé)
-
Déploiement progressif par étapes jusqu’à 10, 25, 50, 75 et 100 %
Pour gérer les risques, Slack forme les responsables de déploiement afin qu’ils supervisent toutes les étapes et prennent en charge la communication.
L’objectif est de détecter les problèmes le plus vite possible, d’identifier la PR en cause, de la retirer, puis de déployer un nouveau build.
Si un problème n’a pas été détecté avant l’arrivée en production, il faut d’abord restaurer l’état précédent avant de lancer l’enquête.
Au début de l’entreprise, quand elle n’exploitait qu’une dizaine d’instances EC2, le déploiement consistait simplement à faire un rsync.
Avant le déploiement en production, il n’y avait qu’une seule étape de staging.
Après les tests, le déploiement partait immédiatement.
À mesure que le nombre de clients augmentait, rsync seul n’a plus suffi.
→ Passage à un système full parallel pull-based
Au lieu d’envoyer le nouveau build sur les serveurs via un script, chaque serveur récupère le build simultanément lorsqu’il reçoit un signal via un changement de clé Consul.
→ Déploiement atomique avec séparation des dossiers Hot/Cold
Lors d’un déploiement, le nouveau code est copié dans le répertoire Cold, qui n’est pas utilisé par le service, tandis que le service existant continue de servir depuis le répertoire Hot.
Quand il n’y a plus de processus actifs sur le serveur, les répertoires Hot et Cold sont échangés, ce qui permet au nouveau code d’être servi immédiatement.
1 commentaires
Consul par Hashicorp https://www.consul.io/
Le backend de Slack fonctionne en PHP/Hacklang sur HHVM, donc cet échange à chaud/à froid semble possible.
https://www.quora.com/What-is-the-tech-stack-behind-Slack