Cache et nombre de fichiers

11 réponses
AuteurMessage

stoff |
Membre

Photo de stoff

Inscrit le : 15/05/2005

# Le 20/02/2010 à 17:12

Bonjour à tous,

J'utilise un système de cache en php basique trouvé sur internet (http://forum.webrankinfo.com/mise-cache-des-pages-...Ouvrir dans une nouvelle fenetre )
Le problème c'est que mon dossier cache commence à avoir un nombre trés important de fichiers (centaines de millier). Du coup le serveur commence à avoir du mal.

Quelle est la meilleure solution selon vous?

- purger réguliérement le dossier cache?
- créer des sous dossiers caches? -par exemple une page webworker.html serait cacher dans cache/w/e/b/w
par exemple?

merci

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 20/02/2010 à 17:45

Oui faut séparer en plusieurs sous dossiers, mais faut pas en abuser non plus... c'est ce que je faisais sur Oogolo, et ça a provoqué le problème inverse.
Depuis j'utilise uniquement les deux premiers caractères pour le découpage, ce qui donnerait cache/xx/fichier ; avec un hash ça donne donc un premier niveau de 256 entrées, même avec 5 millions de cache ça ne ferait que 20'000 fichiers en moyenne par dossier, ça se passe bien.

Maintenant faut voir si c'est vraiment pertinent d'avoir un cache de plusieurs centaines de milliers de fichiers qui fait 10 fois la taille de la base de données (déjà vu...) ; souvent le cache fichier reste intéressant à condition de tenir dans le cache disque...

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

jdelire | Lilian
Membre

Photo de jdelire

Inscrit le : 14/05/2005

# Le 20/02/2010 à 19:41

Je suis étonné de voir que beaucoup utilise ce système de cache. Je pensais que cela tenait plus de la bidouille qu'autre chose. Sinon, j'utilise aussi des sous dossiers automatiques et cela fonctionne parfaitement.

Il doit y avoir d'autres techniques de cache un peu plus améliorées ?

Slwo.frOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 20/02/2010 à 20:25

Il existe surtout beaucoup de techniques très différentes, à des usages différents.

Je n'utilise ça que pour des caches de données par exemple, surtout pas pour un cache d'affichage (qui me semble complètement idiot en PHP).

Et même pour les caches de données, il y a du stockage "réseau" via memcache, lorsque de cela doit être synchronisé entre plusieurs serveurs, voir du cache mémoire (shm, apc, eaccelator, etc).

Certains s'amusent même à générer des fichiers ".php" que le parseur s'emmerde à interpréter en permanence ; cache d'opcode ou pas.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

allogarage | Nicolas
Modérateur

Photo de allogarage

Inscrit le : 14/10/2008

# Le 20/02/2010 à 21:46

Perso j'utilise du cache d'affichage, la page est générée pour 1, 2 ou 24h, avec les bons headers.
Je vois pas ou est le mal.

Guide comparatif des garages automobilesOuvrir dans une nouvelle fenetre | Guide comparatif des garages motoOuvrir dans une nouvelle fenetre | Annuaire auto motoOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 21/02/2010 à 00:54

Quand les données sont en cache la différence entre une page PHP avec cache d'affichage et une page PHP sans cache d'affichage est pour moi minime, et nettement moins efficace qu'un vrai cache statique. Si le contenu s'y prête, autant placer la page en statique quoi (via Varnish par exemple).

Chez mes quelques clients qui utilisaient ça, le cache d'affichage php faisait plus de mal qu'autre chose, en générant énormément d'écriture sans un gain énorme.
Je crois que je n'ai plus que Zalex qui utilise un système de ce genre... faudra qu'on essaye avec Varnish un jour.

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

cerise | Gaël
Modérateur

Photo de cerise

Inscrit le : 31/10/2008

# Le 21/02/2010 à 07:36

Moi j'utilise le système de cache de smarty sur certains sites, intéressant sur les sites qui ont du contenu qui change pas souvent, ou pour mettre en cache seulement des parties de la page tout en gardant des zones dynamiques ce qui qui réduit les accès à la BDD, et qui revient en gros à ce qu'utilise stoff

à ce titre j'ai une question pour toi bool. J'avais fait la connerie de l'activer sur les pages produits du comparateur de prix de ceriseclub. Autant dire que mon dossier de cache est assez énorme (145 MB et des poussières )
Comment supprimer ce dossier ?

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 21/02/2010 à 09:40

Bool, c'est quoi un cache de données pour toi ?
Pour moi c'est un résultat d'un traitement mis en cache
Par exemple une liste triée ou un nuage de mots qui peuvent prendre plusieurs secondes de CPU à se générer et qui ont une durée de vie de 12 ou 24h
Sans cache d'affichage, il me faudrait 4 fois plus de serveurs
Et j'aurai dans tous les cas des temps de reponse moins bons

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

