Archives pour l'étiquette Geo.fr

L’internet bug a Prisma Presse

Je ne suis pas le seul à partir. 24 des 26 personnes composants la DSI Internet de Prisma Presse partent également. En effet la quasi totalité des personnes assurant l’activité technique de l’internet dans cette entreprise ont souscrit au plan de départ volontaire ouvert dans le cadre d’un plan de sauvegarde de l’emplois.

Développeur, Administrateur système et réseau, Architecte Web, Chef de Projet, Expert SEO, Assistante, Responsable d’application, Chef de Projet Technique et même le Responsable de service on adhéré à ce plan. Cette unanimité a souhaiter partir de la part de personne au cœur d’une activité d’avenir pour l’entreprise soulève forcément beaucoup de question. Il ne m’appartiens pas d’expliquer comme la direction de Prisma Presse à laisser ceci ce produire. Un professeur d’HEC écrira peut être un mémoire de management sur ce plan ou alors un sociologue étudiera cette dynamique de groupe qui conduit tout un service à préférer partir. Mais force est de constater que cette situation n’a jamais été désirée ou voulue de la part de l’entreprise. A mon humble avis la situation ainsi générée devrait induire au moins 20% de coût supplémentaire pour Prisma Presse dans son activité Internet et lui couter quelque point d’audience.

Cafe.com : Is cool !

De Responsable Web Hosting pour Prisma Presse

Je ne suis plus responsable des architectures d’hébergement web du Groupe Prisma Presse depuis le vendredi 20 novembre 2009.

Bilan de trois années d’hébergement

Les trois années au sein de cette entreprise ont été d’une extrème richesse. J’ai eu la chance de participer a la conception et au lancement de Gala.fr, Voici.fr, Geo.fr, Femmes.com, Cuisine-et-recette.fr ainsi que a la refonte de Capital.fr et Tele-loisirs. J’ai également assumé la production de caminteresse.fr, femmeactuelle.fr, tele-2-Semaines.fr, tv-grandes-chaines.fr, VSD.fr; PrismaPub.com, Prisma-Presse.com.

prisma_titres1.jpeg

En près de trois ans de WebHosting à Prisma Presse, Kathryl et moi même avons :

  • Conçus une plate-forme de virtualisation / cloud computing qui héberge l’ensemble du SI du service Internet. De 4 serveurs physiques pour un projet en 2007 sous terminons avec 2 serveurs physiques, 23 serveurs virtuels, 500Go de donnée et 20 sites web maintenues en parallèle.
  • Conçus et / ou gérer 8 plate-formes distinctes de productions pour un total supérieur à 2,5 milliards de pages vue en 3 ans.
  • Réduit la facture mensuelle d’hébergement de Prisma Presse de 40% par rapport à son point le plus haut.
  • Stabilisé le coût d’hébergement annuel. L’année 2009 ayant couté 3% de moins que l’année 2008 ceci alors que l’audience explose.
  • Assuré une monter de l’audience de 66 Millions de page en octobre 2007 à 145 Million en octobre 2009. une progression de + 120% en deux ans.[1]

Merci aux développeurs pour la qualité de leur code, moins de 10 requêtes sql par template eZ c’est un rêve pour bien des acteurs du monde de la presse sur internet[2]. Merci aux chef de projet d’avoir fait accepter un peu de contraintes techniques à nos clients et d’avoir prêché encore et encore pour l’application de nos préconisations. Merci aux SEO d’avoir assuré avec brio la popularité des sites web et d’avoir su avoir un pied dans le marketing et un pied dans la technique.

A Responsable d’exploitation web pour Cafe.com

IsCool

J’ai débuté comme responsable d’exploitation, toujours dans et pour le web, chez Cafe.com un éditeur de jeux online. Je suis très heureux et emballé d’intégrer une entreprise aux nombreux projets et qui à déjà démontré ses qualités avec le succès du jeu Is cool sur facebook. Is cool qui compte déjà 120 000 fan officiel pour presque 3 millions d’utilisateur actif selon AppData.com.

Is.cool.AppData.png

Le portefeuille projet de Cafe.com est impressionnant et comportant j’espère de nouveau blockbuster comme is cool dont j’aurais la responsabilité de la production.

Mais pas d’emballement et je plan sur la comète. Je suis pour le moment en pleine phase d’intégration. Les choix technologie de Cafe.com sont fort et volontaire et je vais devoir rester concentré pour assimiler au plus vite les fondamentaux et travailler avec une équipe d’un très très haut niveau :

  • LAMP / Ubuntu
  • Memcache / Tokyo Cabinet
  • Puppet / Capistrano
  • Amazon Elastic Compute Cloud (Amazon EC2)
  • Amazon Simple Storage Service (Amazon S3)
  • Amazon Elastic Block Store
  • Elastic Load Balancing
  • Amazon Virtual Private Cloud

Cafe.com

Notes

[1] Pas de cout chiffré, juste des pourcentages, confidentialité oblige. L’audience est public grace à l’OJD

[2] Une pensé pour les collègues de Lagardère

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.

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