L’infrastructure de Facebook : les chiffres clés

Facebook est une vraie machine de guerre : on a pu voir récemment que c’était le site le plus visité au monde, et tout ça seulement après quelques années. Contrairement à d’autres « supergrands » (Google, Microsoft, Apple, Youtube, etc.) un certain nombre d’informations filtrent lors de conférences, et dans des documents officiels.

Logo Facebook

J’ai visionné plusieurs heures de vidéos de conférences (long mais super intéressant) et ait compilé les informations. Vu la masse de détails obtenus, j’ai décidé de publier deux articles :



En extrapolant

  • certains graphiques d’évolution,
  • des chiffres passés,
  • des indications fournies pendant des conférences,

on estime entre 60 000 et 100 000 le nombre de serveurs de Facebook . Cependant, ce chiffre ne tient pas compte de deux nouveaux datacenters actuellement en cours construction (Oregon et Caroline du Nord).

Facebook : évolution du nombre de serveurs

Facebook : évolution du nombre de serveurs

Mais qu’est-ce qui peut bien tourner sur cette infrastructure ? :)

Données générales :

  • 500 millions d’utilisateurs actifs (un utilisateur actif est un utilisateur qui se connecte au moins une fois par mois),
  • 50% des utilisateurs se connectent au moins une fois par jour, soit 250 millions de personnes tout de même,
  • 690 milliards de pages vues par mois,
  • 6 milliards de contenus partagés par semaine (statuts, photos, liens, vidéos),
  • 3 milliards de photos uploadées par mois, pour plus d’un pétaoctet de stockage uniquement destiné aux photos (chaque photo existe en 4 tailles),
  • un dernier chiffre, le plus parlant peut-être : 16 milliards de minutes sont passées par jour sur Facebook. Ça représente 11 millions de jours ou encore plus de 30 000 années qui sont passées par jour sur le réseau social, c’est juste énorme !

Données techniques :

  • plus de 300 To (téraoctets) de données en cache en RAM avec Memcached,
  • 25 To (téraoctets) de log par jour,
  • un ingénieur Facebook pour 1,1 millions d’utilisateurs. A titre de comparaison, Google emploi un ingénieur pour 190 000 utilisateurs,
  • un opérateur Facebook pour 2,3 millions d’utilisateurs.

Quelques chiffres intéressants sur MySQL :

  • 13 millions de requêtes par seconde en pic,
  • 38 Go/s de trafic MySQL en pic,
  • temps de réponse moyen en lecture : 4 ms,
  • temps de réponse moyen en écriture : 5 ms,
  • 450 millions de lignes lues par seconde en pic,
  • 3,5 millions de lignes modifiées par seconde en pic,
  • 5,2 millions d’I/O (disques) InnoDB par seconde.

Qui a d’autres chiffres intéressants et récents à partager ? :)

Dans le prochain article sur le sujet, je traiterai de la gestion quotidienne d’une infrastructure de cette taille.

Sources :

Script de sauvegarde pour MySQL

J’ai cherché pendant quelques temps un moyen de sauvegarder proprement des bases de données MySQL, et j’ai trouvé mon bonheur avec AutoMySQLBackup.

Il s’agit d’un script (gratuit) qui permet de sauvegarder MySQL de façon récurrente en séparant les bases par fichiers, et en gardant des versions hebdomadaires, mensuelles, etc. Les fichiers obtenus sont directement compressés afin d’optimiser au maximum l’espace disque consommé. Il est possible de sauvegarder une ou plusieurs bases en particulier, ou alors toutes les bases du serveur.

Pour modifier les paramètres (connexion à la base de données, options, etc.), il suffit d’éditer le script (voir ci-dessous).

Automysqlbackup : script de sauvegarde pour MySQL

Et si vous voulez sauvegarder plusieurs serveurs de bases de données, pas de panique, il suffit d’avoir une version du script par serveur.

Enfin, pour une exécution régulière, il faut bien sûr le planifier avec crontab. Le résultat de chaque sauvegarde peut être envoyé par mail, sous la forme suivante :

Backup of Database Server – mysqlserver
======================================================================
Backup Start Time Wed Oct 27 20:45:01 CEST 2010
======================================================================
Daily Backup of Database ( information_schema )
Rotating last weeks Backup…
removed `/backups/mysql4/daily/information_schema/information_schema_2010-10-20_20h45m.Wednesday.sql.gz’

Backup Information for /backups/mysql4/daily/information_schema/information_schema_2010-10-27_20h45m.Wednesday.sql
compressed uncompressed ratio uncompressed_name
475 1232 67.0% /backups/mysql4/daily/information_schema/information_schema_2010-10-27_20h45m.Wednesday.sql
———————————————————————-
Daily Backup of Database ( cacti )
Rotating last weeks Backup…
removed `/backups/mysql4/daily/cacti/cacti_2010-10-20_20h45m.Wednesday.sql.gz’

Backup Information for /backups/mysql4/daily/cacti/cacti_2010-10-27_20h45m.Wednesday.sql
compressed uncompressed ratio uncompressed_name
171349 645053 73.4% /backups/mysql4/daily/cacti/cacti_2010-10-27_20h45m.Wednesday.sql
———————————————————————-
Backup End Wed Oct 27 20:45:20 CEST 2010
======================================================================
Total disk space used for backup storage..
Size – Location
140M /backups/mysql4

Vous, vous faites comment pour sauvegarder MySQL ?

Nouveau serveur pour woueb.net

Décidement, c’est l’année des grands changements pour mon blog ! :)

J’ai profité de quelques heures de libre hier soir pour migrer ce blog sur un serveur dédié : il quitte donc son hébergement mutualisé OVH qu’il occupe depuis 5 ans ! ^^

Niveau serveur, pas grand chose à dire :

  • Hardware : un processeur à 2,4Ghz (Intel E5530), 1 Go de Ram, une baie de disques FC partagée avec d’autres machines virtuelles,
  • Software : CentOS 5.5, Apache 2.2, PHP 5.2.

Au niveau des améliorations :

  • APC, un système de cache PHP (que j’utilise depuis longtemps et qui est relativement simple à installer),
  • Memcached : un système de cache d’objets (que j’ai toujours voulu mettre en place),
  • Varnish : un reverse proxy dont Gonzague m’avait parlé il y a quelques mois. J’étais curieux de le tester, et j’ai pu le configurer pour Worpdress grâce à l’article de Nicolargo.

Voici un schéma détaillant un peu l’imbrication de tous ces éléments entre eux :

wOueb.net : cache design

Note : j’ai conçu ce schéma sur l’idée du schéma d’optimisation de Nicolargo.

Après quelques tests de performances, woueb.net est 75% plus rapide qu’avant ! :)

Comment migrer sur MySQL5 chez OVH

Étant client depuis fort longtemps chez OVH, je me trainais encore une base MySQL4, laquelle ne me dérangeait pas le moins du monde puisque je n’avais pas besoin des fonctionnalités supplémentaires.

Note : je rappelle que MySQL est un Système de Gestion de Base de Données, utilisé dans ce cas pour stocker les données de ce blog, telles que les articles, les commentaires, etc. Ces données sont exploitées par un serveur d’application Apache et un langage de script PHP.

En tentant de mettre à jour mon blog vers WordPress 2.9, mon installation de WordPress m’a prévenu que c’était impossible si je ne passais pas sur une version supérieure de MySQL.

The update cannot be installed because WordPress 2.9.2 requires MySQL version 4.1.2 or higher. You are running version 4.0.25.

Bref, je n’avais pas trop le choix !

(suite…)