Jump to content

Příručka:$wgPoolCounterConf

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

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

Související odkazy