Pereiti prie turinio

Darbo eigos apsaugos priemonės

Agentų tipo darbo eigos yra lanksčios, tačiau dėl jų taip pat lengviau sukurti pasikartojančius vykdymus arba leisti planuokliui sugeneruoti daugiau darbo, nei numatyta. Queuety darbo eigos lygmeniu suteikia lengvas apsaugos priemones, kad galėtumėte išlaikyti lankstumą ir kartu neprarasti kontrolės.

Daugiau apie platesnį išteklių modelį, apimantį darbuotojų priėmimą ir kiekvienos užduoties sąnaudų metaduomenis, žr. Išteklių valdymas.

Darbo eigos apibrėžties versijavimas

Naudokite version(), kad prie darbo eigos apibrėžties pridėtumėte programos lygmens versijos žymą:

PHP
Queuety::workflow( 'research_run' )
    ->version( 'research.v2' )
    ->then( PlanResearchStep::class )
    ->then( DraftResearchSummaryStep::class )
    ->dispatch();

Versija išsaugoma kartu su darbo eigos būsena, pateikiama per workflow_status(), parodoma naudojant wp queuety workflow status ir įtraukiama į darbo eigos eksportus.

Queuety taip pat išsaugo deterministinę definition_hash kiekvienam darbo eigos vykdymui. Maiša apskaičiuojama pagal nuosekliai pateiktą darbo eigos apibrėžtį ir praverčia, kai po įdiegimo reikia tiksliai nustatyti, kokios struktūros darbo eiga vykdoma.

Užtikrinkite idempotentinį išsiuntimą vykdyti

Naudokite idempotency_key(), kai iškvietėjai gali pakartoti tą pačią užklausą:

PHP
Queuety::workflow( 'research_run' )
    ->idempotency_key( 'brief:42:research' )
    ->then( PlanResearchStep::class )
    ->dispatch( [ 'brief_id' => 42 ] );

Jei darbo eiga išsiunčiama vykdyti dar kartą su jau panaudotu raktu, Queuety grąžina pradinės darbo eigos ID, užuot sukūrusi pasikartojantį vykdymą. Raktai yra bendri visiems darbo eigų pavadinimams, todėl įtraukite darbo eigos pavadinimą į raktą, jei jį gali naudoti skirtingos darbo eigos.

Tai ypač naudinga:

  • API galiniams taškams, kurių užklausas gali pakartoti klientai arba šliuzai
  • žiniatinklio sąsajų vartotojams, galintiems gauti pasikartojančius pranešimus
  • planavimo žingsniams, kurie turi sukurti tik vieną orkestravimo vykdymą kiekvienam išoriniam objektui

Idempotentiškumo raktai išsaugomi lentelėje queuety_workflow_dispatch_keys.

Nustatykite darbo eigos biudžetus

Naudokite darbo eigos biudžetus, kad nepavyktų tie vykdymai, kurie viršija numatytas ribas:

PHP
Queuety::workflow( 'research_run' )
    ->max_transitions( 20 )
    ->max_for_each_items( 12 )
    ->max_state_bytes( 32768 )
    ->max_cost_units( 40 )
    ->max_started_workflows( 8 )
    ->then( PlanResearchStep::class )
    ->for_each( 'tasks', ExecuteResearchTask::class, 'results' )
    ->dispatch();

max_transitions()

Riboja, kiek darbo eigos žingsnių gali būti užbaigta iki vykdymo nesėkmės. Tai naudinga apsaugant darbo eigas, kurios šakojasi dinamiškai arba gali grįžti į tą pačią vietą per _next_step.

max_for_each_items()

Riboja, kiek vykdymo metu aptiktų elementų gali išplėsti vienas for_each() žingsnis. Tai naudinga planuoklio ir vykdytojo sistemoms, kuriose agentas gali aptikti gerokai daugiau šakų užduočių, nei numatyta.

max_state_bytes()

Riboja užkoduotos viešosios darbo eigos būsenos dydį. Taip ilgai veikiančios darbo eigos neužauga į didelius objektus, kuriuos lėta tikrinti, eksportuoti ar bandyti iš naujo.

max_cost_units()

Riboja bendrą užbaigtų žingsnių sunaudotų sąnaudų vienetų skaičių. Sąnaudų vienetai nustatomi pagal žingsnio arba užduoties metaduomenis, kuriuos Queuety parenka įtraukdamas darbą į eilę. Įprastam naudotojo darbui pagal numatytuosius nustatymus skiriama 1, orkestravimo vietaženkliams, pavyzdžiui, delsoms ir laukimui, naudojama 0, o apdorojimo funkcijos gali nustatyti didesnę teigiamą reikšmę per config() arba užduoties ypatybes. Tik žingsnio apibrėžties cost_units gali nustatyti reikšmę 0.

Tai naudinga, kai darbo eiga gali grįžti į tą pačią vietą arba kartojant kiekvienam elementui atliekamos užduotys, kurių sąnaudos nėra įvertinamos vien pagal žingsnių skaičių. Planavimo procesas, nuolat iš naujo iškviečiantis brangų modelį, gali neviršyti max_transitions(), bet vis tiek viršyti numatytą sąnaudų ribą.

max_started_workflows()

Riboja, kiek aukščiausio lygio darbo eigų vykdymas gali pradėti per start_workflows() arba start_agents(). Riba tikrinama prieš išsiunčiant vykdyti antrines darbo eigas, todėl pirminė darbo eiga nepavyksta nesukūrusi grupės, kuri jau viršytų biudžetą.

Viršijus biudžetą, Queuety iškart nutraukia darbo eigą kaip nepavykusią, užuot iš naujo bandžiusi vykdyti žingsnį. Yra viena išimtis: kai Queuety::signal() užbaigia laukimą, o dėl to įvykęs perėjimas viršija biudžetą, išimtis perduodama signal() iškvietėjui, signalo įterpimas atšaukiamas, o darbo eiga toliau laukia.

Apsaugos priemonių stebėjimas

Darbo eigos būsenoje pateikiama:

  • definition_version
  • definition_hash
  • idempotency_key
  • budget

budget naudingojoje apkrovoje pateikiamos sukonfigūruotos ribos ir dabartinis naudojimas, įskaitant dabartinės viešosios būsenos dydį baitais.

Pavyzdys:

PHP
$state = Queuety::workflow_status( $workflow_id );

$state->definition_version; // 'research.v2'
$state->definition_hash;    // '4c7a...'
$state->idempotency_key;    // 'brief:42:research'
$state->budget;             // [ 'max_transitions' => 20, ... ]