Cache sur deux niveaux

WRInaute occasionnel
Bonjour,

Je dois mettre en place un système de cache pour un site web dont la fréquentation augmente.

Je compte faire un cache sur deux niveaux.

Le premier sera un cache mémoire (Amazon élasticache ou mechache) qui stockera les dernières pages demandées pendant un délai très court (quelques secondes).
De cette manière les pages les plus consultées seront récupérées du cache mémoire plutôt que régénérées.

Le second sera un cache à plus long terme.
Les pages dynamiques faisant pas mal de requêtes mais changeant peu souvent, il est intéressant de les stocker pour ne pas surcharger la base de données.
Mais là je ne sait plus trop quoi utiliser pour stocker ces pages.
Dans un environnement mono serveur, je ferait un simple cache fichiers, mais dans un cluster Amazon, je ne sais pas ce qui serait le plus performant.

Est-ce que je stocke ces pages en bdd pour ne faire qu'une requête par page (en récupérant donc directement son contenu) au lieu de toutes les requêtes que contient cette page ?
Est-ce que je stocke ces pages dans Amazon S3 ?
Ou est-ce qu'il y a une autre solution ?

D'avance merci pour vos suggestions ;)
 
WRInaute occasionnel
A priori memcache + S3 se prêtent très bien à ta demande.

Maintenant à toi de voir le volume de pages à mettre dans memcache, et donc le coup côté Amazon.
Ensute, est-ce que tu peux mettre toute une page en cache ? N'as-tu pas besoin d'ESI ?

Stocker les pages en db est pour moi une absurdité. Tu vas charger ta db pour de la simple lecture, là où les systèmes de cache sont bien plus performants.
Le cache le plus rapide est le VRAI cache fichier, c'est à dire stocker les fichiers html dans les bons répertoires : du coup, pas de ré-écriture, pas d'accès à un service tiers, juste ton webserver qui sert un fichier stocké là où on l'attend.
Par contre, l'invalidation d'un cache fichier est un poil plus complexe.

L'avantage de stocker sur du S3, c'est d'éviter trop d'accès disque à ton serveur. Surtout si tu es en mono-serveur, c'est un coup à ce que ton disque lâche, et puis plus rien ne fonctionnera.

Pour résumé :
- analyse + prévision haute du volume de données (pour les capacités de stockage nécessaires)
- analyse du vrai besoin fonctionnel (cache complet, cache partiel, cache connecté, cache des pubs, ...)
- d'autres systèmes de cache ont déjà été mis en place (apc, cache query, ...) ?

En tous cas, bon courage, c'est une partie très intéressante à laquelle tu t'attaques.
 
WRInaute occasionnel
merci pour ta réponse chtipepere ;)

En fait je suis en multi EC2 sur AWS.

J'ai besoin de mettre en cache des fichiers complets, comme des morceaux de fichiers.

L'accès à S3 pour récupérer ces objets à partir de mes scripts php et les envoyer aux navigateurs n'est-il pas trop pénalisant en terme de temps de réponse ?
 
WRInaute occasionnel
Le plus simple est de faire un bench.
Fais toi un script avec un tracking des temps de réponses serveur/client sur 1.000 hits avec différents stockage.
Tu verras ce qui est le plus pénalisant.
Parfois, un petit kimsufi 24G peut vraiment bien dépanner. A étudier aussi je pense.

Maintenant, si tu as un buget illimité => loue x serveurs pour avoir x instances memcache (réplication), 2 serveurs pour ta db (clustering), 2 serveurs pour tes assets, et 1 cdn.
En terme de perf, ça va envoyer du lourd.

Donc, la première question est le budget je pense.
A partir de ton budget tu verras quelles solutions tu peux envisager.
A partir de là, un bench s'impose.
 
WRInaute occasionnel
L'avantage avec Amazon c'est qu'ils fournissent tous ces services, et que les coûts augmentent avec l'utilisation.

Je suis sur du multi-EC2, la base est une base RDS, les fichiers statiques sont sur S3, le cache mémoire est géré sur plusieurs instances via elasticache, avec cloudfront comme CDN.

Ils ont de supers outils !
Enfin je ne suis pas là pour faire de la pub lol

Tu as raison, les benchs me diront exactement ce qui est le mieux.
L'avantage de S3, c'est que les transferts ne sont pas facturés pour les instances EC2 d'une même zone si je ne me trompe pas.
Donc si ça répond bien, ça peut être sympa pour du cache fichiers.
 
Discussions similaires
Haut