Pour maintenir en toute sérénité ses milliers de serveurs, Facebook a choisi le gestionnaire de configuration Open Source Chef pour gérer l'énorme infrastructure sur laquelle repose le géant des réseaux sociaux, en l'adaptant très légèrement. « Le plus grand avantage de Chef est sa flexibilité », a déclaré Phil Dibowitz, ingénieur systèmes de Facebook. Chef est un des nombreux outils de gestion de configuration Open Source dont la popularité n'a cessé de croître ces dernières années. Alors que les datacenters se développent toujours plus, les entreprises cherchent à automatiser leurs opérations de routine pour le déploiement et la mise à jour de leurs serveurs, commutateurs, systèmes d'exploitation, bases de données et autres composants. La manière dont Facebook gère son infrastructure pourrait inspirer d'autres entreprises. Le réseau social cherchait « une autre façon de gérer ses systèmes », comme l'a déclaré l'ingénieur du réseau social. Même si le service en ligne ne communique pas sur la quantité de serveurs qu'il doit gérer, les observateurs du secteur estiment que leur nombre est de l'ordre de dizaines de milliers, au moins. Étonnamment, l'équipe chargée de gérer l'infrastructure de l'entreprise se limite à une poignée d'employés, quatre au dernier décompte, Phil Dibowitz compris. Avant de passer à Chef, Facebook utilisait une autre solution de gestion de configuration également Open Source nommée CFEngine. Mais le déploiement devenait de plus en plus lourd. Après la mise à jour en version 2 de CFEngine, Facebook a du faire face à une prolifération rapide de fichiers de contrôle système difficile à maitriser. Les utilisateurs ne pouvaient plus modifier directement le fichier de gestion de configuration. En fait, chaque fois que les ingénieurs d'exploitation avaient besoin de modifier un système, ils devaient dupliquer le fichier système et réadresser le dossier dans CFEngine. « En faisant cette manipulation, ils ajoutaient chaque fois des centaines de lignes provenant de la configuration obsolète », a expliqué Phil Dibowitz. Si bien que l'équipe finissait par ne plus contrôler l'état des variantes de configuration, ni savoir quels paramètres de configuration étaient à jour. « C'est devenu ingérable», a déclaré l'ingénieur systèmes de Facebook.

Chef, Puppet et Spine testés par l'équipe de Facebook

Pour trouver le système de gestion de configuration Open source le plus adapté, l'équipe a réalisé un certain nombre de tests avec Chef, Puppet, et Spine développés par Ticketmaster pour étudier le comportement de chaque solution. « Chef s'est avéré le meilleur à de nombreux points de vue », a déclaré Phil Dibowitz. En premier lieu, Chef permet une grande flexibilité sur le plan de l'écriture du code qui sert à modifier les configurations. Cela vient en partie de sa base Ruby, un langage de programmation à part entière, facile à apprendre pour les administrateurs et les ingénieurs. « Il n'y a pas de facteur limitant. Il n'est pas impératif de travailler dans un langage de programmation Domain Specific Language (DSL) dédié à un domaine d'application précis comme c'est le cas pour CFEngine ou Puppet », a expliqué l'ingénieur systèmes. « Avec Chef, nous avons eu beaucoup plus de latitude pour faire ce que nous voulions ».

Mais Chef a de nombreux autres avantages. « Il est capable de gérer les paramètres à un niveau beaucoup plus granulaire. Il permet également une plus grande souplesse pour gérer les fichiers de configuration eux-mêmes », a expliqué Phil Dibowitz. Plus précisément, le système de gestion de configuration permet de modifier un fichier de configuration pour un utilisateur spécifique. « Les administrateurs de bases de données, ceux qui travaillent sur la structure Web, ou sur le cache - tous peuvent écrire le code qui sert à modifier les paramètres qui les concernent, sans avoir à se soucier de quoi que ce soit d'autre », a déclaré l'ingénieur systèmes de Facebook. Par exemple, si les administrateurs de MySQL ont besoin de plus de mémoire pour une base de données, ils peuvent simplement modifier cette contrainte dans Chef. Et toute modification apportée à un fichier de configuration est transmise à l'ensemble du service en ligne en quelques minutes. « Le changement est répercuté en 30 minutes ou moins sur le réseau social au niveau mondial, » a déclaré Phil Dibowitz. Le fait de déléguer ce contrôle aux ingénieurs de secteur allège le travail de l'équipe chargée de l'infrastructure centrale. « On peut ainsi faire beaucoup plus de travail avec moins de gens », a encore déclaré l'ingénieur de Facebook.

Une série de modèles pour gérer les configs

Le réseau social a dû cependant modifier la façon dont Chef gère les modifications de configurations obsolètes. À l'origine, le logiciel ne dispose pas d'une solution facile pour supprimer automatiquement les changements quand ils ne sont plus nécessaires. « À l'échelle de centaines de milliers de systèmes, on peut dire que la tâche est vite fastidieuse », a déclaré l'ingénieur. En général, les entreprises utilisent Chef pour avoir la possibilité de créer leurs propres « recettes » ou leur propre liste de modifications de configuration, à charge pour Chef de les appliquer ensuite au système concerné. Cependant, Facebook a poussé le processus un peu plus loin. Les ingénieurs du réseau social ont développé une série de modèles qui définissent les valeurs par défaut de chaque fichier de configuration, associant un hash numérique au modèle original. À chaque fois que Chef exécute un fichier de configuration, il peut utiliser la valeur de hachage pour supprimer toutes les entrées définies comme obsolètes. « Cette façon d'utiliser Chef est assez inhabituelle », a reconnu Phil Dibowitz. Et elle ne nécessite aucun outil supplémentaire. « Tout est déjà dans Chef, mais nous l'utilisons différemment », a-t-il ajouté. Le réseau social utilise donc Chef pour gérer l'ensemble de ses serveurs et il est également en train de migrer d'autres logiciels et matériels sous Chef.

Facebook a transmis certaines des modifications qu'il a réalisées dans le code base à l'éditeur de Chef. L'entreprise, basée à Seattle, s'appelait Opscode. Elle a pris le nom de Chef en décembre. Les ingénieurs de Facebook ont également écrit de nouveaux outils Open Source pour Chef, dont certains ont été publiés sur GitHub. Parmi ces outils, Grocery Delivery permet à plusieurs clusters Chef de synchroniser leurs « recettes ». Depuis que ce code est sur GitHub, il a reçu des contributions dont Facebook a lui-même profité. Mais le plus important pour le réseau social c'est peut-être que Chef permet aux gestionnaires systèmes d'avoir un plus grand contrôle sur leurs propres configurations. Phil Dibowitz reconnaît que cette approche a suscité quelques critiques, mais cela n'est pas essentiel. « Notre job chez Facebook est aussi de ne pas entraver le travail de nos ingénieurs », a déclaré Phil Dibowitz. « Notre responsabilité ne se limite pas à rendre ces systèmes fiables, mais aussi de permettre à chacun d'accéder au système pour faire son travail ».