Příručka:$wgPoolCounterConf
Výkonnostní hacky a limity: $wgPoolCounterConf | |
---|---|
Konfigurace pro řízení fondu zpracování. |
|
Zavedeno od verze: | 1.16.0 (r52888) |
Odstraněno od verze: | stále se používá |
Povolené hodnoty: | (pole) nebo null |
Výchozí hodnota: | null |
Další nastavení: Podle abecedy | Podle funkce |
Podrobnosti
Konfigurace pro řízení fondu zpracování pro použití na wikinách s vysokým provozem.
Toto pole konfigurace mapuje typy fondu na konfigurace klienta.
Konfigurace klienta je asociativní pole s klíčem class, který udává název třídy klienta (což by měla být podtřída PoolCounter
) a jakékoli další prvky, které jsou předány konstruktoru třídy.
Konstruktor obdrží tři argumenty: Pole konfigurace, typ fondu a název fronty.
(Typ fondu se používá k identifikaci typu práce. Název fronty určuje, které požadavky se pokoušejí provést stejnou práci. Typ fondu může být například vykreslování článku a název fronty ID revize, která se zobrazuje.)
Implementace využívající Redis (PoolCounterRedis
) je součástí MediaWiki a další implementace využívající C daemon (PoolCounter_Client
) je dostupná v PoolCounter#Configuration.
Typy fondů
Typy fondu, které lze použít jako klíče pro pole $wgPoolCounterConf. Další typy lze zpřístupnit pomocí rozšíření:
- ArticleView
- Při vykreslování obsahu stránky se nenachází v mezipaměti analyzátoru (včetně starých verzí stránky).
- GetLocalFileCopy
- Při načítání souboru většího než 10 MB do místní cesty pro tvorbu miniatur.
- diff
- Při vykreslování rozdílu, pokud je velikost starého a nového textu větší než 20 000 znaků.
- FileRenderExpensive
- Při vytváření náhledů souboru, který je považován za náročný. Úvaha o náročnosti závisí na typu souboru a rozměrech obrázku nebo média. Platí pouze pro miniatury vykreslené přímo od thumb.php.
- FileRender
- Při náhledu souboru. Platí pouze pro miniatury vykreslené přímo od thumb.php.
- ApiParser
- Při analýze wikitextu přes API.
- SpecialContributions
- Při vykreslování Special:Contributions.
Možnosti konfigurace sdílené všemi klienty
- timeout
- Časový limit čekání v sekundách.
- workers
- Maximální počet aktivních vláken v každém fondu. Další pracovníci počkají, dokud se místo neuvolní.
- maxqueue
- Maximální počet celkových vláken v každém fondu. (Pokud tento počet pracovníků již pracuje/čeká, místo čekání selže)
- slots
- Maximální počet pracovníků pracujících na tomto typu úlohy bez ohledu na název fronty. 0 znamená neomezeno. Maximální povolená hodnota je 65536. Způsob, jakým je vynucován limit slotů, je příliš horlivý – tuto možnost je třeba používat opatrně.
Další možnosti konfigurace pro implementaci Redis
- servers
- Seznam adres serveru Redis.
- redisConfig
- Další konfigurační pole na
RedisConnectionPool
.
Použití
Chcete-li použít PoolCounter, podtřídu PoolCounterWork
(nebo použijte PoolCounterWorkViaCallback
, která může implementovat libovolnou funkcionalitu s anonymními funkcemi).
Lze implementovat tři způsoby/zpětná volání:
- doWork()
- Volá se, když pracovník pracuje na daném úkolu jako první (také když je server PoolCounter mimo provoz). Vrátí výsledek práce.
- getCachedWork()
- Volá, když pracovník musel čekat na jiného pracovníka a tento pracovník skončil. Lze použít k získání výsledku, který byl uložen do mezipaměti pomocí doWork(). Pokud není implementován nebo vrátí hodnotu false, zavolá se doWork().
- fallback()
- Vypršel čas čekání nebo když již čeká příliš mnoho pracovníků. Může být použit k vrácení nějakého ne tak dobrého, ale levného výsledku (např. zobrazení starší revize uložené v mezipaměti namísto vykreslení nové). Pokud není implementován nebo vrací false, bude zavoláno error().
- error()
- Lze použít k zobrazení chyby.
Příklad
Příklad konfigurace:
$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
]
];
Příklad použití 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' => [],
],
];