55

Performance des sites dynamiques : une histoire de cache à tous les niveaux

  • Upload
    mysic

  • View
    200

  • Download
    1

Embed Size (px)

Citation preview

Octave & Octave : Octave & Octave :

Octave & Octave : Octave & Octave :

Centurion Framework : Centurion Framework :

Octave & Octave : Octave & Octave :

Centurion Framework : Centurion Framework :

QuestionQuestion

Vos besoins ?Vos besoins ?

Soyons honnêtes, la meilleure desSoyons honnêtes, la meilleure des

performances :performances :

Les fichiers statiquesLes fichiers statiques

Des fois on n'a pas le choix.Des fois on n'a pas le choix.

Imaginez vos intranets, vos outilsImaginez vos intranets, vos outils

web de gestion...web de gestion...

Les performances des sitesLes performances des sites

dynamiques c'est :dynamiques c'est :

une bonne architectureune bonne architecture

systèmesystème

des optimisations front-enddes optimisations front-end

une application optimiséeune application optimisée

......

La performance des sitesLa performance des sites

dynamiques :dynamiques :

Une histoire de cache à tous lesUne histoire de cache à tous les

niveaux !niveaux !

Recherche des goulotsRecherche des goulots

d'étranglementd'étranglement

Les debug barLes debug bar

Les debug barLes debug bar

Mysql fournit des métriques :Mysql fournit des métriques :

Slow query logSlow query log

SHOW STATUS;SHOW STATUS;

Le cache des SGBDLe cache des SGBD

MySQL : query cacheMySQL : query cache

MariaDb : subquery cacheMariaDb : subquery cache

......

Mais qui dans certains casMais qui dans certains cas

ralentissent :ralentissent :

Si plus de modifications queSi plus de modifications que

de lecturesde lectures

Si trop de requêtes différentesSi trop de requêtes différentes

Utilisez les requêtes préparées.Utilisez les requêtes préparées.

Certains systèmes de cache desCertains systèmes de cache des

SGBD ne sont pas tolérants auxSGBD ne sont pas tolérants aux

multiples écritures d'une mêmemultiples écritures d'une même

requête.requête.

Généralement un simple boutonGénéralement un simple bouton

à pousser.à pousser.

Les debug barLes debug bar

Les debug barLes debug bar

Les frameworksLes frameworks

Zend FrameworkZend Framework

CoreCore

ClassClass

ViewView

PagePage

StaticStatic

DoctrineDoctrine

Query cacheQuery cache

Result cacheResult cache

Doctrine_Cache_*Doctrine_Cache_*

......

Ce ne sont que des outils.Ce ne sont que des outils.

À vous de les insérer dans votreÀ vous de les insérer dans votre

application.application.

C'est votre code métier qui est àC'est votre code métier qui est à

optimiseroptimiser

Comment ?Comment ?

Audit / AnalyseAudit / Analyse

ProfilingProfiling

2 outils simples d'usage :2 outils simples d'usage :

XdebugXdebug

Zend DebuggerZend Debugger

Les debug barLes debug bar

Les debug barLes debug bar

Votre framework utilise trop deVotre framework utilise trop de

fichiersfichiers

Seul remède : APCSeul remède : APCMettre à jourMettre à jour

Proxy CacheProxy Cache

VarnishVarnishNginxNginx

Le proxy cache nécessite : Le proxy cache nécessite :

un applicatif qui est pensé pourun applicatif qui est pensé pour

Namco Bandai GamesNamco Bandai Games

Que faire dans un cas commeQue faire dans un cas comme

celui-ci ?celui-ci ?

Solution 1 : AjaxSolution 1 : Ajax

FacileFacile

Aucun investissementAucun investissement

matérielmatériel

Mais :Mais :

Perte d'accessibilitéPerte d'accessibilité

Edge Side IncludesEdge Side Includes

Le proxy cache nous apporte uneLe proxy cache nous apporte une

solution : solution :

L'L'Edge Side IncludesEdge Side Includes (ESI). (ESI).

Disponible dans Varnish,Disponible dans Varnish,

prochainement dans Nginx.prochainement dans Nginx.

Cache navigateurCache navigateur

EtagEtag

Mauvaise idéeMauvaise idée

Surtout si vous avez plus d'unSurtout si vous avez plus d'un

serveurserveur

Cache publicCache public

Wordpress Style : cache public àWordpress Style : cache public à

vievie

AttentionAttention

Tout n'est pas si simpleTout n'est pas si simple

AttentionAttention

Assurez-vous d'avoir les moyensAssurez-vous d'avoir les moyens

de de vider les cachesvider les caches lorsque c'est lorsque c'est

nécessaire.nécessaire.

Idem pour les bad buzz.Idem pour les bad buzz.

Exemple : Exemple :

Warming phaseWarming phase

Ne Ne jamaisjamais lancer un serveur lancer un serveur sanssans

cachecache ! !

Warming phaseWarming phase

Si pas de serveur de cache : simuler à froid uneSi pas de serveur de cache : simuler à froid unevisite sur toutes les pagesvisite sur toutes les pages

Si serveur de cache : assurez-vous que laSi serveur de cache : assurez-vous que lasynchronisation est finiesynchronisation est finie

Warming phaseWarming phase

Exemple : Exemple :

Next levelNext level

Ne plus faire de cache->delete();Ne plus faire de cache->delete();

Utilisez plutôt les cache->update();Utilisez plutôt les cache->update();

Avant de conclureAvant de conclure

Créez / utilisez des métriques àCréez / utilisez des métriques à

tous les niveauxtous les niveaux

Pas de généralisationPas de généralisation

Toutes les optimisations deToutes les optimisations de

performance par l'ajout du cacheperformance par l'ajout du cache

ne peuvent être généralisées àne peuvent être généralisées à

vos autres applications.vos autres applications.

Bonnes pratiquesBonnes pratiques

Pas d'optimisation prématurée :Pas d'optimisation prématurée :

c'est contre-productif.c'est contre-productif.

Par contre, développez enPar contre, développez en

préparant le terrain :préparant le terrain :

- factorisation- factorisation

- pas de code spécifique- pas de code spécifique

MerciMerci