Liigu sisu juurde

Töövoo kaitsepiirded

Agendipõhised töövood on paindlikud, kuid nendega on ka lihtsam luua duplikaatkäivitusi või lasta planeerijal genereerida kavandatust rohkem tööd. Queuety pakub töövootasemel lihtsaid kaitsepiirdeid, mis aitavad paindlikkust säilitada ja samal ajal kontrolli all hoida.

Töötajate lubamise ja tööpõhise kulu metaandmete üldisema ressursimudeli kohta vaadake Ressursside haldamine.

Töövoo definitsiooni versioonimine

Kasutage version(), et lisada töövoo definitsioonile rakenduse tasemel versioonisilt:

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

Versioon salvestatakse koos töövoo olekuga, see on nähtav workflow_status() kaudu, trükitakse käsuga wp queuety workflow status ja lisatakse töövoo ekspordi hulka.

Queuety salvestab iga töövoo käivituse kohta ka deterministliku definition_hash. Räsi tuletatakse serialiseeritud töövoo definitsioonist; sellest on abi, kui peate pärast juurutamist täpselt tuvastama, millist töövoo kuju pooleliolev käivitus täidab.

Muutke käivitamine korduskindlaks

Kasutage idempotency_key(), kui kutsujad võivad sama päringut korrata:

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

Kui töövoog käivitatakse uuesti juba kasutatud võtmega, tagastab Queuety algse töövoo ID, selle asemel et luua duplikaatkäivitus. Võtmed on kõigi töövoonimede puhul globaalsed, seega lisage võtmesse töövoo nimi, kui eri töövood võivad sama võtit kasutada.

See on eriti kasulik järgmistes olukordades:

  • API lõpp-punktid, mida kliendid või lüüsid võivad uuesti pärida
  • veebihaagi tarbijad, kes võivad saada korduvaid edastusi
  • planeerimissammud, mis peaksid looma iga välise üksuse kohta ainult ühe orkestreerimiskäivituse

Korduskindluse võtmed salvestatakse tabelisse queuety_workflow_dispatch_keys.

Töövoo eelarvete seadmine

Kasutage töövoo eelarveid käivituste nurjamiseks, kui need ületavad kavandatud piiri:

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()

Piirab, mitu töövoo sammu võib enne käivituse nurjumist lõpetada. Sellest on abi töövoogude puhul, mis hargnevad dünaamiliselt või võivad sama piirkonda _next_step kaudu uuesti läbida.

max_for_each_items()

Piirab, mitu käitusajal tuvastatud üksust võib üks for_each() samm laiendada. Sellest on abi planeerija ja täitja süsteemides, kus agent võib avastada kavandatust palju rohkem harutöid.

max_state_bytes()

Piirab avaliku töövoo oleku kodeeritud suurust. See aitab vältida pikaajaliste töövoogude kasvamist suurteks andmehulkadeks, mida on aeglane uurida, eksportida või uuesti proovida.

max_cost_units()

Piirab lõpetatud sammude tarbitud kuluühikute koguarvu. Kuluühikud pärinevad sammu või töö metaandmetest, mille Queuety töö käivitamisel määrab. Tavalise kasutajatöö vaikeväärtus on 1, orkestreerimise kohatäited, näiteks viivitused ja ootamised, kasutavad väärtust 0 ning käitlejad saavad määrata suurema positiivse väärtuse atribuudi config() või töö omaduste kaudu. Väärtuse 0 saab määrata ainult sammu definitsioonis oleva cost_units.

Sellest on abi, kui töövoog võib sama piirkonda uuesti läbida või laiendada igaühe jaoks tööks, mille kulu ei kajastu ainult sammude arvus. Planeerija, mis käivitab kallist mudelikutset korduvalt, võib jääda max_transitions() piiresse, kuid siiski ületada kavandatud kulupiiri.

max_started_workflows()

Piirab, mitu tipptaseme töövoogu võib käivitus alustada käsuga start_workflows() või start_agents(). Piiri kontrollitakse enne alamvoogude käivitamist, seega vanemtöövoog nurjub, loomata osaliselt rühma, mis eelarvet juba ületab.

Eelarve ületamisel nurjab Queuety töövoo kohe, selle asemel et sammu uuesti proovida. Üks erand: kui Queuety::signal() lõpetab ootamise ja sellest tulenev üleminek ületab eelarvet, visatakse erand käsu signal() kutsujale, signaali lisamine tühistatakse ja töövoog jääb ootama.

Kaitsepiirete jälgimine

Töövoo olek näitab järgmist:

  • definition_version
  • definition_hash
  • idempotency_key
  • budget

budget koormus sisaldab seadistatud piiranguid ja praegust kasutust, sealhulgas avaliku oleku suurust baitides.

Näide:

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, ... ]