Archives pour l'étiquette Voici.fr

Voici.fr démonstration de l’intérêt de l’ optimisation web cache et des performance des reverses proxys

Voici.fr,

Encore lui, a été à l’origine d’un record sur notre architecture. La rédaction à vraiment acquis un savoir faire web / SEO qui donne un résultat conséquent et mesurable.

Ce record démontre l’intérêt d’une optimisation pour les caches web de ez Publish et démontre également que les performances reverse proxy de SQUID sont importantes pour encaisser les coup de butoir de l’audience.

Record de BP grace a voici.fr

80Mb/s, chapeau

Nous somme bien partie pour dépasser le million de pages vue en 24h sur la plate-forme. Je rappel que Voici.fr ce n’est que 3 reverses proxys mutualisé et 4 frontaux php5 également mutualisé avec Gala.fr, Geo.fr et quelque brouille.

Mise à jour

Haa l’actualité est riche, après analyse c’est le résultat de la conjonction d’une remonté d’article dans Google Actualité et Yahoo Actualité plus une newsletter tardive et non maitrisée.

L’OJD publie l’audience du web français sur un site dédié

L’OJD ouvre un site web dédié à son activité de tiers certificateur des audiences web de ces membres.

Ces chiffres à destination des agences, annonceurs, éditeurs, journalistes… sont établis à partir de normes reconnues sur le plan international. L’OJD est membre fondateur de l’International Federation of Audit Bureaux of Circulations (IFABC) qui regroupe les pays les plus avancés et les plus actifs dans ce domaine (Etats-Unis, Allemagne, Grande-Bretagne, Espagne…).

Comme je l’expliquais sur mon billet à propose de l‘audience de septembre Tele-loisir.fr et de Voici.fr. L’OJD, est l’unique organisme de certification en France des données de fréquentation de l’Internet, publie chaque mois les résultats de trafic et d’audience de tous ses adhérents qui regroupe les plus grand site français.

L’OJD vous permet de ainsi de comparer les audience en terme de visite et visiteur unique ainsi que le véritable effort de production en pages vue des grands sites web de presse français toutes les données certifiées sont accessibles en accès gratuit sur ce site.

Voici.fr : Optimiser les performances reverse proxy de SQUID

Une architecture de reverse proxy et après ?

Vous avez configuré votre application pour tirer partie le mieux possible des possibilités offertes par les caches web comme nous l’avons fait dans notre utilisation de eZ Publish pour les sites web du groupe Prisma-Presse.

Mais après cette optimisation ? Kathryl a publié un billet sur l’optimisation des performances de SQUID utilisé en reverse proxy. Il ce base sur notre expérience commune dans la gestion de l’hébergement des sites web du groupe Prisma Presse. Les sites à très forte audience comme Voici.fr, Gala.fr, Femmeactuelle.fr bénéficie des optimisations qu’il présente dans sa documentation.

J’ai souhaité ajouter quelques précisions sur le sujet et expliquer comment vous arrivions à répondre a 92,23% des requêtes HTTP avec nos reverses proxys comme je l’avais annoncé dans un commentaire sur un billet précédent. Kathryl et moi versons parfois dans la bataille d’expert mais c’est par ce jeu de confrontation technique que nous avons trouvé des solutions aux défis qui ce présentaient à nous. Le principal de ces défis relevé est d’avoir trouvé comment soutenir l’audience montante des site du groupe sans la moindre aquisition de matériel depuis un an, mais ceci fera l’objet d’un billet sur le cost killing dans le web hosting.

L’OS : Debian Lenny 64bits

Pourquoi le 64Bits ? Parce que nous recherchons les performance et que c’est l’architecture qui offre la possibilité d’affectation d’un gros volume de mémoire à un même processus. Dans la cas présent nos services squid joues avec plus de 3Go rien que pour le cache mémoire je pense que c’était indispensable.

Gestion de la mémoire RAM avec Squid

La FAQ de squid proxy est très claire au sujet de la mémoire. Plus squid est configuré avec un stockage disque important via la directive cache_dir plus il aura besoin de mémoire pour en ordonné l’utilisation. Mais en outre plus vous allouez d’espace de mémoire pour squid via la directive cache_mem plus squid aura besoin de mémoire vive, en dehors du quota alloué par cette directive, pour ordonner la aussi les objets stocker dans ce cache.

En résumé plus vous allouez de mémoire de cache, en RAM ou sur Disque, plus vous devez prévoir de mémoire vivre à la disposition de l’application.

Kathryl dans son billet propose un rapport de 1 à 4 entre la mémoire cache alloué via la directive cache_mem et la mémoire RAM total disponible. Le rapport n’est que de 1 à 1,3 actuellement en production sur l’étage reverse proxy. Dans tout les cas surveiller bien que la machine n’utilise pas le swap dans le cas contraire les ralentissements arrivent et vous avez tout faux, il faut revoir vos valeurs. Nous avions fait cette erreur d’allouer trop de mémoire via la directive cache_mem et nous avons ralentis nos reverse proxys du fait de l’utilisation du swap.

Taille des objets en cache mémoire

