Par Ahmed Saoudi
Pour préparer son IPO, en novembre 2013, Twitter a dû tuer sa baleine blanche, bien-aimée de nombreux internautes. Le Fail Whale, comme l’appellent les utilisateurs du réseau social, n’est autre qu’un message d’erreur s’affichant lorsque les serveurs du réseau social sont “surchargés”.
Durant les premières années de son existence, Twitter était la victime de son propre succès : il arrive que, parfois, des millions de tweets soient postés simultanément. C’était le cas, par exemple, un certain 1er janvier 2012, avec plus de 16 000 “Happy New Year” tweetés par seconde!
Lors de ces périodes de pic, les serveurs de Twitter se trouvent incapables de gérer ce gigantesque flux, et émettent une erreur bien particulière à ce type de situation, connue par les techniciens sous le nom de “l’erreur 503”. On dit alors que les serveurs sont “surchargés”.
Quand cela arrive, Twitter affichait à ses utilisateurs le Fail Whale, devenu rapidement une véritable icône d’Internet — très populaire même après sa retraite forcée.
L’erreur 503 est le signe d’un succès imprévisible, qui rend un site (ou un service) incapable de faire face au flux d’utilisateurs qu’il reçoit. Imprévisible, certes, mais il est possible de se préparer pour “minimiser les dégâts”.
Un million d’utilisateurs simultanés, est-ce possible ?
Alors qu’Internet devient une partie intégrante de notre vie de tous les jours, on doit se poser la question sur la capacité de nombreux services tunisiens de recevoir ce flux d’utilisateurs … sans que cela n’engendre une avalanche de problèmes techniques.
Un site tunisien peut-il être aujourd’hui capable de faire face à un million de visiteurs simultanés ? La réponse est simple : oui.
C’est ce que nous a prouvé Medianet lors de son “1 Million Hosting Challenge” organisé en partenariat avec Microsoft.
Cet événement, le premier de son genre en Tunisie, a été organisé le 31 mars dernier en présence de MM. Iheb Béji, CEO de Medianet; Mohamed Bridaa, directeur général de Microsoft Tunisie et Algérie; Mohamed Mellouki, CTO de Medianet et Fares Zekri, Developer Experience Lead à Microsoft Tunisie.
Le but de cette expérience inédite est de soumettre un site Internet (hostringchallenge.tn) à une charge équivalente à celle de 1 million d’utilisateurs simultanés, sans que les serveurs qui l’hébergent ne soient surchargés.
Pour ce faire, la configuration des serveurs en question doit être minutieusement optimisée afin que cette charge soit efficacement répartie. Les serveurs de test, installés à cette occasion par Medianet sur l’infrastructure Azure de Microsoft, ont pu tenir le coup sous la charge de 2 millions de visiteurs en seulement une minute !
Le web : un petit guide pratique
Mais avant de vous parler de la méthode utilisée par Medianet pour réussir cet exploit, voici un petit aperçu sur le (long et laborieux) processus nécessaire pour l’affichage d’une page web.
Tout commence par un internaute qui demande l’affichage d’une page (http://www.example.com/article.php?id=3, par exemple), soit en tapant manuellement son adresse, soit en cliquant sur un lien.
L’adresse d’une page web est appelée aussi URL.
Le navigateur commence par localiser le serveur qui l’héberge (sur l’adresse http://www.example.com/) et lui demande de fournir les données de la page article.php.
Le serveur se charge alors de générer la page en question. Pour ce faire, il exécute une série de commandes (organisées dans un script) rédigées dans un langage dit de programmation.
Et parce que le nom de la page dans notre exemple se termine par ‘php’ (c’est ce qu’on appelle une extension), on peut déduire que le langage utilisé dans notre script est le ‘php’. Ce dernier est très populaire dans le développement des applications web, bien que d’autres langages sont en train de gagner en popularité (Python, Ruby, ou encore JavaScript, …).
Dans le cadre de son exécution, le script ‘php’ peut demander l’extraction d’informations supplémentaires à partir de la base de données. Une base de données est un outil qui permet de stocker et d’extraire les informations organisées sous formes de tableaux. La manipulation de ces données se fait à travers de systèmes de gestions dont le plus fameux est MySQL.
L’exécution du script et l’extraction des données représentent la plus grande partie du temps nécessaire pour la génération d’une page web. Le résultat final de l’exécution dudit script est une page rédigée dans un format appelé HTML. C’est ce dernier qui va (enfin!) s’afficher par le navigateur sur votre écran.
La génération d’une seule page web est un processus fastidieux, dont certaines étapes sont (très) gourmandes en ressources. Si le contenu d’une page ne change pas, alors pourquoi gaspiller des ressources pour la régénérer à chaque fois ?
L’optimisation
Une fois que nous avons une vue simplifiée sur le processus nécessaire pour la production d’une page web, nous pouvons commencer à explorer les nombreuses possibilités pour l’optimiser.
Séparer les fichiers statiques des données dynamiques
Pour pouvoir afficher une page web, le navigateur doit télécharger ses différents éléments, dont le nombre peut dépasser les cinquantaine de fichiers.
Le téléchargement se fait, pour chaque domaine, par lot dont la taille est, généralement, de 6 fichiers (bien que cela dépende du navigateur utilisé).
Il est aussi à savoir qu’une page web est composée de deux types de documents : les fichiers dits “dynamiques” dont le contenu est généré par le serveur, et les fichiers “statiques” tels que les images, les vidéos, etc. dont le contenu ne dépend pas du serveur.
Pour alléger le téléchargement des éléments d’une page web, il est donc possible de desservir ses fichiers statiques (puisqu’ils sont indépendantes du serveur) à partir d’un autre sous-domaine (static.example.com, par exemple).
Résultat : les fichiers seront téléchargés en deux lots (au lieu d’un seul), et le temps nécessaire pour afficher une page sera, du moins en théorie, divisé par deux.
Mieux encore, il est aujourd’hui courant d’héberger les contenus statiques sur ce qu’on appelle des CDN. Il s’agit de serveurs à très haute disponibilité, distribués à travers toute la planète et destinés à l’hébergement de contenus statiques. Cette configuration a pour avantage de libérer les ressources du serveur principal pour la génération du contenu dynamique.
Le caching
La génération d’une seule page web est un processus fastidieux, dont certaines étapes sont (très) gourmandes en ressources. Si le contenu d’une page ne change pas, alors pourquoi gaspiller des ressources pour la régénérer à chaque fois ?
Il est possible, dans ce cas, de garder une copie toute prête du résultat final et, à chaque fois qu’un visiteur demande cette page, de le lui afficher directement. Pour cela, plusieurs outils open sources sont disponibles, tels que Varnish, utilisé par Medianet lors de cette démonstration.
Il est aussi possible de mettre en cache les résultats des requêtes de la base de données. Je vous explique : sur un site web, certaines données sont consultées beaucoup plus fréquemment que d’autres (un article qui fait le buzz, par exemple).
Au lieu de solliciter la base de données à chaque fois qu’on veut extraire ces informations — une opération très exigeante en termes de ressources, il est possible de garder une copie plus accessible (sur de la mémoire vive, dont le temps de réponse est très court, par exemple).
Big data, temps-réel : les nouvelles tendances
Vu le rôle important de l’optimisation (offrir une expérience utilisateur plus fluide, minimiser les coûts opérationnels, …), l’optimisation est un élément très important. Ce rôle se trouve de plus en plus mis en valeur, surtout que la Tunisie veut s’orienter vers une économie plus “digitalisée”.
Mais il ne fait pas oublier qu’Internet est en train de se métamorphoser, avec la génération de nouvelles tendances telles que le Big Data et le temps-réel.
C’est aussi le cas de l’infrastructure qui ne cesse d’évoluer pour suivre ces tendances. Et pour preuve, nous citons le succès que connaissent aujourd’hui quelques nouvelles technologies, telles que Docker et Node.js.
Pour faire face à ces ruptures, il ne faut pas oublier de mettre à jour l’art de l’optimisation, dont certaines pratiques sont, déjà, obsolètes.
N’oubliez pas de nous suivre sur Facebook et Twitter pour ne rater aucun article !