Les bonnes pratiques. de l hébergement d un CMS



Documents pareils
Drupal : Optimisation des performances

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau


FICHE PRODUIT COREYE CACHE Architecture technique En bref Plateforme Clients Web Coreye Cache applicative Références Principe de fonctionnement

REX gros projets Drupal. Drupal Camp Toulouse Novembre - +qdelance

SPIP. Gestion de la performance dans SPIP. Préoccupa)on historique

PHP 5.4 Développez un site web dynamique et interactif

Performance, rendement Vs Evolutivité

Choisir la solution d hébergement et de support faite pour vous

Joomla! Création et administration d'un site web - Version numérique

INGÉNIEUR - DÉVELOPPEUR EXPÉRIMENT É PHP. 27 ans - 6 ans d'expérience

Gérer une forte charge avec ez Publish Obtenir la meilleure réactivité de publication. Solutions natives ez. Solution spécifique.

PHP. Performances. Audit et optimisation LAMP. Julien Pauli. Cyril Pierre de Geyer. Guillaume Plessis. Préface d Armel Fauveau

Un site web collaboratif avec Drupal. Judith Hannoun - Journées INSHS 16 Octobre 2012

Tests de montée en charge & Haute disponibilité

E-TRANSACTIONS. Guide du programmeur API Plug-in. Version 1.1

Savoir- Faire Offres mé1ers Offres technologiques

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

Performance Front-End

Hébergement PHP. Comprendre pour bien choisir son hébergement

Soon_AdvancedCache. Module Magento SOON. Rédacteur. Relecture & validation technique. Historique des révisions

Webinar. Découvrez Rubedo, la première solution CMS open-source tirant profit des atouts de Zend Framework et du NoSQL. avec la participation de

«Cachez-moi cette page!»

WordPress Référencement naturel (SEO) Optimiser. son référencement. Daniel Roch. Préface d Olivier Andrieu

Impact des robots d indexation sur le cache de second niveau de SPIP IMBERTI Christophe - SG/SPSSI/CP2I/DO Ouest 06/06/2012 mis à jour le 05/07/2012

Déploiement de l infrastructure SOA. Retour d expérience Août 2013

La Latecion protection anti-intrusion Web Web Le concept «Zero effort Security» La protection des applications Extranet

Maarch Framework 3 - Maarch. Tests de charge. Professional Services. 11, bd du Sud Est Nanterre

Jean-Pierre VINCENT Consultant indépendant

Devenez un véritable développeur web en 3 mois!

AVRIL Au delà de Hadoop. Panorama des solutions NoSQL

Sommaire. 1. Présentation de WordPress. 2. Hébergement et installation. 3. Prise en main, ajouter des contenus

OUAPI Guide d installation Outil d administration de parc informatique. Documentation d installation et de paramétrage

Oracle Maximum Availability Architecture

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Sommaire. 1 Introduction Présentation du logiciel de commerce électronique 23

Retour d expérience sur la mise en place d une solution de répartition de charge entièrement libre.

WordPress, thèmes et plugins : mode d'emploi

Projet de Java Enterprise Edition

Les Content Delivery Network (CDN)

Module pour la solution e-commerce Magento

Sommaire. Préface 1 : Pourquoi choisir Magento? Chapitre 1 : Magento, quésaco? Chapitre 2 : Quoi sous le capot?

Cursus 2013 Déployer un Content Management System

CAS, la théorie. R. Ferrere, S. Layrisse

PHP CLÉS EN MAIN. 76 scripts efficaces pour enrichir vos sites web. par William Steinmetz et Brian Ward

Marché à Procédure adaptée. Tierce maintenance applicative pour le portail web

Principales failles de sécurité des applications Web Principes, parades et bonnes pratiques de développement

CRÉER, ROUTER ET GÉRER UNE NEWSLETTER, UN ING

DRUPAL Réalisez des développements professionnels avec PHP (2ième édition)

Des millions de visiteurs avec France Télévisions

Technologies du Web. Ludovic DENOYER - ludovic.denoyer@lip6.fr. Février 2014 UPMC

Utiliser un CMS: Wordpress