Kathryl avance la question suivante a la quelle je souscris totalement: En quoi est il pertinent d’accepté en mémoire cache RAM des objets volumineux ? Dans le cas des sites qui nous occupe cela n’a pas d’utilité le réglage du backoffice assurant de ne pas avoir des objets trop gros dans le storage de l’application. Dans notre cas nous avons limité la taille des objets présent dans la mémoire vive de cache pour les cantonner au cache disque via la directive maximum_object_size_in_memory. Vous pouvez aussi via la directive maximum_object_size limité en disque également la taille des objets

Si vous diffusez des objets volumineux comme des pdf ou des archives zip il est intéressant d’accepter de relativement gros objets dans votre cache. Dans tout les cas ne pas négligé ces paramètres, il vous permettrons de mettre en évidence la présence de gros objet sur votre site si vous les refuser car vos frontaux web seront sollicité directement ou au contraire vous offrirons la solution pour leur diffusion.

Espace de cache disque

Dans le cas de notre architecture reverse proxy nous avons fait les choix suivant pour l’accueil de l’espace disque alloué avec la directive cache_dir :

  1. Un filesystem dédié
  2. Ext2 pour évité les opérations de journalisation et gagné quelque I/O
  3. Un volume de 15Go pour une occupation de 12Go soit 80%
  4. option noatime dans /etc/fstab

Si vous disposez d’un gros disque SSD je vous invite à l’utiliser dans ce cadre, personnellement je rêve de voir les performances possible. De même si vous avez la possibilité de raid0 sur un paquet de disque rapide ne vous privez par surtout. Je vous recommande la lecture de la documentation squid cache disk io performance enhancements qui vous apportera beaucoup d’information. Le benchmark de FileSystem suivant vous apportera quelque informations. Personnellement je préfère la solution ext2 à tout autre. Attention Kathryl est mono-maniac de XFS mais cela tiens, je pense à ces habitues de feignant consistant à faire de dump pour migré ces données 🙂

Les logs

Comme le souligne Kathryl lorsque l’on fait très forte audience, les logs par leur écriture ralentisse les serveurs (apache ou squid). Personnellement si je le pouvais je les désactiverais complètement et constamment. Dans quelque cas nous avons trouvé avec cette solution la bouffé d’air frais pour re-stabilisé une architecture ou répondre ponctuellement à une surcharge. Mais, bon, c’est mal et juridiquement interdit car il y a une obligation légale de fournir aux autorités sur présentation d’une réquisition judiciaire les ip des internautes visiteurs.

Il vous reste à étudier

Méthode de cache de Squid

Liser les préconisations de Kathryl sur le sujet, il à un préférence pour DISKD. Nous utilisons UFS en production . Je découvre le passage sur les méthode de cache disque de la documentation de Funkywizard qui lui préfère COSS

Connexions

Kathryl est partisans du « lâché moi la jambe ». Les serveurs de cache ne sont pas la pour garder des sockets ouverts trop longtemps. Il préconise de refuser les connections persistantes. C’est un chose que nous n’avons pas testé plus en avant.

Comment purger un élément de vos reverse proxy cache SQUID

L’utilisation d’un étage de cache web dans l’architecture d’une plate-forme d’hébergement est de plus en plus courante. Dans le cas de eZ Publish c’est même nécessaire si vous l’utilisé comme CMS générateur de site web [1].

Mais j’ai eu l’occasion de souligner l’intérêt d’un cache web à la lumière de mon actualité professionnel que cela soit quand Voici.fr dépasse les 650 K pages vue en 24h, quand Voici.fr et Gala.Fr ont survécu au pic d’audience du à la mort de Michael Jackson ou enfin quand l’optimisation d’un site eZ Publish 4 pour l’utilisation des caches web en prenant voici.fr en exemple.

Autorisé la purge dans squid.conf

Avant tout, il est nécessaire de modifier Squid via le fichier de configuration squid.conf afin d’autoriser la purge. Pour j’ai ajoutez les ligne suivantes dans ma configuration afin d’autorisé la purge depuis le squid et surtout depuis le réseau local afin que cela soit possible de toute les machines de l’architecture.

acl purge method PURGE http_access allow PURGE localnet http_access allow PURGE localhost

Purger squid avec cURL

Exemple pour purger une page du cache de trois serveurs SQUID avec cURL

~$ curl -I -X PURGE -H <span style="color: #ff0000;">&quot;Host: &lt;HOST&gt;&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>squid<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000;">1</span>,<span style="color: #000000;">2</span>,<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/&lt;</span>URI<span style="color: #000000; font-weight: bold;">&gt;</span>

Dans cet exemple nous allons supprimé la home page de http://www.femmeactuelle.fr/ (soit l’index) actuellement mise en cache sur nos trois serveurs reverse proxy squid :

