İçeriğe geç

İş akışı koruyucu sınırları

Aracı tarzı iş akışları esnektir, ancak yinelenen çalıştırmalar oluşturmayı veya planlayıcının amaçlanandan fazla iş üretmesini de kolaylaştırır. Queuety, bu esnekliği denetimden vazgeçmeden koruyabilmeniz için iş akışı düzeyinde hafif koruyucu sınırlar sağlar.

Çalışan kabulü ve iş başına maliyet meta verilerini kapsayan daha geniş kaynak modeli için Kaynak Yönetimi bölümüne bakın.

İş akışı tanımını sürümleyin

Bir iş akışı tanımına uygulama düzeyinde sürüm etiketi eklemek için version() kullanın:

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

Sürüm, iş akışı durumuyla birlikte saklanır, workflow_status() aracılığıyla gösterilir, wp queuety workflow status tarafından yazdırılır ve iş akışı dışa aktarımlarına eklenir.

Queuety ayrıca her iş akışı çalıştırması için deterministik bir definition_hash saklar. Bu karma değer, serileştirilmiş iş akışı tanımından türetilir ve dağıtım sonrasında devam eden bir çalıştırmanın tam olarak hangi iş akışı yapısını yürüttüğünü belirlemeniz gerektiğinde kullanışlıdır.

Dağıtımı yinelenmeye dayanıklı hâle getirin

Çağıranlar aynı isteği yeniden deneyebilecekse idempotency_key() kullanın:

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

Bir iş akışı daha önce kullanılmış bir anahtarla yeniden dağıtılırsa Queuety, yinelenen bir çalıştırma oluşturmak yerine orijinal iş akışı kimliğini döndürür. Anahtarlar tüm iş akışı adları arasında ortaktır; bu nedenle farklı iş akışlarının aynı anahtarı kullanabileceği durumlarda anahtara iş akışı adını ekleyin.

Bu özellikle şu durumlarda kullanışlıdır:

  • İstemcilerin veya ağ geçitlerinin yeniden deneyebileceği API uç noktaları
  • yinelenen teslimatlar alabilecek webhook tüketicileri
  • harici varlık başına yalnızca bir orkestrasyon çalıştırması oluşturması gereken planlayıcı adımları

Yinelenmeyi önleme anahtarları queuety_workflow_dispatch_keys tablosunda saklanır.

İş akışı bütçeleri belirleyin

Planladığınız sınırı aşan çalıştırmaları başarısız kılmak için iş akışı bütçelerini kullanın:

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

Çalıştırma başarısız olmadan önce tamamlanabilecek iş akışı adımlarının sayısını sınırlar. Bu, dinamik dallanabilen veya _next_step aracılığıyla aynı alana dönebilen iş akışlarını korumak için kullanışlıdır.

max_for_each_items()

Tek bir for_each() adımının genişletebileceği, çalışma zamanında keşfedilen öğe sayısını sınırlar. Bu, bir aracının amaçlanandan çok daha fazla dal işi keşfedebileceği planlayıcı/yürütücü sistemleri için kullanışlıdır.

max_state_bytes()

Herkese açık iş akışı durumunun kodlanmış boyutunu sınırlar. Bu, uzun süren iş akışlarının incelenmesi, dışa aktarılması veya yeniden denenmesi yavaş büyük veri bloklarına dönüşmesini önlemeye yardımcı olur.

max_cost_units()

Tamamlanan adımların tükettiği toplam maliyet birimi sayısını sınırlar. Maliyet birimleri, Queuety iş kuyruğuna eklediği adım veya iş meta verilerinden alınır. Normal kullanıcı işi varsayılan olarak 1, gecikmeler ve beklemeler gibi orkestrasyon yer tutucuları 0 değerini kullanır; işleyiciler config() veya iş özellikleri aracılığıyla daha yüksek pozitif bir değer ayarlayabilir. Sıfır değerini yalnızca bir adım tanımının cost_units ayarı belirleyebilir: 0.

Bu, bir iş akışının aynı alana dönebildiği veya tek başına adım sayısıyla ölçülemeyen biçimlerde maliyetli olan işleri yinelendiği durumlarda kullanışlıdır. Pahalı bir model çağrısını tekrar tekrar çalıştıran planlayıcı, max_transitions() sınırının içinde kalırken yine de amaçladığınız maliyet sınırını aşabilir.

max_started_workflows()

Bir çalıştırmanın start_workflows() veya start_agents() aracılığıyla başlatabileceği üst düzey iş akışı sayısını sınırlar. Sınır, alt iş akışları dağıtılmadan önce denetlenir; böylece bütçeyi aşan bir grubun kısmen oluşturulması yerine üst iş akışı başarısız olur.

Bütçe aşıldığında Queuety, adımı yeniden denemek yerine iş akışını hemen başarısız kılar. Bir istisna: Queuety::signal() bir beklemeyi sonuçlandırırken oluşan geçiş bir bütçeyi aşarsa istisna, signal() çağrısının yapıldığı yere iletilir, sinyal ekleme işlemi geri alınır ve iş akışı beklemeye devam eder.

Koruyucu sınırları gözlemleme

İş akışı durumu şunları gösterir:

  • definition_version
  • definition_hash
  • idempotency_key
  • budget

budget verisi, bayt cinsinden mevcut herkese açık durum boyutu da dahil olmak üzere yapılandırılmış sınırları ve mevcut kullanımı içerir.

Örnek:

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