Path

ez.no / developer / articles / ez publish knowledge series: «stale cache» ou la gestion intelligente des caches par ez publish 4.1


eZ Publish Knowledge Series: «Stale Cache» ou la gestion intelligente des caches par eZ Publish 4.1

Nous tenons à chaleureusement remercier Pascal Boyer pour cette traduction, originalement disponible sur http://luxpopuli.fr/eZ-Publish/Articles-techniques-divers/eZ-Publish-Stale-Cache-ou-la-gestion-intelligente-des-caches-par-eZ-Publish-4.1.

Cet article décrit dans le détail les principes et fonctions du nouveau système de cache présent dans eZ Publish 4.1. Globalement, l'idée peut se résumer à ceci: au lieu de supprimer les éléments cachés (présents dans le cache) pour les régénérer par le biais de requêtes concurrentes, la logique est inversée par un algorithme de rafraîchissement. Concrètement, un élément caché sera marqué comme étant invalide et ne sera supprimé que lorsque la nouvelle version cachée existera. Pendant toute la phase de génération de cette nouvelle version et jusqu'à ce que celle-ci soit efficiente, c'est l'ancienne version cachée qui est servie aux internautes.

Cette amélioration découle des précieux retours d'informations que nous obtenons. Les utilisateurs de eZ Publish frappent souvent à notre porte pour nous parler de leurs problèmes de performance lorsque de nombreux rédacteurs s'(hyper)activent sur leur application basée sur eZ Publish.

Introduction

Pour ceux qui ne connaissent pas les détails du problème, revenons sur certaines informations de base pour comprendre la problématique à laquelle font face ces utilisateurs. Lorsque, par exemple, est affiché un objet, disons en mode vue full, eZ Publish stocke le résultat HTML du traitement du template (il le met en cache). Cet élément mis en cache est appelé Cache de vue et sera réutilisé la prochaine fois que ce contenu sera affiché par le même moyen. Cette technique évite de réaliser le traitement des templates d'affichage chaque fois qu'un objet de contenu est affiché, allégeant significativement la charge de l'application. Ce système existe maintenant depuis longtemps (un peu avant la version 3.0 de eZ Publish).

Pour que le contenu affiché soit pleinement synchronisé avec le vrai contenu, c'est à dire synchronisé en temps réel autant que possible, le cache de vue d'un objet de contenu expire chaque fois qu'une nouvelle version de l'objet est publiée. Cela signifie que le code HTML caché doit être régénéré, impliquant que le template d'affichage soit à nouveau traité lorsque la nouvelle version de l'objet de contenu est affichée pour la première fois. Vous trouverez plus d'informations dans dans la documentation en ligne : http://ez.no/doc/ez_publish/technical_manual/4_0/features/view_caching.

Le cache de vue est pris en exemple ici, mais les améliorations apportées par la fonctionnalité Stale Cache s'appliquent également aux caches de blocs et à tout autre type de cache. Retenez également que cette fonctionnalité s'applique tant aux environnements clusterisés qu'à ceux qui ne le sont pas.

Lorsque plusieurs utilisateurs demandent le même objet dont le cache de vue vient d'expirer, leurs requêtes sont placées en file d'attente, la première d'entre elles étant la seule à déclencher la régénération du cache de vue. Cela implique que presque toutes les requêtes (exceptée la première) reçues à ce moment précis devront attendre que la nouvelle version cachée soit disponible, entraînant deux inconvénients majeurs:

  • Expérience utilisateur: les clients attendent au moins le temps nécessaire à la régénération du cache, ce qui peut être long lorsque des templates complexes sont utilisés.
  • Au niveau du système: toutes ces requêtes en attente mettent la pression sur les ressources du système (situations de compétition, interblocages (deadlocks), etc...).

Comments

Good stuff

I suppose 4.1 had more than we thought :) Now on to 4.2.... The roadmap needs updating, though....

Great article

And a great improvement, too!

Would it be possible to have more details?
About eg.
- the operations in the cache control flow that should be atomic in order to avoid race conditions (eg. I think about check-if-cache-is-being-generated-and-mark-it-as-being-generated)
- usage of mutextes / locking primitives and how it has been reduced (locking is bad!)
- how the cache system works when a page cache is made of of different templates that have different timeouts
- response graph of a "full cache clean" operation

log in ou créer un compte utilisateur pour commenter.

Information sur l'article

Writing for ez.no

Want to share your information? We publish your article on our Website.

Article index

License

Ce travail est soumis aux conditions de la licence Creative Commons Attribution-NonCommercial-NoDerivs 2.5 License.

Téléchargement