ALOHA Load Balancer 2.5. Guide de démarrage rapide. EXCELIANCE ALOHA 2.5 Guide de démarrage rapide 30/01/2008 1/17

Drupal un CMS orienté mé2er. Romain JARRAUD Mathieu GROS

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Construire un réseau social avec Symfony Xavier Lacot Clever Age. Symfony Live 11 et 12 juin 2009 Clever Age Xavier Lacot

Découvrir Drupal, le CMS Open Source de référence. Michel-Marie MAUDET Linagora /

Introduction à ElasticSearch

En date du 11 décembre 2008

MANUEL WORDPRESS. Objectif: Refonte d un site web sous Wordpress I PRE-REQUIS: 1 / Créer un backup (sauvegarde) du site:

Magento. Magento. Réussir son site e-commerce. Réussir son site e-commerce BLANCHARD. Préface de Sébastien L e p e r s

Zabbix. Solution de supervision libre. par ALIXEN

Construction d un Site Internet Dynamique avec Joomla René-Yves Hervé, Ph.D.

Caches web. Olivier Aubert 1/35

Surveillance et corrélation de flux réseaux via sondes applicatives embarquées

Web & Libre. Outils pour être présent sur le net librement

Etude de la pertinence et de l'intérêt des appliances WAF (IPS web) à l'inria

Table des matières. Première partie Découvrir, installer et apprivoiser WordPress

WordPress : principes et fonctionnement

Disponibilité et fiabilité des services et des systèmes

K-Portal et K-Sup 5.1 des nouveautés. Détails

09 nov Retour d'expérience sur l'implémentation d'une plateforme Drupal / Drupal Commerce

Programme CREATION SITE INTERNET (CMS Wordpress)

Formation Découverte du Web

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

PHP et mysql. Code: php_mysql. Olivier Clavel - Daniel K. Schneider - Patrick Jermann - Vivian Synteta Version: 0.9 (modifié le 13/3/01 par VS)

Edition de février Numéro 1. Virtualisation du Poste de Travail

1. Installation du Module

2 Formation utilisateur

NFA 008. Introduction à NoSQL et MongoDB 25/05/2013

«clustering» et «load balancing» avec Zope et ZEO

14 novembre Retour d expérience Drupal et Drupal Commerce

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

Comprendre et optimiser la base de données WordPress WP TECH 2014

SYSTÈMES D INFORMATIONS

Content Switch ou routage de niveau HTTP

Optimisations des SGBDR. Étude de cas : MySQL

Point 1/8. L accès authentifié à un portail e-sidoc. Janvier 2013 Documentation détaillée V2.2. Sommaire

Présentation de la solution Open Source «Vulture» Version 2.0

Single Sign-On open source avec CAS (Central Authentication Service) Vincent Mathieu Pascal Aubry Julien Marchal

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Configuration Matérielle et Logicielle AGORA V2

Lorsque l'on rencontre des problèmes de performance, il est souvent trop tard "mais cette fois, c'est sûr, on a la bonne solution!

Module Retour Produit Guide d intégration et d utilisation Version 1.0

Guide d implémentation. Réussir l intégration de Systempay

Mise en œuvre d une infrastructure de virtualisation au CNRGV

Nouveautés de Drupal 8. Léon

Réussir. son site e-commerce. avecoscommerce

Transcription:

Les bonnes pratiques de l hébergement d un CMS

Welcome Sébastien Lucas @PoMM3 Responsable avant-vente Designer d infra Nicolas Silberman @nsilberman Directeur Technique Médiapart

Oxalide & les CMS le vôtre

Le Projet Médiapart Présentation métier Volumétrie Objectifs Challenges & difficultés Taille de la Team Médiapart & Drupal Historique Version : Drupal 6 non pressflow

Les spécificités du projet Web Trafic très variable, Cycle de développement très court, Presse Outil de travail de la rédaction, Pics d actualité non anticipable, Médiapart Forte activité connecté, Un e-commerçant d un produit dématérialisé, Drupal Riche fonctionnellement, Travail permanent sur la performance.

Critères pour bien dimensionner son infrastructure Volumétrie & répartition du trafic Performance & indicateurs Pré-requis de disponibilité (SLA) Différentes catégories de service Provenance des visiteurs/utilisateurs : FR

