Kihagyás

Reliability, Scaling and Production Runtime

Egy production agent runtime long-running, failure-prone és side-effecting work execution platformja. Ugyanazokra a concernökre van szüksége, mint bármely durable job-processing rendszernek: queue, state persistence, retry semantics, idempotency, concurrency control, backpressure, observability és isolation.

Hasznos production shape:

API / Event / Scheduler
        ↓
Run Service
        ↓
Durable Queue
        ↓
Worker Pool
        ↓
Agent Runtime
   ├── State Store
   ├── Policy/Budget
   ├── Context Builder
   ├── Model Gateway
   └── Capability Layer
        ↓
External Systems

A worker process disposable. A run state nem az.

Synchronous vs asynchronous run

Rövid read-only interaction lehet synchronous:

request
 ↓
model/tool/model
 ↓
response

Asynchronous execution felé érdemes menni, ha a task:

tens of seconds or minutes
human approvalra vár
external systemre vár
many tools-t használ
survive client disconnect kell
retry/checkpoint kell
substantial budgetet fogyaszt

Ilyenkor az API run-t indít és run_id-t ad vissza:

POST /runs
→ 202 Accepted
→ run_id = run_123

Client pollolhat, eventre subscribe-olhat vagy callbacket kaphat.

Stateless worker, durable run

Worker induláskor canonical state-et töltse be.

Worker crashes
   ↓
queue lease expires / task redelivered
   ↓
new worker loads latest checkpoint
   ↓
reconciles uncertain side effects
   ↓
continues

Ha a run csak process memoryban él, deployment vagy crash execution correctnesset veszít.

Queue semantics

Sok queue at-least-once deliveryt ad:

one logical step
may be delivered more than once

Ezért worker ne feltételezzen exactly-once executiont.

Szükséges lehet:

step IDs
idempotency keys
state versions
completed-step records
side-effect reconciliation

Idempotent step execution

load run state
 ↓
check step_id not already completed
 ↓
acquire lease / compare state version
 ↓
execute
 ↓
persist result + new state atomically where possible

External writehoz provider-supported idempotency keyt használj, ha van.

Ha request timeoutol, először derítsd ki, megtörtént-e a side effect, mielőtt retry-olnád.

Lease és worker ownership

Worker temporary lease-szel birtokolhat run/step executiont:

lease_owner
lease_expires_at
state_version

Worker death után más worker resume-olhat lease expiry után. Kerüld az infinite distributed lockot manual cleanup szükséglettel.

Optimistic concurrency

Callback, approval és worker race-elhet.

Worker reads state version 20
Human cancels run → version 21
Worker writes based on version 20

Az update bukjon meg, worker reloadolja state-et, és ne „élesszen újra” cancelled runt.

Waiting state

Várakozás közben ne tarts életben workert/model loopot.

RUNNING
  ↓
WAITING_FOR_APPROVAL

Persist state, release compute.

Approval event:

Approval event
  ↓
queue resume message
  ↓
worker reloads state
  ↓
revalidates
  ↓
continues

Ugyanez CI completion, webhook és external event esetén.

Retry architecture

Retry a megfelelő layer felelőssége.

Transport/provider retry

HTTP 503
connection reset
rate limit

Adapter/model gateway bounded retryt végezhet jitterrel.

Capability/domain retry

Conflict esetén lehet, hogy state-et kell újraolvasni ugyanazon request megismétlése helyett.

Agent-level retry/replan

Failed strategy új reasoningot igényelhet.

Kerüld a nested retry explosiont:

HTTP client retries 5×
adapter retries 5×
worker retries 5×
agent retries 5×

Ez 625 attempt is lehet. Retry budgetek explicit compose-oljanak.

Backoff és jitter

Transient failure esetén bounded exponential backoff + jitter:

1s
2s
4s
8s
...
max delay

Jitter megakadályozza, hogy outage után minden worker egyszerre retry-oljon.

Rate limiting

AI system nem csak CPU-val limitált.

requests/minute
tokens/minute
concurrent model calls
provider quotas
external API quotas
sandbox capacity
per-tenant budget

Runtime a provider failure előtt kontrollálja a terhelést.

Backpressure

Ha:

incoming work > workers/provider capacity

queue depth nő.

Policy kell:

queue limits
priority classes
per-tenant fairness
admission control
load shedding
max waiting time

Ne fogadj végtelen autonomous worköt abban bízva, hogy majd utoléri magát a worker pool.