~$ curl -I -X PURGE -H <span style="color: #ff0000;">&quot;Host: www.femmeactuelle.fr&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>squid<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000;">1</span>,<span style="color: #000000;">2</span>,<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span> HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">200</span> OK Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">35</span>:<span style="color: #000000;">26</span> GMT Content-Length: <span style="color: #000000;">0</span> &nbsp; HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">200</span> OK Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">35</span>:<span style="color: #000000;">26</span> GMT Content-Length: <span style="color: #000000;">0</span> &nbsp; HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">200</span> OK Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">35</span>:<span style="color: #000000;">26</span> GMT Content-Length: <span style="color: #000000;">0</span>

Dans cet exemple nous avons voulu supprimer la page « cachée » de http://365.femmeactuelle.fr/ (soit l’index) Toutefois aucune page n’était présente dans le cache

~$ curl -I -X PURGE -H <span style="color: #ff0000;">&quot;Host: www2.femmeactuelle.fr&quot;</span> http:<span style="color: #000000; font-weight: bold;">//</span>squid<span style="color: #7a0874; font-weight: bold;">&#123;</span><span style="color: #000000;">1</span>,<span style="color: #000000;">2</span>,<span style="color: #000000;">3</span><span style="color: #7a0874; font-weight: bold;">&#125;</span><span style="color: #000000; font-weight: bold;">/</span> HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">404</span> Not Found Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">35</span>:<span style="color: #000000;">45</span> GMT Content-Length: <span style="color: #000000;">0</span> &nbsp; HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">404</span> Not Found Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">35</span>:<span style="color: #000000;">45</span> GMT Content-Length: <span style="color: #000000;">0</span> &nbsp; HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">404</span> Not Found Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">35</span>:<span style="color: #000000;">45</span> GMT Content-Length: <span style="color: #000000;">0</span>

Purger squid avec squidclient

La même chose est possible avec squidclient

<span style="color: #808080; font-style: italic;"># squidclient -m PURGE -p 80 -h prpsquid1 http://www.femmeactuelle.fr/</span>

L’utilisation de « {1,2,3} » n’est pas possible, il faut utiliser une boucle bash :

~$ <span style="color: #000000; font-weight: bold;">for</span> I <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #000000;">1</span> <span style="color: #000000;">2</span> <span style="color: #000000;">3</span>; <span style="color: #000000; font-weight: bold;">do</span> squidclient -m PURGE -p <span style="color: #000000;">80</span> -h squid<span style="color: #007800;">$I</span> http:<span style="color: #000000; font-weight: bold;">//</span>www.femmeactuelle.fr<span style="color: #000000; font-weight: bold;">/</span>; <span style="color: #000000; font-weight: bold;">done</span> HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">200</span> OK Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">56</span>:<span style="color: #000000;">11</span> GMT Content-Length: <span style="color: #000000;">0</span> &nbsp; HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">200</span> OK Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">56</span>:<span style="color: #000000;">11</span> GMT Content-Length: <span style="color: #000000;">0</span> &nbsp; HTTP<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">1.0</span> <span style="color: #000000;">200</span> OK Server: squid<span style="color: #000000; font-weight: bold;">/</span><span style="color: #000000;">2.6</span>.STABLE5 Date: Fri, <span style="color: #000000;">30</span> Jan <span style="color: #000000;">2009</span> <span style="color: #000000;">10</span>:<span style="color: #000000;">56</span>:<span style="color: #000000;">11</span> GMT Content-Length: <span style="color: #000000;">0</span>

Notes

[1] eZ n’est forcement utilisé comme générateur de site web. Il est avant tout un CMS; quelque soit la destination du contenu

Septembre Tele-loisir.fr et les chiffres OJD, Aout Voici.fr et les chiffres Nielsen

Les chiffres OJD d’audience de Septembre 2009 sont publié. Il contabilise les pages vue, visite et visiteur unique des adhérent OJG. Adhérent qui regroupe de plus en plus de grand acteur français ton la quasi intégralité des sites de presse.

Tele-loisir.fr : 14% de pages vues supplémentaire selon l’OJD

Dans le classement OJD des sites grand public français Télé-loisir.fr est huitième devant Liberation.fr ou leparisien.fr avec 27 059 401 93 532 009 pages vues. Je commentais récemment du fait que nous avions battu notre record de production en septembre. Ce record explique le bon de 14% de pages vues supplémentaire.

Dans cet articles je donnais quelque une des pistes technique suivies pour soutenir une tel audience.

Voici.fr : le plus puissant des sites people selon Nielsen

Je vais citer le communiqué de presse de Prisma : Le site Voici.fr a enregistré en août un nouveau record d’audience avec 2 346 000 visiteurs uniques selon Nielsen, soit une progression de 14% (vs juillet 2009). Une performance qui permet à Voici.fr de passer devant son principal concurrent et de prendre la place de leader des sites d’actualité people français.

Je pense que que la stratégie du SEO Backling Discovery à du contribuer à ce résultat. Le pouvoir du mod_rewrite est immense… Un énorme potentiel de liens pas en valeur car débouchant sur des 404 ou du duplicate content que vous formatez correctement à coup de 301 c’est le coup d’accélérateur décisif.

Je pense également que la stabilité et la qualité constante de la diffusion même au moment du pic d’audience historique de la mort de Michael Jackson ne sont pas étrangés à ce succès.