Monday, September 14, 2009

Haystack chez Facebook

De passage dans la vallée, je me suis dit que c'était le bon moment pour couvrir ce sujet. Une remarque en passant qui va surprendre mais qui montre bien que l'identité Internet est la plus importante car la plus universelle. Nous associons tous la couleur bleue à FaceBook comme son site le propose associé à toutes les communications et supports marketing mais les logos du HQ à Palo Alto (anciens locaux d'Agilent) sont rouges. Mystère...
C'est officiel depuis quelques mois, FaceBook (www.facebook.com) fait évoluer son infrastructure pour la partie stockage photo et CDN associé et swappe les solutions NetApp et Akamai/Limelight coûteuses pour un système à base d'Haystack. FaceBook est le site #6 sur Internet employant 500 personnes dont 200 à l'engineering et 25 en infrastructure, c'est aussi l'un des premiers sites MySQL dans le monde (plus de 800 serveurs memcached pour plus de 28To de RAM !!), plus de 10 000 serveurs en exploitation et 6 000 bases de données en production. Ouha, ça pose la société...
FaceBook n'a absolument pas besoin de produits coûteux, mais de services logiciels intelligents autour de composants standards, pas chers et offrant en final une très bonne qualité de service c'est-à-dire de la performance constante qui ne se dégrade pas avec le volume de données ou d'utilisateurs.  Le driver est financier et lié à la performance du service, la société avance un gain de 50% en matériel donc en $ et pour le même budget, on peut donc faire 2 fois l'activité précédente. Chez FaceBook, une des métrics utilisée est le TCpP ou Total Cost per Photo. C'est radical et immédiat même si les efforts ont été importants car le développement est au petit oignon comme souvent. La configuration faisait même appel à des montages NFS, à des supers configurations NetApp mais la qualité du service ne suivait pas. On comprend le changement quand on sait qu'il faut stocker des milliards de photos, les servir dans des temps records opérant une quantité de meta-data gigantesque ralentissant le système et offrant une qualité de service globale insuffisante !! Historiquement, FaceBook avait opté pour une batterie de CDN mais l'approche est coûteuse et ne fait que décaler le problème qui devient visible plus tard avec les volumes incroyables et le nombre de requêtes. Encore une fois, les besoins sont au-delà des offres existantes et les utilisateurs sont contraints de bâtir leur propore solution. FaceBook stocke essentiellement 2 types de photos, celles liées au profile et celles liées aux dépôts utilisateurs (différentes des profiles). Pour chaque photo soumise, FaceBook génére 4 photos de taille différente. Les statistiques sont encore hallucinantes:
  • 220 000 000 de photos uploadées chaque semaine soit 25To supplémentaire sur la même période ou disons plus de 3To par jour !!
  • en forte charge, 550 000 images sont servies par seconde !!
  • 15 Milliards de photos sont actuellement stockées soit 60 000 000 000 images (x4) !!
  • plus de 200 000 000 d'utilisateurs !!
Voici quelques détails sur cette solution. Haystack est conçu autour de systèmes standards 2U embarquant 2 quad-core, 16 à 32Go de RAM, 256 à 512Mo de cache NVRAM et 12 disques SATA de 1To en RAID 6 offrant 10To en XFS. L'architecture est multi-niveaux bien sûr avec des serveurs http, des serveurs de cache (cachr) des serveurs de stockage photo, l'object store Haystack et le système de fichiers. Ces unités sont utilisables avec plusieurs niveaux d'encapsulation: object store Haystack posés sur des fichiers présents sur 1 seul système de fichier data par noeud. La surcouche évite les approches posées directement sur des systèmes de fichiers bloc ou à base d'extents engendrant trop de traffic, trop d'indirection et trop de meta-data. Ce type d'utilisation ne nécessite pas non plus d'être Posix compliant et on retrouve de plus en plus d'implémentations Fuse (File system in USEr mode). C'est marrant, comme la convergence d'idées est forte sur certains concepts, preuve que des conclusions identiques ont été trouvées comme l'unification ou agrégation de serveurs de stockage en DAS, la seule philosophie vraiment massivement évolutive, et ce que j'appelle le FiF (Files in Files), ces idées sont présentes dans nombre de solutions (suivez mon regard) avec la notion ici de bucket de 10Go qui stocke les photos elles-mêmes (la data) associé à 1Mo de meta-data pour chaque Go stocké avec la contrainte ou nécessité (cela dépend du côté où l'on se place) de maintenir en mémoire ces meta-data. La qualité de service provient aussi des éléments Cachr en frontal des unités de stockage à base d'Haystack. La volonté de s'affranchir si possible de coûteux CDN a été également une forte priorité, FaceBook s'appuyant sur 2 data-centers, un côté Ouest et un côte Est des Etats-Unis.

Pas d'inquiétude non plus concernant Hadoop, il reste utilisé pour la collecte massive de logs et les statistiques associés, j'y reviendrais avec le Memcached dans quelques semaines.
Share:

0 commentaires: