developer.jelix.org is not used any more and exists only for history. Post new tickets on the Github account.
developer.jelix.org n'est plus utilisée, et existe uniquement pour son historique. Postez les nouveaux tickets sur le compte github.

Opened 12 years ago

Closed 12 years ago

#448 closed enhancement (duplicate)

Amélioration mécanisme de rafraichissement du cache des zones

Reported by: sylvain261 Owned by:
Priority: low Milestone:
Component: jelix:utils Version: 1.0.1
Severity: normal Keywords: cache zone vérou
Cc: Blocked By:
Blocking: Documentation needed: no
Hosting Provider: Php version:

Description

Aujourd'hui, le cache des zones se rafraîchi automatiquement si le cache a expiré ou si le fichier caché a été supprimé. Le rafraîchissement du cache se fait "à l'initiative de l'internaute", j'entends par là qu'il faut qu'il y ai une requête nécessitant que la zone se charge pour que la zone recharge son cache. L'inconvénient c'est que si j'ai beaucoup de requêtes demandant le chargement de la zone juste au moment ou le cache expire j'ai de très forte chance pour que le cache de la zone soit rafraîchi plusieurs fois en parallèle. Pour une zone dont le contenu est coûteux a généré cela peut s'avérer problématique en terme de tenue en charge. Le pire scénario étant que compte tenu des accès concurrents pour rafraîchir le cache le temps nécessaire à la génération du contenu dépasse le délais de rafraîchissement...Là on est dans une situation où c'est comme si on avait pas de cache. Pour palier à cette problématique j'avais lu il y a longtemps une méthode à base de vérou. Ça consistait à mettre un lock d'écriture sur le fichier durant la génération du cache. Les autres process, si ils ont besoin de rafraîchir le cache mais qu'ils n'ont pas accès en écriture au cache, n'essaye pas de le rafraîchir et patiente jusqu'à ce que le fichier soit redevenu writable ce qui veut dire que le rafraîchissement est terminé et que donc le cache peut désormais être affiché. Si l'attente est trop longue vaut voir..on peut planter ou essayer d'afficher le contenu actuel du fichier.

Ce mécanisme un peu plus évolué me semble nécessaire pour le cache des zones compte tenu de la "cible" "site à forte charge" de Jelix.

Change History (5)

comment:1 Changed 12 years ago by laurentj

  • Component changed from jelix to jelix:utils
  • Priority changed from normal to low

Pour une zone dont le contenu est coûteux a généré cela peut s'avérer problématique en terme de tenue en charge

Possible...

Le pire scénario étant que compte tenu des accès concurrents pour rafraîchir le cache le temps nécessaire à la génération du contenu dépasse le délais de rafraîchissement.

Là je ne comprend pas trop. Si une telle situation arrive, c'est que le développeur a mis un timeout trop petit. Si il met un timeout trop petit, je ne vois pas l'intérêt d'activer le cache. Bref, c'est à lui de corriger.

Ça consistait à mettre un lock d'écriture sur le fichier durant la génération du cache

C'est ce qui se passe plus ou moins dans jFile:write (utilisé pour écrire le cache). Le contenu est généré dans un fichier temporaire (unique pour chaque demande de création), et ce n'est qu'une fois que le contenu est écris et le fichier temporaire fermé, que celui-ci est renommé avec le nom du fichier cache. Un renommage coûte beaucoup moins en temps qu'une écriture de fichier, donc les probabilités de conflits sont minimes. D'autant plus que sur les sites à très forte charge, il y a plusieurs serveurs (avec donc chacun leurs propres fichiers de cache), du load-balancing, voir même des systèmes de caches en aval.

comment:2 Changed 12 years ago by laurentj

Note que la fonction flock (pour verrouiller un fichier), ne fonctionne pas parfaitement sur tous les systèmes.

comment:3 Changed 12 years ago by bballizlife

  • Documentation needed unset

Do we have to think more about this ticket ?

Arguments from laurentj make me say that the way the cache is generated for the moment works quite well.

In fact if there are no more arguments since 5 months in order to improve the zone cache process, i don't see why we should keep the ticket opened.

comment:4 Changed 12 years ago by sylvain261

In fact this issue is relative to ticket #540 and might be considered as duplicate.

comment:5 Changed 12 years ago by bballizlife

  • Resolution set to duplicate
  • Status changed from new to closed
Note: See TracTickets for help on using tickets.