Autoscaling Controller  ·  View 19 of 37  ·  4 · Runtime

Which Signal Drives the Loop

A declared hierarchy, and how conflicting signals are reconciled inside one interval.

Editable source SVG draw.io All views
Preferred — leads demand Oldest Message Age rank 1 · queued work Concurrency arrival x service Fallback — lags demand Utilization rank 2 · always there SLO Burn Rate rank 3 · slow, noisy Resolve within the interval Fresh Signals Only stale ones drop out Highest Rank Wins for the setpoint Lower Ranks Vote scale-in must agree Result One Proposed Capacity with its driver named Driving Signal Recorded in the journal if fresh if rank 1 stale no lone scale-in Which Signal Drives the Loop — A Declared Hierarchy Queue / topic Application we own Decision point Data store synchronous Conflict inside one interval is resolved by rank on scale-out and by unanimity on scale-in. Being late to add capacity costs latency; being wrong to remove it costs availability. v 1.0 · owner Data & AI Global Practice · date 2026-09

The decision

  • The answer is a hierarchy, not a single signal: rank 1 backlog age or concurrency, rank 2 utilization, rank 3 SLO burn.
  • On scale-out the highest-ranked fresh signal sets the proposal. On scale-in every ranked signal must agree.
  • The driving signal is recorded on the decision, so "what caused this" is answerable per interval.

Why this order

  • Backlog leads demand and exists only for queue-driven targets; concurrency is its equivalent for request-serving ones.
  • Utilization is universally available, lags demand, and is meaningless for I/O-bound work — hence a fallback rather than a default.
  • SLO burn scales what the user actually experiences but is slow, noisy and second order, so it can veto a scale-in and rarely drives a scale-out.

Risks

  • A rank-1 signal going stale silently promotes a lagging signal to driver. The journal records which signal drove, so the degradation is visible rather than inferred from worse behaviour.