3 silos Public Rédaction Pré-production FORTE charge FORTE Variation FORTE disponibilité FAIBLE Charge FAIBLE Variation FORTE Disponibilité FAIBLE Charge ZERO Variation FAIBLE Disponibilité Silo: -Multicouches -N-Frontal -Actif-Actif multisites -Haute disponibilité Silo : -Mono Frontal -Isolé -Mono site Silo autonome

Infrastructure Site A PA-2 backoffice preprod ACTIF LVS backend Répartition de charge Cache Front Back Site B PA-3 ACTIF LVS backend

Répartition de charge & HA Répartition de charge de layer 3 vers les serveurs Varnish, vers les services internes Actif/Actif (MySQL Slaves) Répartition de charge layer 7 Varnish vers les frontaux Drupal Réplication Master/Master MySQL Vip + HeartBeat Haute disponibilité des services Back (SolR&memcache) Heartbeat + réplication native master/slave (SolR) + Switch de redémarrage sur la conf Memcache vide

Segmenter vos règles de caching Varnish Règles générales Fréquence de modification faible Apache Règles un peu plus fines Fréquence de modification épisodique Mise en cache systématique avec une rétention importante pour vos médias ou pages statiques (images, js, css, 404, etc.) Supprimer les cookies «inutiles» (Analytics) & Lazy session (<7) Surcharger les headers «cache-control» depuis votre conf ou.htaccess pour certaines rubriques publiques «one-to-all» de votre site (max-age=x, public private) Applicatif cache-control Règles fines Modification en «temps réel» Piloter directement depuis l applicatif (code ou backend)

Varnish Implémenter des stratégies «métiers» de caching Cache anonyme : la version du site publique sans auth Cache par groupe & rôle Cache par user ESI pour déterminer les blocs cachables et accessibles

Varnish Implémenter des stratégies «métiers» de caching sub vcl_recv [...] # Test d'exclusion du cache (pass = "pas de cache", lookup="accès au cache") if (req.http.cookie) # Test sur l'url pour déterminer si il s'agit d'une page avec des tags ESI ou un appel ESI directement if (req.url ~ "^/esi/get" req.url ~ "^/$" req.url ~ "^/whatever/(a b c)/") # Extraction de la stratégie de cache depuis les variables GET de l'url if (req.url ~ "^.*&cache=[^&]+$") # assignation de la strategie de cache a un en-tete HTTP (trick varnish pour créer des variables) set req.http.x_cache_mode = regsub(req.url, "^.*&cache=([^&]+).*$", "\1"); else return (pass) # assignation de l'id de session (extrait du cookie) à un en-tete HTTP. set req.http.x_sess_cookie = "session-" + regsub(req.http.cookie, "^.*?SESS[0-9a-zA-Z]32=([^;]*);*.*$", "\1\2"); # C embarqué pour gérer le retour d'erreur de la fonction Vmod_Func_memcached.get # On verifie ici si une session actuellement valide correspond l'id extrait du cookie. # Pour cela on utilise le vmod memcached de varnish. C if (Vmod_Func_memcached.get(sp, &vmod_priv_memcached, VRT_GetHdr(sp, HDR_REQ, "\016X_SESS_COOKIE:")) == NULL) /*Création d'un en-tete HTTP pour positioner un flag en cas de session invalide*/ VRT_SetHdr(sp, HDR_REQ, "\015X_SESS_VALID:", "Not Found", vrt_magic_string_end); C # exclusion du cache en cas de session invalide if (req.http.x_sess_valid ~ "^Not Found$") return (pass); return (lookup)

Varnish Implémenter des stratégies «métiers» de caching sub vcl_hash # Si la requête est acheminée ici, alors la présence du cookie autorisé l'accès au cache authentifié. if (req.http.cookie) hash_data("authenticated"); # Extraction de la strategie de cache depuis le en-tête http créé précédemment if (req.http.x_cache_mode) # Stratégie de cache au niveau "user". # on hash donc la ressource sur le nom du user extrait du cookie. if (req.http.x_cache_mode == "user") if (req.http.cookie ~ "user=") set req.http.x-cache-user = regsub( req.http.cookie, "^.*?user=([^;]*);*.*$", "\1\2" ); hash_data(req.http.x-cache-user); # Stratégie de cache au niveau "rôles" # on hash donc la ressource sur le nom # du group (un groupe étant commun à plusieurs utilisateur) if (req.http.x_cache_mode == "roles") if (req.http.cookie ~ "roles=") set req.http.x-cache-roles = regsub( req.http.cookie, "^.*?roles=([^;]*);*.*$", "\1\2" ); hash_data(req.http.x-cache-roles); [...]

