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. D’autres travailleurs attendront qu’une place soit libérée.
- maxqueue
- Nombre maximum de threads totaux dans chaque pool. (Si ce nombre de travailleurs est déjà au travail/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 devrait ê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 retourne faux, 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 retourne faux, 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, // wait timeout in seconds
'workers' => 5, // maximum number of active threads in each pool
'maxqueue' => 50, // maximum number of total threads in each pool
]
];
Exemple d’utilisation de PoolCounter:
// get a thumbnail for $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();
Example using redis
$wgPoolCounterConf = [
'ArticleView' => [
'class' => 'PoolCounterRedis',
'timeout' => 300, // wait timeout in seconds
'workers' => 1, // maximum number of active threads in each pool
'maxqueue' => 2, // maximum number of total threads in each pool
'servers' => [ '127.0.0.1:6379' ],
'redisConfig' => [],
],
];