Liigu sisu juurde

Sissejuhatus

Queuety on WordPressi plugin, mis pakub kiiret tööjärjekorda, püsivat töövoomootorit ja püsivat olekumasina käituskeskkonda. Tööprotsessid võtavad töid otse MySQL-ist ning töötlevad neid kaua töötavas WP-CLI protsessis. WordPressi ja WP-CLI laadiv PHP käituskeskkond vajab laiendust mysqli või pdo_mysql.

Miks Queuety?

WordPress-il puudub tõeline taustatööde süsteem. wp_cron käivitub ainult lehekülgede külastamisel. Action Scheduleri vaikekäivitaja kasutab WP-Cron-i ja tagasisuunatud HTTP-päringuid; kummagi töö kestab partiide kaupa kuni 30 sekundit. 60 sekundit kestev LLM-i API-väljakutse katkestatakse PHP 30-sekundilise ajalõpu tõttu. Puudub võimalus käivitada mitmest sammust koosnevaid protsesse, mis krahhi üle elavad ja sealt, kus pooleli jäi, jätkavad.

Queuety lahendab selle kolme põhielemendi abil:

  1. Tööd taustal tehtava töö jaoks, mis käivitatakse ja unustatakse
  2. Töövood püsiva olekuga vastupidavate mitmeetapiliste protsesside jaoks
  3. Olekumasinad pikaajalise sündmuspõhise oleku haldamiseks

Kiire näide

Saada töö järjekorda tänapäevase API abil:

PHP
use Queuety\Contracts\Job;
use Queuety\Dispatchable;

readonly class SendEmailJob implements Job {
    use Dispatchable;

    public function __construct(
        public string $to,
        public string $subject,
        public string $body,
    ) {}

    public function handle(): void {
        wp_mail( $this->to, $this->subject, $this->body );
    }
}

SendEmailJob::dispatch( 'user@example.com', 'Welcome', 'Hello from Queuety!' );

Või kasuta klassikalist käsitleja nime määramise viisi:

PHP
use Queuety\Queuety;

Queuety::dispatch( 'send_email', [ 'to' => 'user@example.com' ] );

Käivita püsiv töövoog:

PHP
Queuety::workflow( 'generate_report' )
    ->then( FetchDataHandler::class )
    ->then( CallLLMHandler::class )
    ->then( FormatOutputHandler::class )
    ->dispatch( [ 'user_id' => 42 ] );

Modelleeri pikaajalist seanssi olekumasinaga:

PHP
use Queuety\Enums\StateMachineStatus;

Queuety::machine( 'agent_session' )
    ->state( 'awaiting_user' )
    ->on( 'user_message', 'planning' )
    ->state( 'planning' )
    ->action( PlanSessionAction::class )
    ->on( 'planned', 'completed' )
    ->state( 'completed', StateMachineStatus::Completed )
    ->dispatch( [ 'thread_id' => 42 ] );

Käivita tööline:

Shell
wp queuety work

Kui ehitad agendilaadset süsteemi, alusta juhendist Agent Orchestration. Seal näidatakse, kuidas planeerija ja täitja töövood, inimese ülevaatuse etapid ning töövoogudevahelised ooteajad kokku sobivad.

Kui süsteem on sündmuspõhine ja pikaajaline, alusta töövoogude kõrval juhendist State Machines.

Kui soovid algusest lõpuni integratsiooninäiteid, vaata lehte Examples, kus on nüüd ka Neuron-põhised mustrid teenusepakkujate vahetamiseks, voogedastuseks, mälutoega korduvaks ülevaatamiseks ja sõltuvateks töövoogudeks.

Kui soovid käivitada töövooge WordPress domeenisündmuste, näiteks save_post põhjal, vaata lehte Action Triggers.

Kui soovid kasutada andmebaasipõhist käituskeskkonda väljaspool WordPress-i, vaata lehte Standalone Use.