Memcache Affiner la stratégie de caching applicatif Une instance par type de Front DRUPAL MC HTML actif MC Data actif BackEnd MC Data actif MC Session passif MC Lock actif Front DRUPAL MC HTML actif MC Data actif BackEnd MC Session actif MC Data passif MC Lock passif données, Flush partiel vs flush global 3 containers pour Médiapart : HTML, Data diverse, Session. possible d aller plus loin (pages, vues, blocs, menus, filtres, etc.) Bien choisir la place dans l infrastructure (local vs remote) Warning sur la charge réseau

Optimiser : Le cas Drupal Utiliser l API! Attention à l abus de modules Dans les modules custom : penser cache. Compilation des assets css et js minifiés (agrégation et compression) Développer en E_STRICT DBlog en pré-production, syslog en production Pas de requêtes dans les thèmes

PHP & memcache Optimiser l environnement d exécution Apache : KeepAlive, MaxClients, MaxRequestsPerChild Nginx + FPM : pour la faible empreinte applicative (et + FPM) PHP Web <> PHP CLI Memcache : memory limit Nb de req par sec -> nombre de connexions simultanées -> lié au nombre de FD par user et espace mémoire Nb d'évictions -> ajuster le max memory Optimisation de l utilisation des pages des slabs

MySQL Optimiser l environnement d exécution Utiliser innodb pour : rester en transactionnel minimiser les locks, plus de tolérance à la concurrence. innodb tout en RAM (innodb buffer pool size au max) Avec les empreintes MySQL Report & Tuner, on ajuste le nombre de connexions maxi en fonction de la mémoire, Les tables ne sont jamais très grosses Pb sur les tables de commentaires Sharder et/ou partitionner si nécessaire (par année ou par mois) Répartition lecture et faire une partie des lectures dans SolR. Pensez au NoSQL ou indexation pour vos nouveaux modules

L indexation Transformer un coût variable en coût fixe SolR pour la recherche : Crawl Solr Piloté par Drupal (check module)

Monitorer pour optimiser Check HTTP XHProf : Toutes les «n» requêtes, Sur un max_execution_time Xdebug/Webgrind en mode trigger pour troubleshooter avec un watchdog qui simule une visite via lib curl Pinba (mod PHP et mod nginx => pour faire remonter le monitoring applicatif au niveau du serveur web), Newrelic, Plugin munin Log Watchdog dans mongodb pour les logs

Monitorer l environnement Varnish : Hit ratio, Remplissage des différentes instances, etc. Memcache : Sessions, % hits/sec, %req/sec, %evictions/sec; etc. MySQL : Template Percona

Chargez! JMeter pour voir si ça tient 1/ Home (anonyme) 2/ Authentification Génération dynamique du form_build_id pour les variables du POST http Utilisation d un pré-processeur beanshell (un composant Jmeter) pour l exécution d un script php avecla logique Drupal pour générer des id de formulaire unique. Extraction des login/password depuis un.csv contenant l ensembles des comptes. 3/ Articles Boucle sur un ensemble d url d article extraites depuis un.csv Affichage de la page1, page2 et des commentaires. Post d un commentaire 4/ Blog Boucle sur un ensemble d url de blog extraite depuis un.csv Post d un billet de blog Parsing du formulaire html pour l extraction d un id de formulaire unique. (via l utilisation d un regexp sur la page html). 5/ Déconnexion

Piloter vos déploiements Versionner : CVS/SVN/Git Déployer : Capistrano Drush : Mise à jour du schéma des bases en fonction du modèle, etc. Piloter : Drush & Varnish Warning bcp de choses en base => Coupler Capistrano pour activer Drush : Déploiement de fichiers + commande Drush (versioné dans Scripts shell)

Merci des questions?