Liigu sisu juurde

Töötlejad

Töötlejad on pikalt töötavad protsessid, mis küsitlevad andmebaasi ootel tööde leidmiseks, käivitavad need ja viivad töövooge edasi. Käsk wp queuety work käivitub WP-CLI sees, samal ajal kui järjekord võetakse otse MySQL kaudu, kasutades parimat saadaolevat Queuety DB-draiverit.

Plugin installib ka vaikimisi kord minutis käivituva WordPress cron varuvariandi keskkondade jaoks, kus puudub shelli juurdepääs. See leht käsitleb spetsiaalseid WP-CLI töötlejaid, mis on soovitatav suurema läbilaskevõimega juurutusviis.

Töötleja käivitamine

Shell
wp queuety work

See käivitab ühe töötleja järjekorras default. See töötab tsüklis: võtab töö, käivitab selle ja kordab. Kui järjekord on tühi, ootab see enne järgmist küsitlust QUEUETY_WORKER_SLEEP sekundit (vaikimisi: 1).

Suvandid

Suvand Kirjeldus
--queue=<queue> Töödeldavad Queue(s), prioriteedi määramiseks komadega eraldatult (vaikimisi: default)
--once Töötle kuni üks töö ja välju
--workers=<n> Hargi N töötlejaprotsessi (vajab laiendusi pcntl ja posix)
--min-workers=<n> Kohanduva kogumi minimaalne töötlejate arv. Vajab --max-workers
--max-workers=<n> Kohanduva kogumi maksimaalne töötlejate arv
Shell
# Process a specific queue
wp queuety work --queue=emails

# Process at most one job and exit
wp queuety work --once

# Run 4 concurrent workers
wp queuety work --workers=4

# Scale between 2 and 6 workers as backlog changes
wp queuety work --queue=providers --min-workers=2 --max-workers=6

Mitme järjekorra prioriteedid

Üks töötleja saab töödelda mitut järjekorda prioriteetsuse järjekorras. Edastage suvandile --queue komadega eraldatud järjekorranimede loend:

Shell
wp queuety work --queue=critical,default,low

Töötleja proovib tööd võtta igast järjekorrast loetletud järjekorras. Kõigepealt kontrollib see critical. Kui critical sisaldab tööd, töötleb see selle. Kui critical on tühi, liigub see edasi järjekorda default ja seejärel järjekorda low. Nii saavad kõrgema prioriteediga järjekorrad alati enne madalama prioriteediga järjekordi tühjaks.

Prioriteetsuse toimimine

Igal tsüklil proovib töötleja tööd võtta loendi esimesest järjekorrast. Kui see järjekord on tühi või peatatud, liigub töötleja järgmise juurde ja jätkab, kuni leiab töö või kõik järjekorrad on läbi kontrollitud. Kui tööd ei leita, jääb töötleja magama ja proovib uuesti. See on range prioriteedimudel, mis tähendab, et pidev voog critical töödest jätab järjekorrad default ja low tööst ilma. Kui madalama prioriteediga järjekorrad vajavad tagatud läbilaskevõimet, kasutage nende jaoks spetsiaalseid töötlejaid.

Mitme järjekorra kasutamine PHP-is

Meetodid Worker::run() ja Worker::flush() aktsepteerivad nii stringi kui ka massiivi:

PHP
// Comma-separated string
Queuety::worker()->run( 'critical,default,low' );

// Array
Queuety::worker()->run( [ 'critical', 'default', 'low' ] );

// flush() also supports multi-queue
$count = Queuety::worker()->flush( 'critical,default,low' );

Juurutusstrateegiad

Iga järjekorra jaoks eraldi töötlejad annavad teile täieliku kontrolli samaaegsuse ja eraldatuse üle. Igal järjekorral on oma töötleja process(es) ning teised järjekorrad ei saa seda tööta jätta:

Ini
[program:queuety-critical]
command=wp queuety work --queue=critical
numprocs=4

[program:queuety-default]
command=wp queuety work --queue=default
numprocs=2

[program:queuety-low]
command=wp queuety work --queue=low
numprocs=1

Prioriteetsus ühe töötlejaga on lihtsamini hallatav ja sobib hästi siis, kui madalama prioriteediga järjekorrad taluvad viivitusi:

Ini
[program:queuety-worker]
command=wp queuety work --queue=critical,default,low
numprocs=2

Võite ka mõlemat lähenemist kombineerida: kasutage läbilaskevõime tagamiseks spetsiaalseid töötlejaid critical jaoks ja kõige muu jaoks prioriteetsuse alusel töötlejat:

Ini
[program:queuety-critical]
command=wp queuety work --queue=critical
numprocs=2

[program:queuety-fallback]
command=wp queuety work --queue=default,low
numprocs=2

Ressursiteadlik töötlusse lubamine

