Manuel:Modules architecturels/Cache

This page is a translated version of the page Manual:Architectural modules/Cache and the translation is 100% complete.
Module
Cache
Fonctions fournir les techniques de mise en cache pour optimiser les performances de MediaWiki
Implémentation mise en cache des objets et du web

Responsabilités

Le module cache est chargé de fournir les techniques de mises en cache pour optimiser les performances de MediaWiki. La mise en cache des objets et du web sont tous deux supportés par le logiciel MediaWiki. La mise en cache des objets range les données et les objets seuls, lorsqu'ils sont souvent appelés et qu'ils nécessitent que des ressources soient générées. MediaWiki range en cache d'innombrables objets dont quelques uns sont présentés ci-dessous :

  • Utilisateur
  • Sortie de l'analyseur
  • Tableau de données de l'image (version, taille, largeur, hauteur, métadonnées etc.)
  • Wikicode après le prétraitement xml
  • Texte de la version
  • Différences des versions
  • ...

La mise en cache du web représente le stockage des pages HTML entières. Pour prendre en charge la mise en cache du web, MediaWiki fournit l'intégration avec le serveur de proxy de Squid et l'accélérateur Varnish. Il les notifie quand une page doit être purgée du cache et être regénérée.

Informations d'implémentation

Mise en cache des objets

 
Options prises en charge pour la mise enn cache

Article principal : Cache des objets.

MediaWiki prend en charge l'enregistrement du cache des objets à différents endroits, par exemple avec un système de fichiers, dans la base de données, ou sur un système externe tel que memcached. Le mode de stockage est définit par la variable globale $wgMainCacheType de LocalSettings.php. En plus, les types de cache pour les messages et l'analyseur syntaxique peuvent être spécifiés en initialisant $wgParserCacheType et $wgMessageCacheType. La super-classe de tous les types de caches est BagOStuff, elle fournit l'interface pour de telles méthodes et pour la récupération d'un élément du cache, son ajout, sa suppression etc. Toutes les implémentations spécifiques de la mise en cache héritent de cette classe, comme le montre la figure Options prises en charge pour la mise en cache. Ainsi par exemple, SqlBagOStuff fournit la mise en cache des objets en utilisant la base de données SQL et APCBagOStuff réalise cela en utilisant l'accélérateur APC de PHP.

$wgMemc est la variable globale pour accéder au cache principal. Elle est initialisée à partir de $wgMainCacheType en appelant ObjectCache::getInstance($wgMainCacheType). Cette initialisation renvoie un objet BagOStuff spécifique; par exemple dans le cas de $wgMainCacheType = CACHE_MEMCACHED, elle renverra un MemcachedPhpBagOStuff. Puis à chaque fois que cela est nécessaire chaque objet peut être stocké en appelant wgMemc->set() (en fournissant la clé et la valeur) ou récupéré en appelant wgMemc->get() (en fournissant la clé).

La génération de la clé pour enregistrer dans le cache possède certaines règles communes. Il commence toujours avec le nom de la base de données et il est suivi par la spécification du type de l'objet mis en cache. Des exemples de telles clés sont montrés dans la table des clés de Cache. La partie terminale des clés varie. Par exemple avec l'objet utilisateur, il es composé de l'ID de l'utilisateur et pour l'objet fichier, ce sera le code de hachage md5 de son nom. La génération de la clé pour le ParserOutput est expliquée dans la documentation du module Parser.

Clés du cache
Objet Clé
Sortie d'analyseur syntaxique buildings_en:pcache:idhash:2-0!*!*!*!*!*!*
Utilisateur buildings_en:user:id:1
Fichier buildings_en:file:f9f25d227db94434eb6c42fc6016ed83
Wikicode prétraité en XML buildings_en:preprocess-xml:7630d77fb556ce2262f9c890a07e869c:0
Différence entre révisions buildings_en:diff:version:1.11a:oldid:139:newid:140

A par le stockage des objets et des données via la mise en cache 'centralisée' mentionnée par la variable $wgMainCacheType, MediaWiki implémente de lui-même la mise en cache de types supplémentaires. Par exemple LinkCache, HTMLFileCache ou LocalizationCache.

LinkCache est utilisé pour mettre en cache les objets titre avec leur ID, s'ils sont liés à partir d'une source particulière. Par exemple, un article peut avoir des liens avec d'autres articles, utiliser des modèles, des catégories, avoir sa page de discussion etc. Tous ces liens seront rangés dans un objet LinkCache et récupérés de là quand nécessaire.

 
Types de cache dans MediaWiki

HTMLFileCache implémente la mise en cache des pages HTML entières dans le système des fichiers. Si $wgUseFileCache est mis à true, les pages peuvent être mises en cache sur le serveur et distribuées à la demande aux utilisateurs.

LocalizationCache représente un objet avec le contenu en cache des fichiers de traductions. MediaWiki utilise de tels messages dans chaque partie de l'interface en rapport avec l'utilisateur. Par exemple la 'confidentialité' (privacy) peut valoir 'Privacy policy' en anglais et 'Politique de protection des données' en français. LocalizationCache contient ce type de messages pour les langues qui ont été chargées, et de cette manière ils peuvent être facilement accédés lors de la génération des pages HTML personnalisées.

Cache du web

Pour fournir l'intégration avec Squid ou Varnish, MediaWiki implémente la notification de purge. La classe responsable de la purge des URLs Squid à qui on a donné un ou plusieurs titres est CdnCacheUpdate. Lorsqu'un cache de page HTML doit être invalidé une instance de CdnCacheUpdate est créée et la méthode doUpdate() est appliquée dessus.

Vous pouvez voir un aperçu des différents types de mises en cache du module Cache sur la figure Types de cache dans MediaWiki.

Cache de l'analyseur syntaxique

Voir le Cache de l'analyseur.