20minutes.fr : Retour d’expérience

Dans ce premier billet concernant le Forum PHP 2008 de Paris, je vais vous résumer, en quelques paragraphes la conférence à propos du site web 20minutes qui accueille plus de 3 millions de visiteurs uniques par mois sur ses serveurs, muni de PHP.

En mars 2007, la petite équipe qui composait 20minutes.fr a fait appel à Oxalide pour re-développer et repenser l’intrastructure interne au niveau des serveurs webs pour arriver à ça aujourd’hui :

  • 3 560 000 visiteurs uniques / mois
  • 100 pages vues / seconde
  • 5 000 requêtes HTTP / seconde
  • 200 nouveaux articles / jour
  • 30 serveurs (statique + dynamique)

Ici, nous allons nous placer en 2007, quand Oxalide et l’équipe de développeurs de 20minutes.fr ont commencer à penser à changer tout le mode de fonctionnement (mise en production manuelle, etc…)

Les objectifs

Les objectifs à atteindre pour cette nouvelle “version” du site web étaient assez clairs :

  • Gérer une page d’accueil de 2 Mo (avec images) faisant faire 300 requêtes HTTP en quelques secondes
  • Pouvoir héberger du contenu visuel facilement et efficacement
  • Permettre une communauté ouverte (commentaires aussi bien sur le web que sur le mobile)

Au niveau de l’infrastucture, il falait :

  • Optimiser chaque serveur à son rôle précis
  • Cloisonner chaque serveur et chaque risque

Pourquoi PHP ?

20minutes.fr à choisi PHP pour ces raisons :

  • C’est un langage très accessible, il y a des millions de développeurs PHP dans le monde
  • La documentation [ officielle ] est très complète
  • C’est une communauté ouverte et très active, notamment en France

Infrastructure

L’infrastructure interne de 20minutes.fr est assez particulière. En effet, pour garrantir une vitesse de chargement de la page assez importante, il faut que tous les contenus soient stokés sur les serveurs du site et non utiliser des contenus externes. En effet, toutes les images par exemple sont copiés sur les serveurs 20minutes pour permettre une indépendance complète d’autre serveurs.

Pour rentrer dans les détails, les serveurs utilisent une couche de serveur virtuel (LVS). Les serveurs frontaux sont load-balancés en Round Robin.

Pour Oxalide, une plateforme correct doit utiliser envorion 30 % des ressources disponibles. Pour des raisons de performance et pour ne pas avoir de SPOF (Single Point Of Failure, soit un noeud qui, si il tombe, arrête tout) les équipes de développement ont décider de ne pas mettre de serveur commun pour stoker les sessions par exemple. En effet, le TTL (Time To Live) du Round Robin est le même que le temps d’expiration des sessions PHP.

Le cache est très utilisé (dans des limittes proches puisque qu’un site d’actualité comme cela ne peut pas se permettre d’avoir des cache de plusieurs dixaines de minutes par exemple, dans le cas où les données qu’il contient sont modifiées) notament APC et memcached. Tout cela avec des CDN (Content Delivery Network).
Bien utiliser le cache du navigateur (avec définition dans les entêtes HTTP) est une très bonne chose car il permet de réduire la bande passante, la charge du serveur et les lectures sur les disques.

Un petit conseil très important dans le développement d’infrastructures de cette ampleur, c’est de prévoir deux cartes réseau, notament pour les frontaux : une pour le réseau Internet et une pour le réseau local (entre les serveurs, par exemple pour la base de données).

Cycle de développement

Le logiciel de versionning SVN est utilisé par tous les développeurs du projet.

Voici le parcours d’une nouvelle version :

  • Développement (Repository SVN)
  • Pré-prod
    • Des tests unitaires sont éffectués
    • Des tests de charge sont éffectués
  • Production

Pour passer de la pré-prod à la prod (et même du développement à la pré-prod*), les développeurs utilisent le système Capistrano, un logiciel développé en Ruby qui gêre de façon automatisée et instantanée le déploiment des versions.

Note: Il existe depuis peu un projet similaire en PHP appellé Fredistrano. Il n’est pas utilisé par 20minutes car il n’était pas encore disponible lors de la refactorisation des méthodes de développement de 20minutes en 2007.

* La pré-prod est une étape obligatoire avant la mise en production

Vous pouvez télécharger le document projecté par les intervants sur nos serveurs.

facebooktwittergoogle_plusredditpinterestlinkedinmail

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">