Töötlejad ei võta lihtsalt järgmist ootel kirjet. Enne võetud töö alustamist saab Queuety rakendada üldisi töötlusse lubamise kontrolle, mis põhinevad töö samaaegsusrühmal ja vastava käsitleja hiljutisel käitusprofiilil.

Üldise mudeli kohta, sealhulgas selle kohta, kuidas see seostub töö metaandmete ja töövoo eelarvetega, vaadake Ressursside haldamine.

Samaaegsusrühm seab mitmele käsitlejale või tööklassile ühise ülempiiri. Kui märgite mitu kulukat teenusepakkujat sama rühma ja piiranguga, vabastab töötleja äsja võetud töö selle käivitamise asemel, kui rühm on täis koormatud. Nii ei koorma sõltumatud järjekorrad üht allavoolusüsteemi korraga üle pelgalt seetõttu, et mitu töötlejat on jõude.

Hiljutised käituslogid annavad sisendi ka lihtsale töötlusse lubamise profiilile. Kui ressursipõhine töötlusse lubamine on sisse lülitatud, uurib Queuety käsitleja hiljutist keskmist kestust ja tippmälu, enne kui selle käivitab. Kui praegune töötleja läheneb juba seadistatud mälupiirile, järjekorra või teenusepakkuja rühm on juba oma kaalutud eelarve täis kasutanud, praegusel konteineril ei paista selle käsitleja täheldatud profiili jaoks piisavalt vaba mälu olevat või --once laadne käitus läheneb oma ajapiirile, lükkab Queuety töö edasi, selle asemel et alustada tööd, mis tõenäoliselt korralikult lõpule ei jõua.

Lubage reegel töö definitsioonis, mitte töötleja käsus:

PHP
class CallProviderStep implements \Queuety\Step {
    public function handle( array $state ): array {
        // ...
    }

    public function config(): array {
        return [
            'concurrency_group' => 'providers',
            'concurrency_limit' => 3,
            'cost_units' => 5,
        ];
    }
}

Samad metaandmed saab lisada avalike omadustega väljakutsutavatele tööklassidele või üksikule väljakutsele meetodite PendingJob::concurrency_group() ja PendingJob::cost_units() kaudu.

Töötleja töötlusse lubamise profiili juhivad järgmised konstandid:

Konstant Kirjeldus
QUEUETY_RESOURCE_ADMISSION Profiilipõhiste töötlusse lubamise kontrollide sisse- või väljalülitamine
QUEUETY_RESOURCE_PROFILE_WINDOW_MINUTES Ajavahemik, mille põhjal koostatakse käsitlejate hiljutised profiilid
QUEUETY_RESOURCE_PROFILE_TTL Käsitlejate hiljutiste profiilide vahemällu salvestamise TTL
QUEUETY_RESOURCE_MEMORY_HEADROOM_MB Enne järgmise töö lubamist reservi jäetav mälumaht
QUEUETY_RESOURCE_SYSTEM_MEMORY_AWARENESS Parima võimaliku konteineri- või hostimälukontrolli sisse- või väljalülitamine
QUEUETY_RESOURCE_SYSTEM_MEMORY_HEADROOM_MB Enne järgmise töö lubamist reservi jäetav süsteemimälu maht
QUEUETY_RESOURCE_QUEUE_COST_BUDGETS Järjekorra nime järgi määratavad kaalutud kulueelarved
QUEUETY_RESOURCE_GROUP_COST_BUDGETS Kaalutud kulueelarved võtmega concurrency_group
QUEUETY_RESOURCE_TIME_HEADROOM_MS Ühekordsete töötlejakäivituste jaoks reservi jäetav ajavaru

Töötleja elutsükkel

Töötleja peatub sujuvalt pärast käimasoleva töö lõpetamist, kui täitub mõni järgmistest tingimustest:

Tingimus Seadistus
Töödeldud tööde maksimumarv QUEUETY_WORKER_MAX_JOBS (vaikimisi: 1000)
Mälupiiri ületamine QUEUETY_WORKER_MAX_MEMORY (vaikimisi: 128 MB)

Peatumise järel väljub töötleja puhtalt. Tootmiskeskkonnas käivitab protsessihaldur selle automaatselt uuesti.