allogarage | Nicolas
Modérateur

Photo de allogarage

Inscrit le : 14/10/2008

# Le 21/02/2010 à 10:15

D'accord avec devtribu.
Pour moi il y a par ordre :
- page statique sans chargement du moteur PHP
- page en cache géré via PHP
- cache d'objets
- pas de cache

Maintenant vu les connaissances de Bool, j'ai des doutes sur ce que je dis.

Je connais pas Varnish, je vais regarder

Guide comparatif des garages automobilesOuvrir dans une nouvelle fenetre | Guide comparatif des garages motoOuvrir dans une nouvelle fenetre | Annuaire auto motoOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 21/02/2010 à 13:03

J'aurais du préciser un peu les termes oui.

Pour moi un cache de données se greffe dans n'importe quelle fonction du code de manière transparente. Par exemple une fonction getListVoyagistes() qui retournerait un tableau : la fonction se démerde pour aller chercher les infos où elle veut, la portion de code appelante n'a pas à connaître la source. Ce "tableau" ou "objet" peut donc être réutilisé partout sur le site, peu importe l'utilisation, sans problème.
Et hors traitements très spécifiques, je ne mets aucune génération HTML là dedans : le surcoût du cache dépassant souvent le temps de formatage en html.

Par cache d'affichage j'entendais la page complète : il s'agit de dire que pendant X secondes/minutes on ne met pas du tout à jour la page, quoi qu'il arrive, et qu'à la place on balance une page HTML pré-générée. Et bien dans ce cas je trouve idiot de passer par PHP vu que c'est lui le principal goulet d'étranglement : il est à mon sens bien plus efficace de générer simplement les entêtes de mise en cache pour les navigateurs et proxies, et de laisser un vrai système de cache aux commandes (Varnish ?).

Ces pages d'affichages "à la PHP", généralement ça se traduit par des dizaines de milliers de fichiers sur le disque, qui provoquent divers problèmes (saturation du disque, du cache disque, voir du cache d'opcode). En tous cas sur les sites que j'ai vu ça utilisé, c'était le cas.

Pour reprendre un exemple classique, je préfère remplacer quelque chose du genre :

$JPCACHE_TIME = 3600;
require '/usr/share/jpcache/jpcache.php';

par :
$expires = 3600;
header('Date: '.gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME']).' GMT');
header("Cache-Control: max-age=$expires, public");
header('Pragma: public');
header('Expires: '.gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME']+$expires).' GMT');



Je viens d'essayer sur Oogolo (avec un simple ab -n 10000 -c10), sur le premier j'ai du 2500 pages/sec et sur le second j'ai du 4500 pages/sec. Bon j'avoue que je m'attendais à une différence plus importante, vu qu'on descend très vite en dessous des 200 pages/sec avec PHP


PS : Cerise : euh "ionice -c3 rm -rf tondossier" ?

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

devtribu | Olivier
Modérateur

Photo de devtribu

Inscrit le : 16/06/2005

# Le 21/02/2010 à 13:12

bool, ton exemple ne s'adapte pas a tout le monde. c'est impossible de générer des pages completes avec des sites communautaires

il faut forcément php pour générer les parties de session (messages privés, préférences d'affichage, ...) et récupérer dans le cache fichier les zones communes (listes, dernieres actus, menus, ...)
Dans tous les cas, c'est bien plus rapide de récupérer un fichier cache que d'ouvrir une connexion sql, sans meme parler du temps de requete et de traitement derriere.

Février 2019, mon futur livre Tout JavaScript chez Dunod https://amzn.to/2PoLd0fOuvrir dans une nouvelle fenetre

Bool | Olivier
Modérateur

Photo de Bool

Inscrit le : 09/05/2005

# Le 21/02/2010 à 13:17

Je sais bien devtribu que ça ne s'adapte pas à tout, mais justement c'est ce cas précis que je n'aime pas : quitte à coller l'ensemble de la page en cache, autant la rendre statique, peu importe la méthode.

Après à partir du moment où tu ne mets en cache que des "portions", ça devient un cache d'objets (le terme d'allogarage est effectivement plus approprié que mon cache de données ).

daevel : infogérance et conseilOuvrir dans une nouvelle fenetre || moiOuvrir dans une nouvelle fenetre

Répondre

Vous ne pouvez pas participer au forum, car votre inscription n'a pas été validée. Pour vous faire valider en tant que Membre, cliquez ici.

© MHN - Tous droits réservés | CNIL N°844440 | 24/11/2024 1:35:54 | Généré en 4.46ms | Contacts | Mentions légales |