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ą:
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ą:
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:
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_versiondefinition_hashidempotency_keybudget
budget naudingojoje apkrovoje pateikiamos sukonfigūruotos ribos ir dabartinis naudojimas, įskaitant dabartinės viešosios būsenos dydį baitais.
Pavyzdys:
$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, ... ]