La vitesse du site Web de Facebook est l’une des tâches les plus critiques de l’entreprise. En 2009, nous avons réussi à tripler la vitesse du site Facebook. Et ce sont quelques innovations clés de notre équipe d’ingénieurs qui rendent cela possible. Dans cet article, je vais vous présenter l'une de nos sauces secrètes, la grande technologie sous-jacente que nous appelons BigPipe .
BigPipe est un système de service Web dynamique de base repensé. L'idée générale est de diviser les pages Web en petits morceaux appelés Pagelets, puis de créer des pipelines via des serveurs Web et des navigateurs pour gérer leur exécution à différentes étapes. Ceci est similaire au processus d'exécution en pipeline de la plupart des microprocesseurs modernes : plusieurs pipelines d'instructions traversent différentes unités d'exécution du processeur pour obtenir des performances optimales. Bien que BigPipe soit une refonte du processus d'infrastructure de réseau de services existant, il ne nécessite aucune modification des navigateurs Web ou des serveurs existants et est entièrement implémenté à l'aide de PHP et JavaScript.
motivation
Afin de mieux comprendre BigPipe, nous devons examiner le système de services Web dynamiques existant. Son histoire remonte aux débuts du World Wide Web, mais elle n'a pas beaucoup changé aujourd'hui par rapport à ses débuts. Les sites Web modernes ont beaucoup plus d'effets dynamiques et d'interactivité qu'il y a 10 ans, mais les systèmes de services Web traditionnels ont longtemps été incapables de répondre aux exigences actuelles en matière de vitesse Internet. Dans le modèle traditionnel, le cycle de vie d'une requête utilisateur est le suivant :
Le modèle traditionnel est très inefficace dans les sites Web modernes car les séquences de fonctionnement de nombreux systèmes ne peuvent pas se chevaucher. Certaines techniques d'optimisation telles que le chargement différé de JavaScript et le téléchargement parallèle ont été largement adoptées par la communauté en ligne pour surmonter certaines limitations. Cependant, ces optimisations résolvent rarement le goulot d'étranglement provoqué par l'ordre d'exécution du serveur Web et du navigateur. Pendant que le serveur Web est occupé à générer une page, le navigateur reste inactif, perdant ses cycles à ne rien faire. Lorsque le serveur Web a fini de générer la page et de l'envoyer au navigateur, celui-ci devient un goulot d'étranglement en termes de performances et le serveur Web ne peut pas aider. En chevauchant le temps de génération du serveur Web et le temps de rendu du navigateur, nous pouvons non seulement réduire le délai final, mais également permettre à la page Web d'afficher plus tôt la zone visible par l'utilisateur, réduisant ainsi considérablement la perception du retard par l'utilisateur.
Ceci est particulièrement utile pour les sites riches en contenu comme Facebook, où le temps d'apparition du serveur Web chevauche le temps de rendu du navigateur. Une page Web Facebook typique contient des données provenant de nombreuses sources différentes : liste d'amis, mises à jour d'amis, publicités, etc. Dans le mode de rendu de page Web traditionnel, l'utilisateur devrait attendre que ces données de requête soient renvoyées et que le fichier final soit généré puis envoyé à l'ordinateur de l'utilisateur. Tout retard de requête ralentira toute la génération du fichier final.
Comment fonctionne BigPipe
Pour exploiter le parallélisme entre le serveur Web et le navigateur, BigPipe divise d'abord la page Web en plusieurs Pagelets appelables. Tout comme un microprocesseur pipeline divise le cycle de vie d'une instruction en plusieurs étapes (telles que « récupération d'instruction », « décodage d'instruction », « exécution », « écriture dans le registre », etc.), le processus de génération de page de BigPipe est divisé en les étapes suivantes :
Source : isd