Execution budgets

Budgets reliability concern is:

max model calls
max tool calls
max wall-clock duration
max tokens
max dollar cost
max retries
max worker fan-out

Hard limitet runtime enforce-ol, nem a model „emlékszik rá”.

Provider fallback

Fallback javíthat availabilityn, de behavior változhat.

Primary model unavailable
        ↓
Fallback model

Automatic fallback előtt compatibility requirement:

structured output support
tool calling
context window
latency
safety policy
quality threshold
region/data policy

High-risk write workflow ne essen vissza automatikusan inkompatibilis cheap modelre.

Circuit breaker

Repeated provider failure esetén ne hammereld tovább:

CLOSED
 ↓ repeated failures
OPEN
 ↓ cooldown
HALF_OPEN
 ↓ probe
CLOSED / OPEN

Bulkhead és failure isolation

Egy rossz integration ne foglalja le a teljes worker poolt.

Lehet:

separate queue per workload class
separate worker pool for code execution
per-tenant concurrency limits
provider-specific concurrency pools
separate high-risk execution service

Például slow browser tool ne blokkolja az összes simple read-only runt.

Scaling model

Sok agent workload I/O-bound:

waiting for model
waiting for tools
waiting for retrieval
waiting for APIs

Async concurrency hasznosabb lehet, mint CPU-heavy worker process.

OCR, embeddings, code execution vagy local model külön CPU/GPU poolt igényelhet. Mérd a bottlenecket service split előtt.

Modular monolith és scaling

Modular monolith horizontálisan is scale-elhető:

same application image
├── API replicas
├── worker replicas
└── scheduler

Queue vagy agent worker miatt még nem kell microservice.

Service extraction jó ok:

independent scaling profile
security/isolation boundary
separate availability requirement
separate ownership team
different deployment cadence
special runtime dependency

Version pinning long runnál

Run indulhat deployment előtt és resume-olhat utána.

Persistáld:

runtime_version
skill_version
policy_version
model_profile
context strategy version

Majd explicit döntés kell, hogy old run:

continue with compatible current code
resume using pinned behavior
migrate state
or fail safely

Approvalra váró run szabályai ne változzanak csendben félúton.

Graceful shutdown

Worker deploymentkor:

stop accepting new work
 ↓
finish/checkpoint current step
 ↓
release lease
 ↓
terminate

Forced shutdown után durable state-ből más worker recoveryzhessen.

Observability és SLO

Metric példák:

run success rate
p50/p95/p99 run latency
queue wait time
steps per run
model calls per run
tool failure rate
retry rate
approval wait time
cost per successful run
provider error rate
budget-exhausted rate
stuck-run count

SLO workload classonként legyen. Chat answer és 20 perces investigation más latency expectation.

Unknown outcome example

Run step: create GitHub issue
        ↓
request sent
        ↓
timeout before response
        ↓
state = OUTCOME_UNKNOWN
        ↓
reconciliation query using idempotency/reference
        ├── issue exists → record success
        └── no issue → safe retry

Ez jobb, mint tool failed → retry.

Cost-aware scheduling

simple classification → small model
complex architecture review → stronger model
bulk offline summarization → batch queue
interactive request → latency-priority queue

Cost routing explicit policy legyen, ne random model self-selection.

Common anti-patternök

  • Run state worker memoryban.
  • Long-lived polling loop waiting alatt.
  • Exactly-once assumption queue mellett.
  • Nested retry explosion.
  • Infinite queue growth admission control nélkül.
  • Automatic fallback bármilyen modelre.
  • Microservice bottleneck nélkül.
  • Version metadata hiánya long-run resume-nál.

Engineering takeaways

  1. Run state durable legyen, worker disposable.
  2. Long-running workhöz queue/event-driven resume jobb, mint életben tartott loop.
  3. At-least-once delivery mellett idempotent/reconcilable side effect kell.
  4. Retry ownership explicit és bounded legyen.
  5. Concurrency, rate, cost és execution budget deterministic enforcementet igényel.
  6. Circuit breaker, backpressure és bulkhead izolálja provider/tool failure-t.
  7. Mért bottlenecket scale-elj; modular monolith is tud külön API/worker replicát.
  8. Long runhoz persistáld a behavior/version metadata-t.
  9. Workload-class specifikus SLO kell.
  10. Reliability architecture az agent design része, nem promptok után hozzáadott infrastructure extra.