Jump to content

Manuel:$wgPoolCounterConf

From mediawiki.org
This page is a translated version of the page Manual:$wgPoolCounterConf and the translation is 100% complete.
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

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' => [],
        ],
];

Voir aussi