Signaale ei käsitleta veel sujuvalt (#4). Üksik wp queuety work protsess ei paigalda signaalikäsitlejat, seega SIGTERM või SIGINT (Ctrl+C) lõpetab selle kohe, ka töö keskel. See töö jääb olekusse processing, kuni aegunud tööde taastamine selle QUEUETY_STALE_TIMEOUT sekundi pärast lähtestab, seega hoidke käsitlejad korduskäivitamise suhtes ohutuna. Töötlejate kogum edastab SIGTERM oma alamprotsessidele, kuid alamprotsessid sellele ei reageeri, nii et kogum töötab edasi, kuni need mõnel ülaltoodud põhjusel peatuvad. Kui peate kogumi peatama, määrake protsessihaldurile peatamise ajalõpp, mille järel see saadab SIGKILL.

Mitme töötleja samaaegsus

Lipp --workers=N hargneb N alamprotsessiks, kasutades pcntl_fork(). Iga alamprotsess loob oma andmebaasiühenduse ja töötleb töid eraldi. Põhiprotsess jälgib alamprotsesse ja käivitab krahhi korral need uuesti.

Shell
wp queuety work --queue=default --workers=4

Nõuded: Laiendused pcntl ja posix PHP peavad olema installitud (ilma pcntl-ta ebaõnnestub käsk teatega "pcntl extension is required for --workers=N."), ja iga alamprotsess kasutab oma andmebaasiühendust, seega peab teie MySQL max_connections seadistus töötlejate kogumit arvestama. Kohanduvatel kogumitel (--min-workers/--max-workers) on samad nõuded.

Kohanduvad töötlejate kogumid

Kohanduvad kogumid hoiavad minimaalse arvu töötlejaid soojas ning kasvatavad ja kahandavad nende arvu seadistatud vahemiku piires:

Shell
wp queuety work --queue=providers --min-workers=2 --max-workers=6

Põhiprotsess jälgib valitud järjekordade hulgas saadaval olevat järjekorra tagavara ja kohandab alamprotsesside arvu selle järgi, arvestades seadistatud ülempiiri. Kui järjekorras jääb vaiksemaks, ootab kogum enne vähendamist jõudeoleku armuaega, et lühiajalised koormustipud ei põhjustaks protsesside loendis kohe muutusi.

Suurendamine on endiselt ettevaatlik. Kui Queuety suudab lugeda konteineri või hosti mälutelemeetriat, keeldub see alamprotsesse lisamast, kui järgmise töötleja kogu mälumahu jaoks pole piisavalt vaba mälu.

Põhiprotsessi skaleerimistsüklit juhivad järgmised seaded:

Konstant Kirjeldus
QUEUETY_WORKER_POOL_SCALE_INTERVAL Kui sageli põhiprotsess töötlejate kogumi suurust kooskõlastab
QUEUETY_WORKER_POOL_IDLE_GRACE Kui kaua peab järjekord vaikne olema, enne kui kogumit vähendatakse

Aegunud töö taastamine

Kui töötleja jookseb töö töötlemise ajal kokku, jääb töö olekusse processing. Pikalt töötav töötleja kontrollib umbes kord minutis, kas mõni töö on olnud olekus processing kauem kui QUEUETY_STALE_TIMEOUT sekundit. Aegunud töö, millel on katseid alles, proovitakse uuesti pärast ooteaja möödumist; kõik katsed ära kasutanud töö jäetakse ootele ja selle töövoog märgitakse ebaõnnestunuks. --once töötlejad ja varuvariant WP-Cron seda kontrolli ei tee.

Taastage aegunud tööd käsitsi:

Shell
wp queuety recover

Tühjendusrežiim

Töötle kõik ootel tööd ja välju. Sobib testimiseks või ühekordseks partiitöötluseks:

Shell
wp queuety flush
wp queuety flush --queue=emails

Tootmiskeskkonda juurutamine

Tootmiskeskkonnas kasutage töötlejate töös hoidmiseks protsessihaldurit. Siin on kaks levinud võimalust.

Supervisord

Ini
[program:queuety-default]
command=wp queuety work --queue=default
directory=/var/www/html
autostart=true
autorestart=true
numprocs=2
process_name=%(program_name)s_%(process_num)02d
stdout_logfile=/var/log/queuety-default.log
stderr_logfile=/var/log/queuety-default-error.log

[program:queuety-emails]
command=wp queuety work --queue=emails
directory=/var/www/html
autostart=true
autorestart=true
numprocs=1
stdout_logfile=/var/log/queuety-emails.log
stderr_logfile=/var/log/queuety-emails-error.log

Systemd

Ini
[Unit]
Description=Queuety Worker (default queue)
After=mysql.service

[Service]
Type=simple
User=www-data
WorkingDirectory=/var/www/html
ExecStart=/usr/local/bin/wp queuety work --queue=default
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Lubage ja käivitage:

Shell
sudo systemctl enable queuety-worker
sudo systemctl start queuety-worker

Juurutamisnõuanded

Kasutage eri järjekordade jaoks eraldi töötlejaid, kui vajate tugevamat eraldatust. Kasutage suvandit --workers=N, kui töökoormus on protsessorimahukas, ja eelistage eraldi jälgitavaid töötlejaid, kui töökoormus koosneb peamiselt sisend- ja väljundtoimingutest. Määrake QUEUETY_WORKER_MAX_JOBS, kui soovite perioodiliste taaskäivitustega mälu vabastada, ja jälgige buried arvu veebikonksude või mõõdikute kaudu.