Ugrás a tartalomhoz

Munkafolyamat-korlátok

Az ügynökszerű munkafolyamatok rugalmasak, de könnyebb velük duplikált futásokat létrehozni, vagy hagyni, hogy egy tervező a szándékoltnál több munkát állítson elő. A Queuety könnyű súlyú korlátokat biztosít munkafolyamat-szinten, így a rugalmasság megőrzése mellett is kézben tarthatja a folyamatot.

A dolgozók felvételét és a feladatonkénti költségmetaadatokat érintő tágabb erőforrásmodellről a Erőforrás-kezelés oldalon olvashat.

Munkafolyamat-definíció verziózása

A version() segítségével alkalmazásszintű verziócímkét rendelhet egy munkafolyamat-definícióhoz:

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

A verzió a munkafolyamat állapotával együtt tárolódik, a workflow_status() segítségével érhető el, a wp queuety workflow status megjeleníti, és a munkafolyamat-exportok is tartalmazzák.

A Queuety minden munkafolyamat-futáshoz determinisztikus definition_hash értéket is tárol. A hash a szerializált munkafolyamat-definícióból származik, és segít pontosan azonosítani, hogy egy telepítés után melyik munkafolyamat-formát hajtja végre a folyamatban lévő futás.

Indítás idempotenssé tétele

Használja a idempotency_key() elemet, ha a hívók újrapróbálhatják ugyanazt a kérést:

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

Ha egy munkafolyamatot olyan kulccsal indítanak újra, amelyet már használtak, a Queuety az eredeti munkafolyamat-azonosítót adja vissza új futás létrehozása helyett. A kulcsok minden munkafolyamatnév között globálisak, ezért vegye bele a munkafolyamat nevét is, ha különböző munkafolyamatoknál előfordulhat ugyanaz a kulcs.

Ez különösen hasznos a következőknél:

  • API végpontok, amelyeket az ügyfelek vagy átjárók újrapróbálhatnak
  • webhook-fogyasztók, amelyek duplikált kézbesítéseket kaphatnak
  • tervezőlépések, amelyek külső entitásonként csak egy vezénylési futást hozhatnak létre

Az idempotenciakulcsok a queuety_workflow_dispatch_keys táblában tárolódnak.

Munkafolyamat-keretek beállítása

A tervezett keret túllépése esetén a futás meghiúsításához használjon munkafolyamat-kereteket:

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

Korlátozza, hány munkafolyamat-lépés fejeződhet be a futás meghiúsulása előtt. Ez hasznos olyan munkafolyamatok védelmére, amelyek dinamikusan ágaznak el, vagy a _next_step segítségével ugyanazt a részt újra elérhetik.

max_for_each_items()

Korlátozza, hogy egyetlen for_each() lépés hány futásidőben felderített elemet bonthasson ki. Ez hasznos tervező/végrehajtó rendszereknél, ahol egy ügynök a szándékoltnál sokkal több ágmunkát deríthet fel.

max_state_bytes()

Korlátozza a nyilvános munkafolyamat-állapot kódolt méretét. Ez segít megakadályozni, hogy a hosszan futó munkafolyamatok nagy, nehezen vizsgálható, exportálható vagy újrapróbálható adatcsomagokká nőjenek.

max_cost_units()

Korlátozza a befejezett lépések által felhasznált költségegységek összegét. A költségegységeket a lépés- vagy feladat-metaadat adja, amelyet a Queuety old fel a munka sorba állításakor. A szokásos felhasználói munka alapértéke 1, a vezénylési helyőrzők, például a késleltetések és várakozások értéke 0, a kezelők pedig a config() vagy a feladat tulajdonságai révén magasabb pozitív értéket állíthatnak be. Csak egy lépésdefiníció cost_units eleme állíthat be 0 értéket.

Ez akkor hasznos, ha egy munkafolyamat ugyanazt a részt újra elérheti, vagy a for-each olyan költséges munkát végez, amelyet önmagában a lépésszám nem tükröz. Egy tervező, amely újra és újra egy költséges modellhívást indít, a max_transitions() kereten belül maradhat, miközben mégis túllépi a tervezett költségkeretet.

max_started_workflows()

Korlátozza, hogy egy futás hány legfelső szintű munkafolyamatot indíthat a start_workflows() vagy a start_agents() segítségével. A korlátot az alárendelt munkafolyamatok indítása előtt ellenőrzi, így a szülő meghiúsul anélkül, hogy részben létrehozna egy keretet túllépő csoportot.

Ha túllépik a költségkeretet, a Queuety azonnal meghiúsítja a munkafolyamatot, ahelyett hogy újrapróbálná a lépést. Egy kivétel van: ha a Queuety::signal() lezár egy várakozást, és az eredményül kapott átmenet túllépi a költségkeretet, a kivétel a signal() hívójához kerül, a jel beszúrása visszagörgetésre kerül, a munkafolyamat pedig tovább vár.

A korlátok megfigyelése

A munkafolyamat állapota a következőket teszi elérhetővé:

  • definition_version
  • definition_hash
  • idempotency_key
  • budget

A budget adatcsomagja tartalmazza a beállított korlátokat és az aktuális használatot, beleértve a nyilvános állapot aktuális méretét bájtban.

Példa:

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