Preskoči na vsebino

Queuety

Mehanizem za poteke dela WordPress.

Terminal
wp plugin install https://github.com/inline0/queuety/releases/latest/download/queuety.zip --activate

Najnovejša izdaja v0.22.0 GPL-2.0-or-later WordPress 6.4+, PHP 8.2+

V praksi

Potek dela, določen v PHP, in ukaz delavca, ki ga izvaja.

Potek dela z odobritvijo

Potek dela izvede korak, počaka 24 ur in se nato zaustavi pri wait_for_approval(), dokler drug proces ne pošlje signala approval.

Zakasnitev je shranjena v zbirki podatkov, zato se ohrani po ponovnih zagonih delavca in uvedbah, signal, poslan predčasno, pa se zabeleži in prevzame, ko potek dela doseže čakanje. Ob preklicu izvajanja se pokliče obravnavalnik on_cancel().

PHP
$workflow_id = Queuety::workflow( 'approval_flow' )
    ->then( SubmitRequestHandler::class )
    ->delay( hours: 24 )
    ->wait_for_approval()
    ->then( ProcessApprovalHandler::class )
    ->on_cancel( CleanupHandler::class )
    ->dispatch( [ 'request_id' => 99 ] );

// Later, from another process:
Queuety::signal( $workflow_id, 'approval', [ 'approved_by' => 'admin@example.com' ] );

Neposredno prevzemanje opravil MySQL

Vsak delavec deluje v dolgotrajnem procesu WP-CLI in prevzema opravila neposredno iz MySQL z uporabo FOR UPDATE SKIP LOCKED.

Zanesljivi poteki dela

Večstopenjski procesi s trajno shranjenim stanjem, ki preživi časovne omejitve PHP, zrušitve in ponovne poskuse.

Končni avtomati

Dolgotrajno stanje, vodeno z dogodki, z Queuety::machine(): določite stanja in prehode, pošiljajte dogodke ter berite časovnico.

Signali in odobritve

wait_for_signal(), wait_for_approval() in wait_for_input() zaustavijo potek dela, dokler ne prispe zunanji vnos.

Ravni prednosti

Štiri ravni, od nizke do nujne. Znotraj čakalne vrste se najprej prevzamejo opravila z višjo prednostjo.

Omejevanje hitrosti

Omejitve za posamezne obravnavalnike v drsečem časovnem oknu. Delavec, ki prevzame opravilo z omejeno hitrostjo, ga vrne v čakalno vrsto in počaka.

Ponavljajoča se opravila

Načrtovanje na podlagi intervalov in cron. Vgrajeni razčlenjevalnik cron brez zunanjih odvisnosti.

Vzporedni koraki

Korake poteka dela izvajajte sočasno in pred nadaljevanjem počakajte, da se vsi dokončajo.

Meritve in beleženje

Trajni dnevnik v zbirki podatkov s prepustnostjo, povprečnim trajanjem, trajanjem p95 in stopnjo napak za vsak obravnavalnik.

Nadomestni način WP-Cron

Brez dostopa do lupine se enkrat na minuto sproži dogodek WordPress cron, ki za privzeto čakalno vrsto zažene enkratnega delavca.

Vmesna programska oprema

Vmesna programska oprema za opravila v slogu čebule, ki omogoča omejitve hitrosti, omejevanje izjem, enoličnost, časovne omejitve in zaščito pred prekrivanjem.

PHP 8.2+

Naštevanja, razredi samo za branje, izrazi match, promocija konstruktorja in atributi PHP.

Zakaj Queuety

Stanje je shranjeno v MySQL

Vrstice čakalne vrste, stanje poteka dela, dnevniki, signali in pretočni odseki so shranjeni v MySQL, zato ponovni zagon delavca ne povzroči izgube stanja orkestracije. Na meji vsakega koraka se v eni transakciji potrdi posodobitev stanja, dokončanje opravila in uvrstitev naslednjega opravila v čakalno vrsto.

Zunaj zahtevka za stran

WP-Cron se sproži samo ob obiskih strani, klic LLM, ki traja 60 sekund, pa prekine 30-sekundna časovna omejitev PHP. Delavci Queuety delujejo v dolgotrajnem procesu WP-CLI in prevzemajo delo ne glede na promet.

Varovalke za izvajanje agentov

for_each() z načinom sklepčnosti, vrati za odobritev in omejitvami, kot sta max_transitions() in max_state_bytes(), ohranja dolgotrajna izvajanja agentov znotraj določenih meja.

Uporabno tudi zunaj WordPress

Jedro, podprto z zbirko podatkov, deluje v vsakem procesu PHP, ki lahko vzpostavi povezavo z isto zbirko podatkov, zato lahko druga aplikacija odprema opravila, pošilja signale in bere stanje poteka dela. Sprožilci dejanj, most WP-Cron in ukazi WP-CLI še vedno zahtevajo WordPress.

V primerjavi z

Kako je Queuety povezan z razporejevalniki in mehanizmi za poteke dela, ki jih razvijalci WordPress že poznajo.

Queuety v primerjavi z drugimi orodji
WP-Cron Primerno zaVgrajen je v WordPress, zato na deljenem gostovanju ne potrebuje dostopa do sistemskega razporejevalnika; opravilo, ki zamudi predvideni čas, se izvede ob naslednjem nalaganju strani, namesto da bi bilo izpuščeno. Razlika v primerjavi z QueuetyQueuety delavci delujejo neodvisno od prometa na spletnem mestu in potrebujejo dolgotrajen proces wp queuety work. Njihov most WP-Cron ponavljajoče se dogodke pretvori v urnike, vendar njihovih povratnih klicev kavljev še ne izvaja, zato je WP-Cron še vedno odgovoren zanje.
Action Scheduler Primerno zaZasnovan je za distribucijo vtičnikov in tem brez potrebe po dostopu do strežnika; vsak mesec obdela milijone plačil za Subscriptions in spletnih kljuk za WooCommerce, vsako dejanje pa zabeleži v skrbniškem vmesniku. Razlika v primerjavi z QueuetyAction Scheduler izvede hook ob poznejšem času, na primer kot zakasnjeni do_action(). Queuety dodaja večstopenjske poteke dela s stanjem, ki se ohranja med koraki, čakanjem na signal in odobritev ter avtomati stanj; pregledate jih lahko z ukazi WP-CLI, kot je wp queuety workflow timeline.
Temporal Primerno zaPlatforma za zanesljivo izvajanje: zgodovina dogodkov beleži vsak korak poteka dela, zato se izvajanje po zrušitvah ali izpadih nadaljuje od zadnjega zabeleženega dogodka; Temporal Cloud je na voljo kot alternativa samostojnemu gostovanju storitve. Razlika v primerjavi z QueuetyStoritev Temporal je strežnik Go in zbirka podatkov, ki delujeta ob vaši aplikaciji. Queuety hrani svoje stanje v tabelah MySQL na povezavi z zbirko podatkov WordPress, delavce pa izvaja prek WP-CLI.

Vprašanja in odgovori

Kratki odgovori iz dokumentacije za Queuety.

Namestite vtičnik, zaženite delavca in sledite vodnikom od prvega opravila do potekov dela z odobritvami in avtomatov stanj.