Peamised eristajad

  • Kiire käivitus. Töölised pääsevad järjekorrale otse ligi MySQL kaudu ega kasuta päringupõhist cron mustrit, mis aeglustab taustatöid keskkonnas WordPress.
  • Püsivad töövood. Püsiva olekuga mitmeetapilised protsessid, mis elavad üle PHP ajalõpud, krahhid ja korduskatsed. Iga sammu piir on atomaarne MySQL-tehing.
  • Selgesõnalised olekumasinad. Modelleeri vestlusseansse, kinnitamisi ja muid pikaajalisi elutsükleid nimetatud olekute, kaitstud üleminekute, järjekorda pandud olekusse sisenemise toimingute ja püsivate sündmuste ajajoontega.
  • Tänapäevane tööde järjekorda saatmine API. Isepiisavad tööklassid Dispatchable omadusega, tüübistatud konstruktori omadused koormana ning klassis deklareeritud $tries/$timeout/$backoff. readonly klass ei saa neile omadustele vaikeväärtusi anda, seega deklareeri need tavalises klassis muutumatute edendatud konstruktoriomadustena.
  • Vahevara töötlusahel. Sibulakujuline vahevara kiiruse piiramiseks, erandite pärssimiseks, ainulaadsete tööde ja kohandatud loogika jaoks. Määratakse tööpõhiselt meetodiga middleware().
  • Voogedastuse sammud. Liides StreamingStep väljastab osi, mis salvestatakse kohe andmebaasi. Korduskatsel antakse varem salvestatud osad ette, et voog saaks jätkuda poolelijäänud kohast. Sobib ideaalselt LLM-i vastuste ja suurte allalaadimiste jaoks.
  • Ühendatav vahemälukiht. CacheFactory tuvastab automaatselt APCu või kasutab selle puudumisel mälusisest vahemälu. Kohandatud taustsüsteemid rakendavad Contracts\Cache. Seda kasutatakse sisemiselt kiirusepiirajate päringute ja järjekorra oleku jaoks.
  • Töörühmad ja aheldamine. Saada töögruppe, millel on then/catch/finally tagasihelistused ja edenemise jälgimine, või ahelda tööd järjestikku, nii et iga järgmine sõltub eelmise lõpetamisest.
  • Püsivad viivitused ja ooteajad. delay() lisab protsessi taaskäivitamise üle elavad viivitused. wait_for_signal(), wait_for_signals(), wait_for_approval(), wait_for_input() ja wait_for_workflow() võimaldavad töövoogudel oodata väliseid sündmusi või teisi töövooge, ilma et PHP peaks töös hoidma.
  • Dünaamiline iga elemendi jaoks. for_each() laiendab töövoo olekust käitusajal leitud harutööde loendi ning toetab lõpuleviimist kõigi õnnestumise, esimese õnnestumise või kvoorumi saavutamise korral.
  • Asünkroonsed töövoo üleandmised. start_workflows() muudab käitusajal leitud üksused sõltumatuteks tipptaseme töövoogudeks, mida saab hiljem oodata.
  • WordPress toimingupäästikud. on_action() seostab tuuma või plugina toimingukonksud püsivate töövoogude käivitamisega, kasutades tingimusi ja idempotentsust.
  • Püsivad artefaktid. Salvesta nimetatud töövooväljundid põhioleku kotist eraldi ning säilita need oleku, CLI kontrollimise, ekspordi ja taasesituse käigus.
  • Töövoo kaitsepiirded. version(), deterministlik definitsiooniräsi, idempotentsed käivitusvõtmed ja töövoo eelarved muudavad agendilaadsete käivituste kontrollimise lihtsamaks ning aitavad vältida nende dubleerimist või märkamatut kontrollimatut käivitumist.
  • Ressursihaldus. Samaaegsusrühmad, kuluühikud, töövoo eelarved ja tööliste vastuvõtt aitavad hoida kulukat agendilaadset tööd määratletud piirides.
  • Sammu kompenseerimine. compensate_with() ja compensate_on_failure() pakuvad tagasipööramise konkse lõpetatud sammude jaoks, kui töövood tühistatakse või ebaõnnestuvad.
  • Südamelöögid. Pikalt kestvad sammud saadavad südamelööke, et aegunud tööde taastamise süsteem ei võtaks aktiivset tööd üle.
  • Töövoo jälgimine. Iga sammu üleminek salvestatakse koos sisendi, väljundi, eelneva ja järgneva oleku, konteksti, artefaktide, osade, vigade ja ajaga; ajas tagasi liikumisega silumiseks kasutatakse workflow_state_at().
  • Paralleelsed sammud. Käivita sammud samaaegselt ja oota enne jätkamist, kuni kõik on lõpetatud.
  • Tingimuslik hargnemine. Liigu varasema oleku põhjal nimetatud sammude juurde, kasutades _next_step.
  • Töövoogude käivitamine. Käivita alam töövooge, mis annavad tulemused tagasi vanemtöövoole.
  • Prioriteedijärjekorrad. Neli taset (Low, Normal, High, Urgent), kasutades tüübikindlaid PHP loendeid.
  • Mitme järjekorraga töölised. Töötle ühes töölises mitut järjekorda ranges prioriteetsuse järjekorras.
  • Kiiruse piiramine. Käsitlejapõhised käivitamispiirangud libiseva ajavahemikuga.
  • Korduvad tööd. Intervallipõhine ja cron-põhine ajastamine seadistatavate kattumispoliitikatega (Allow, Skip, Buffer).
  • Töövoo tühistamine. Tühista töötavad töövood ja käivita registreeritud puhastuskäsitlejad.
  • Olekute kärpimine. Eemalda vanad sammu väljundid automaatselt, et hoida suurte töövoogude olek hallatavana.
  • Tööliste samaaegsus. --workers=N käivitab mitu protsessi ja taaskäivitab need krahhi korral automaatselt.
  • Täielik jälgitavus. Andmebaasilogimine, käsitlejapõhised mõõdikud ja sündmuste veebihaagid.
  • Testimisutiliidid. QueueFake salvestab ühiktestides kontrollimiseks järjekorda saadetud tööd ja töögruppe.
  • PHP atribuudid. #[QueuetyHandler('name')] käsitlejate registreerimiseks ilma seadistusteta.

