Bilan de la panne – 23 janvier 2014
Chez PagerDuty, nos clients comptent sur nous pour être hautement disponibles et fiables lorsque leur infrastructure ne l'est pas. Malheureusement, des bugs peuvent parfois apparaître dans nos logiciels. Lorsque ces incidents se produisent, nous veillons à offrir une transparence à nos clients qui pourraient avoir été affectés négativement. Nous nous excusons pour toute interruption de service et nous engageons à éviter que des problèmes ne se reproduisent à l'avenir.
TL;DR
Le jeudi 23 janvier 2014, aux premières heures de la matinée, nous avons connu une panne liée à une nouvelle fonctionnalité lancée pour prendre en charge nos applications mobiles. Cette situation était due à un type spécifique de requête de base de données lente, dont les effets étaient aggravés par une configuration de serveur qui obligeait chacune des requêtes lentes à effectuer plusieurs tentatives.
Impact de l'incident
Les requêtes lentes ont créé une charge importante sur l'un de nos serveurs de base de données, ce qui a entraîné un retard dans la réception des notifications chez certains utilisateurs, ainsi qu'une perte d'événements entrants. Cela s'est produit sur une fenêtre de 18 minutes entre 1h02 et 1h20 du matin.
Comment nous avons réagi
Nous avons pu identifier rapidement les requêtes lentes à l'origine du problème et y avons répondu en les interrompant manuellement. Nous avons ensuite restauré la version de l'application mobile dans le Google Play Store pour les clients Android. Le processus de publication de l'application sur l'AppStore iOS étant moins rapide, nous avons également supprimé la fonctionnalité back-end que nous avions introduite la veille. Depuis le 23, nous avons refactorisé le code incriminé et la nouvelle requête qui en résulte est presque trois fois plus rapide que l'originale. Nous avons également activé un suppresseur de requêtes lentes qui identifiera de manière proactive les requêtes non performantes et les arrêtera.
Mesures que nous prenons pour aller de l’avant
Nous allons mettre en place de nouveaux processus pour auditer les requêtes de base de données, qu'elles soient nouvelles ou anciennes. Nous testons généralement notre code de manière approfondie, mais nous pouvons améliorer la couverture des cas limites et des différentes permutations de paramètres. Les nouveaux processus contribueront à formaliser cela en introduisant des révisions de conception des requêtes, des tests de performances plus rigoureux et une analyse régulière des requêtes lentes.
Nous allons également revoir nos configurations de serveur pour garantir que toutes les requêtes de longue durée soient automatiquement arrêtées et qu'elles ne soient pas continuellement réessayées sur différents serveurs.
Enfin, nous mettrons en place une surveillance accrue pour détecter ces types de problèmes plus tôt et continuerons à refactoriser et à modulariser notre infrastructure back-end afin que les problèmes de performances dans un seul système n'affectent pas les systèmes non liés.