af83

Quelques conseils pour tenir bon lors d'une soirée électorale

Comme vous le savez, hier s'est tenue la soirée électorale pour le premier tour des élections présidentielles française. À cette occasion, j'étais dans les locaux de France Télévisions avec l'équipe de rédaction dédiée à l'information sur Internet. En effet, af83 a développé la plateforme de résultats pour France Télévisions et j'étais là pour parer à toute éventualité.

Je profite donc de cette expérience pour vous donner quelques conseils pour gérer ce genre de situations.

1. La préparation

Il est important d'arriver bien préparé parce que vous pouvez être sûr qu'il va y avoir des problèmes. Pas forcément des bugs graves, mais on va vous remonter des problèmes. Je vous conseille donc de prendre un peu de temps pour réfléchir aux problèmes qui pourraient vous arriver et prévoir un plan de secours pour chacun.

L'exemple typique est que le serveur web n'arrive plus à traiter les requêtes assez vite. Pour cela, la réponse est tout aussi classique : utiliser un cache devant le serveur web (Varnish, Akamai, etc.) et pouvoir facilement enclencher un code rouge, un mode dégradé qui va mettre tous les fichiers principaux en cache avec un TTL très long. Le site va donc être bien moins dynamique mais au moins, il s'affichera, vous laissant ainsi un peu de temps pour trouver une meilleure solution.

Cette préparation doit aussi se matérialiser sous la forme d'une documentation sur l'administration et l'exploitation de l'application. On y trouvera, par exemple, comment relancer les différents services et les conséquences associées (est-ce que cela va entrainer un downtime ?).

Cette documentation va sûrement vous donner des séquences de commandes qui vont bien ensemble : aller dans tel répertoire, lancer telle commande pour regénerer tel fichier puis flusher Varnish. Dans ces cas là, il est souvent intéressant de se préparer un moyen pour lancer la séquence en une commande (script ruby, alias ou fonction shell, etc.). Ça vous fera gagner un peu de temps, mais surtout ça vous évitera d'oublier une étape dans la séquence ou de la faire dans le mauvais ordre…

2. L'action

La préparation est importante, mais même en étant très bien préparé, on n'est pas à l'abri d'une mauvaise surprise. À ce moment là, il est important de garder la tête froide. Il est très tentant de vouloir corriger le plus vite possible le problème, quitte à coder directement sur les serveurs de production. Et pourtant ce n'est pas une bonne idée : vous risquez d'aggraver la situation.

Une fausse commande est très vite arrivée. Des exemples ? Oublier le WHERE d'une commande SQL ? Vous avez modifié le mot de passe de tous les utilisateurs. Une variable mal initialisée ? Vous venez d'écraser un fichier très important. Remonter l'historique du shell et prendre la mauvaise commande ? Vous êtes bon pour refaire cet import de données qui prend 3h. Bref, si vous cédez à la panique, vous aurez à peu près autant de chances d'améliorer le service que l'empirer.

Il convient donc de garder son calme, de respirer un grand coup et de tester sur un autre environnement les modifications que vous allez faire. Puis, quand vous serez connecté sur les serveurs de production, prenez deux secondes avant d'appuyer sur Entrée. Ce n'est pas parce que des gens courent dans tous les sens les bras levés que vous devez faire n'importe quoi. Là, plus que jamais, il convient de prendre un peu de recul.

Essayez aussi de vous protéger. Par exemple, si vous allez modifier un fichier, faites une copie du fichier avant. Si vous lancez un script qui va régénerer une page HTML, appelez d'abord l'URL de cette page pour qu'elle soit dans le cache, ce qui vous laissera un peu de temps pour vérifier le fichier généré avant qu'il ne soit en ligne. Et s'il n'est pas bon, vous avez fait une copie, non ? Si vous devez refaire un import, est-ce que vous pouvez le faire sur un autre serveur et juste importer un dump SQL ou un tarball des fichiers mis à jour ? Bref, limitez ce qui pourrait mal se passer.

Dernière chose, soyez concentré. À partir du moment où vous commencez à avoir une demande, vous allez très rapidement en avoir d'autres. Et vous allez donc essayer de les traiter en même temps. Ce script va au moins prendre 30 secondes, j'ai le temps d'aller jeter un coup d'oeil au code source pour cet autre bug : c'est une très mauvaise idée. Faire du multi-tâches est le meilleur moyen pour faire des erreurs.

TL;DR

Pour résumer, soyez bien préparé, ne cédez pas à la panique, gardez la tête froide, vérifiez plutôt deux fois qu'une tout ce que vous faites sur le serveur et ne faites qu'une seule chose à la fois. Ces conseils ne sont que des conseils, pas une méthode magique pour éviter tout problème. Mais ils devraient vous aider à réduire fortement les ennuis.

blog comments powered by Disqus