Kuidas see töötab

Töölised töötavad pikaealises WP-CLI protsessis ja võtavad töid otse kohast MySQL. Järjekorra read, töövoo olek, logid, töögrupid, signaalid ja voogedastatavad osad asuvad kõik kohas MySQL, seega ei lähe orkestreerimise olek töölise taaskäivitamisel kaotsi.

Töövood jaotavad pikaajalise töö sammudeks. Iga samm salvestab väljundi andmebaasi ühisesse olekukotti. Kui PHP sammu keskel katkeb, proovib tööline seda sammu uuesti, kogu varasem olek alles. Sammun piir on üks MySQL-tehing: oleku uuendamine, töö lõpetamine ja järgmise sammu järjekorda lisamine toimub kõik atomaarse toiminguna.

Kood
Workflow: generate_report (3 steps)

Step 0: fetch_data     -> state: {user_data: {...}}
Step 1: call_llm       -> PHP dies -> retry -> state: {user_data: {...}, llm_response: "..."}
Step 2: format_output  -> state: {user_data: {...}, llm_response: "...", report_url: "/reports/42.pdf"}

Workflow: completed

Nõuded

  • PHP 8.2 või uuem
  • WordPress 6.4 või uuem
  • MySQL 8.0+ või MariaDB 10.6+, kuna töölised võtavad töid käsuga SELECT ... FOR UPDATE SKIP LOCKED
  • mysqli või pdo_mysql käituskeskkonnas PHP, mis laadib WordPress ja WP-CLI
  • WP-CLI spetsiaalsete tööliste käivitamiseks koos wp queuety work-iga
  • Tööliste töötluskogumite jaoks laiendused pcntl ja posix PHP (--workers, --min-workers, --max-workers)

Paigaldusjuhised leiad lehelt Getting Started.