Blog

Travailler dur pour augmenter la disponibilité

Chargement...

10 min de lecture

Travailler dur pour augmenter la disponibilité

Le mois dernier, la plateforme a subi quelques pannes. L'une d'entre elles a été plus importante et a conduit à un article de blog post-mortem pour expliquer à nos clients ce qui s'est passé https://scalingo.com/articles/2015/07/29/outage-of-wed-29th-july-postmortem. Après quelques semaines de réflexion, nous avons établi une liste de tâches à réaliser pour améliorer.

""

Le mois dernier, la plateforme a subi quelques pannes. L'une d'elles était plus importante et a conduit à un article de blog post-mortem pour expliquer à nos clients ce qui s'est passé https://scalingo.com/articles/2015/07/29/outage-of-wed-29th-july-postmortem. Après quelques semaines de réflexion, nous avons établi une liste de tâches à accomplir pour améliorer la disponibilité globale de la plateforme. Cet article détaillera les actions qui ont suivi la panne et ce qui est prévu maintenant.

Fait : Notification d'alertes critiques

Tout d'abord, nous ne pouvions pas manquer une autre alerte serveur comme nous l'avons fait le 29 juillet. C'est pourquoi nous avons intégré PagerDuty comme service de notification. PagerDuty est déclenché chaque fois qu'une erreur considérée comme ‘critique’ est levée. Les notifications d'alerte ne s'arrêtent pas tant qu'un membre de l'équipe ne les a pas reconnues.

Fait : Monitoring de bout en bout de l'infrastructure

Une nouvelle entité, externe à l'infrastructure, déploie désormais des applications plusieurs fois par heure. Grâce à cela, nous pouvons être sûrs que la chaîne de production complète fonctionne comme prévu. Si quelque chose ne va pas, une alerte est déclenchée et l'équipe est prévenue immédiatement.

En cours : Pour plus de transparence, une page de statut arrive

https://scalingostatus.com/ est en cours, ici nous pourrons afficher plus transparently les problèmes que l'infrastructure rencontre. Cela nous permettra également de donner des informations en temps réel sur le processus de récupération de l'infrastructure ainsi que sur les fenêtres de maintenance qui peuvent perturber la plateforme.

Externaliser les builds

Nous avons détecté que la partie la plus sensible de l'infrastructure est le processus de construction. Le build est le processus qui se produit lorsque vous commencez un nouveau déploiement. Il télécharge, décompresse, compile (parfois) de nombreux fichiers et cela peut consommer beaucoup de ressources.

Jusqu'à présent, les builds étaient effectués dans des conteneurs sur les mêmes serveurs qui exécutent effectivement les applications des utilisateurs, mais nous avons découvert que cela pourrait dégrader les performances des applications plus que nous le pensions. Nous avons d'abord décidé de limiter les ressources du conteneur de build, mais cela nous a conduits à un taux élevé d'erreurs impactant l'ensemble du serveur. (Voir la prochaine partie concernant BTRFS)

Backend de stockage Docker BTRFS, le temps du changement ?

Ce n'est un secret pour personne que nous avons fait le choix d'utiliser Docker comme technologie d'isolation pour les applications de nos utilisateurs. Depuis le début de son développement jusqu'à nos jours, trois systèmes de fichiers ont été expédiés comme “stables”. Nous les avons tous utilisés et nous avons des sentiments mitigés à leur égard.

Tout d'abord, nous n'avions pas le choix, nos serveurs utilisaient AUFS comme backend de stockage pour Docker, puis lorsque Red Hat a poussé Docker à supporter ext4-devicemapper, comme nous avions quelques bugs ennuyeux avec AUFS, nous avons décidé de migrer notre infrastructure vers ce backend.

Avec le mappage de périphériques, les performances de création/suppression de conteneurs ont chuté considérablement, mais dans l'ensemble, nous avons rencontré des problèmes de blocage sérieux avec ce backend de stockage. (exemples : https://github.com/docker/docker/pull/4951https://github.com/docker/docker/issues/5653)

Nous étions plutôt heureux lorsque BTRFS a été intégré à Docker et considéré comme stable car c'était un autre choix prometteur. Au début, il nous semblait que c'était le pilote le plus efficace pour Docker, rapide et stable. Mais au fur et à mesure de notre montée en charge, le nombre d'opérations appliquées sur la partition a entraîné de nouveaux problèmes. Récemment, deux pannes d'un serveur impactant certaines applications clientes étaient liées à ce qui semble être un blocage de BTRFS.

Jusqu'à présent, aucun système de fichiers ne nous semblait parfait. Récemment, avec Docker 1.7+, deux nouveaux backends ont été intégrés au produit, overlayfs et ZFS (toujours étiqueté comme expérimental https://github.com/docker/docker/pull/9411). Nous allons probablement les essayer afin de trouver une meilleure alternative et d'améliorer la stabilité globale de la plateforme.

