Manuel:Modules architecturels/Cache
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
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.
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.