Manuel:$wgPoolCounterConf
| Contournements des performances et limites: $wgPoolCounterConf | |
|---|---|
| Configuration pour le contrôle du pool de traitement. |
|
| Introduit dans la version : | 1.16.0 (r52888) |
| Retiré dans la version : | Encore utilisé |
| Valeurs autorisées : | (tableau) ou null |
| Valeur par défaut : | null |
| Autres paramètres : Alphabétique | Par fonction | |
Détails
Configuration pour le contrôle du pool de traitement, pour une utilisation dans les wikis à fort trafic.
Ce tableau de configuration associe les types de pool aux configurations des clients.
Une configuration client est un tableau associatif avec une clé class'' donnant le nom de classe du client (qui devrait être une sous-classe de PoolCounter), et tous les autres éléments qui sont passés au constructeur de classe.
Le constructeur reçoit trois arguments : le tableau de configuration, le type pool et un nom de file d’attente.
(Le type de pool est utilisé pour identifier le type de travail. Le nom de la file d’attente détermine les requêtes qui tentent de faire le même travail. Par exemple, le pool type pourrait être le rendu d’article, et le nom de la file d’attente l’ID de la révision qui est rendue.)
Une implémentation utilisant Redis (PoolCounterRedis) est incluse avec MediaWiki, et une autre utilisant un démon C (PoolCounter_Client) est disponible dans PoolCounter#configuration.
Types de pool
Types de pool qui peuvent être utilisés comme clés pour le tableau $wgPoolCounterConf. Plus de types peuvent être offerts par des extensions:
- ArticleView
- Lors du rendu du contenu d’une page qui n’est pas dans le cache de l’analyseur (y compris les anciennes versions d’une page).
- GetLocalFileCopy
- Lors de la récupération d’un fichier de plus de 10 Mo vers le chemin local pour thumbnailing.
- diff
- Lors du rendu d’un diff, si la taille de l’ancien et du nouveau texte est supérieure à 20000 caractères.
- FileRenderExpensive
- Lorsque la génération de la vignette d'un fichier est jugée trop coûteuse. La définition de trop grand dépend du type de fichier et des dimensions d'image ou de média. Ne s'applique qu'aux vignettes générées directement à partir de thumb.php.
- FileRender
- Lors de la génération de la vignette d'un fichier. Ne s'applique qu'aux vignettes générées directement à partir de thumb.php.
- ApiParser
- Analyse du wikitexte à travers l'API.
- SpecialContributions
- Génération de Spécial:Contributions.
Options de configuration partagées par tous les clients
- timeout
- Délai d’attente en secondes.
- workers
- Nombre maximum de threads actifs dans chaque pool. Les contributeurs supplémentaires attendront qu’une place se libére.
- maxqueue
- Nombre maximum de threads totaux dans chaque pool. (si ce nombre de collaborateurs est déjà à l'ouvrage ou en attente, échouer au lieu d’attendre)
- slots
- Nombre maximal de travailleurs travaillant sur ce type de tâche, peu importe le nom de la file d’attente. 0 signifie illimité. La valeur maximale autorisée est 65536. La façon dont la limite de logement est appliquée est trop zélée - cette option doit être utilisée avec prudence.
Options de configuration supplémentaires pour l’implémentation de Redis
- servers
- Liste des adresses de serveur Redis.
- redisConfig
- Tableau de configuration supplémentaire pour
RedisConnectionPool.
Utilisation
Pour utiliser PoolCounter, sous-classe la classe PoolCounterWork (ou utilisez PoolCounterWorkViaCallback> qui peut implémenter des fonctionnalités arbitraires avec des fonctions anonymes).
Trois méthodes/rappels peuvent être mis en œuvre:
- doWork()
- appelé lorsque le worker est le premier à travailler sur la tâche donnée (également lorsque le serveur PoolCounter est en panne). Renvoie le résultat du travail.
- getCachedWork()
- appelé quand le programme devait attendre un autre programme et ce programme a fini Peut être utilisé pour obtenir un résultat qui a été mis en cache pas doWork(). Si non implémenté ou renvoie
false, doWork() sera appelé. - fallback()
- appelé en cas de dépassement du délai d'attente ou lorsqu'il y a déjà trop de travailleurs en attente. Peut être utilisé pour retourner un résultat moins bon mais plus facile 1a obtenir (exemple : montrer une révision plus vieille en cache au lieu de générer la nouvelle) Si non implémenté ou renvoie
false, error() sera appelé. - error()
- Peut être utilisé pour montrer une erreur.
Exemple
Exemple de configurationː
$wgPoolCountClientConf = [
'servers' => [ '127.0.0.1' ],
'timeout' => 0.5,
'connect_timeout' => 0.01,
];
$wgPoolCounterConf = [
'ArticleView' => [
'class' => MediaWiki\PoolCounter\PoolCounterClient::class,
'timeout' => 15, // temps d'attente en secondes
'workers' => 5, // nombre maximum de threads actifs dans chaque pool
'maxqueue' => 50, // nombre total maximum de threads dans chaque pool
]
];
Exemple d’utilisation de PoolCounter :
// obtenir une vignette pour $file
$work = new PoolCounterWorkViaCallback( 'FileRender', sha1( $file->getName() ), [
'doWork' => function () use ( $file, $params ) {
return $file->transform( $params, File::RENDER_NOW );
},
'doCachedWork' => function () use ( $file, $params, $thumbPath ) {
return $file->getRepo()->fileExists( $thumbPath ) ? $file->transform( $params, File::RENDER_NOW ) : false;
},
'error' => function ( Status $status ) {
return wfMessage( 'generic-pool-error' )->parse() . '<hr>' . $status->getHTML();
}
] );
$result = $work->execute();
Exemple utilisant redis
$wgPoolCounterConf = [
'ArticleView' => [
'class' => 'PoolCounterRedis',
'timeout' => 300, // temps d'attente en secondes
'workers' => 1, // nombre maximum de threads actifs dans chaque pool
'maxqueue' => 2, // nombre total maximum de threads dans chaque pool
'servers' => [ '127.0.0.1:6379' ],
'redisConfig' => [],
],
];