Toutes les choses doivent être distribuées et tolérantes aux pannes

Certains de nos composants fonctionnent encore avec redis comme backend pour gérer les files d'attente de messages (Sidekiq, go-workers). Même si redis est une excellente base de données avec des fonctionnalités intéressantes pour gérer les queues, ce n'est pas une base de données distribuée. Redis sentinel et cluster valent la peine d'être examinés, mais ils ne sont pas conçus pour être un moteur de file d'attente de messages sans temps d'arrêt. C'est pourquoi, nous allons migrer tous les composants pour utiliser NSQ http://nsq.io/. Ce logiciel, une fois installé sur plusieurs nœuds, est hautement disponible et ne contient aucun point de défaillance unique. Cela nous aidera à gérer plus sereinement les pannes de nœuds.

Améliorer l'isolement et la récupération des serveurs dysfonctionnels

Il existe plusieurs cas où les serveurs peuvent être considérés comme dysfonctionnels. Quel que soit le problème, matériel, réseau, bugs logiciels ou gel du noyau, la priorité est de l'isoler. Peu importe si toutes les applications d'un nœud ou seulement une sont affectées, cela doit être détecté et géré. Les problèmes importants sont faciles à détecter, il est beaucoup plus difficile de détecter des anomalies mineures. Une partie de cela devrait et peut être faite automatiquement, les applications doivent être déplacées immédiatement. 

Stocker les images des applications dans une solution de stockage d'objets

Aujourd'hui, le registre des images est hébergé aux côtés du nœud d'applications, cela génère beaucoup d'IO disque et réseau pour distribuer des images à l'ensemble de l'infrastructure. Même si le stockage est redondant et hautement disponible, nous savons qu'à une certaine échelle, cela ne sera tout simplement pas suffisamment efficace.

Une partie de ce problème peut être résolu en utilisant une solution de stockage externe, plus particulièrement, une solution de stockage d'objets. Elle a l'avantage d'abstraire complètement le backend de stockage, sa capacité ainsi que sa capacité à évoluer et à être facilement interfacée avec n'importe quelle technologie.

Haute disponibilité des bases de données

Aujourd'hui, les addons que nous proposons sont à nœud unique. Il n'est pas possible de créer une haute disponibilité sans redondance. C'est pourquoi l'un de nos grands objectifs aujourd'hui est de vous permettre de choisir et/ou de mettre à niveau des bases de données hautement disponibles, avec l'assurance que le cluster de bases de données sera situé près de votre application et conservera de bonnes performances comme aujourd'hui. Nous sommes actuellement à la recherche du meilleur modèle qui serait facile à intégrer dans vos projets. Notre objectif est de le faire complètement de manière transparente pour vous et vos applications.

Conclusion pour aujourd'hui

Notre priorité est de fournir la meilleure qualité de service possible. Il n'y a pas de solution miracle pour cela, de nombreuses décisions et actions doivent être envisagées et appliquées. Comme détaillé dans cet article, nous avons commencé à travailler pour améliorer la stabilité globale de la plateforme. Cette liste est loin d'être exhaustive, et nous communiquerons dans d'autres articles nos progrès dans ce domaine.

Yann Klis, Scalingo

Yann Klis

Yann KLIS a fondé Scalingo en 2015 avec son associé Léo Unbekandt avec la vision de proposer une plateforme cloud d'hébergement web, véritable alternative européenne et souveraine aux géants américains. Aujourd'hui Scalingo héberge plusieurs milliers d'applications web déployées par des clients du monde entier ! L'objectif de Scalingo est de devenir la plateforme cloud de référence pour les développeurs web en Europe. Auparavant, il a fondé Novelys, un studio de développement spécialisé dans la technologie Ruby on Rails.

Restez informé

Recevez des articles et des mises à jour de la plateforme dans votre boîte de réception.

Prêt à déployer en toute confiance ?

Découvrez des déploiements sans temps d'arrêt, une mise à l'échelle automatique intelligente et une infrastructure entièrement gérée. Commencez à déployer vos applications sur Scalingo dès aujourd'hui.

Aucune carte de crédit requise • Déployez en quelques minutes • Annulez à tout moment

Dégradé arrière-plan section

Déployez une application ou base de données

Commencez à déployer

Rejoignez les équipes qui misent sur une plateforme conçue pour livrer rapidement, opérer sereinement, avec des valeurs européennes et un support humain.

Dégradé arrière-plan section

Déployez une application ou base de données

Commencez à déployer

Rejoignez les équipes qui misent sur une plateforme conçue pour livrer rapidement, opérer sereinement, avec des valeurs européennes et un support humain.

Dégradé arrière-plan section

Déployez une application ou base de données

Commencez à déployer

Rejoignez les équipes qui misent sur une plateforme conçue pour livrer rapidement, opérer sereinement, avec des valeurs européennes et un support humain.