Report

How a Marquee Live-Event Viewer Spike Pushes the CDN Origin-Shield Queue Past Its Ceiling

This is commentary on a class of public, viewer-visible live-streaming failures — failures that originate when a marquee live-event spike — a sports final or a keynote — fans concurrent viewer connection demand into the CDN origin-shield queue at a rate the shield's pre-provisioned ceiling was not sized for, compounding with viewer-driven reconnect storms to peg the shield's queue depth to ceiling while edge egress holds green. It is not a claim of involvement in, or attribution to, any specific incident.

A marquee-live-event-shield-queue-saturation incident is the canonical case of a failure that is invisible to edge egress dashboards and fatal to the late-join cohort. The whole fleet, the whole edge, the whole egress profile can be nominal — and the late-join cohort inside a single marquee broadcast window is sitting through the kind of viewer symptoms that the global mean reads as noise. The signal that catches it has to be shield-tier-shaped. The fix has to be tier-shaped. The reader-rendering loop has to converge inside the broadcast window, before the late-join cohort's start-up time expires, before the cohort churns, and before the sluggish-rebuffer stat rolls into the operator's report unexamined.

Below, the cohort saw, the ranked root-cause walkthrough, how Streamwake caught it, the three-step Detect → Classify → Governed Fix loop with shield pull / ceiling expansion as the autonomous branch and reconnect-throttle as the surfaced-to-humans branch, an explicit closing note on viewer-side close-out vs queue-side close-out, and what the incident changes for next time.

The cohort saw

The first symptom is not on a graph — it is inside the broadcast window's join window. A late join is the one symptom that beats every rebuffer reporting pipeline a player has, because it hits before the player has even decided whether to count a stall. A viewer whose time-to-first-frame drifts from a 1.8s baseline to 8.2s has not yet asked for the second partial segment — they are still waiting on the reader's controller to come back through the shield's back-off curve.

On a marquee live-event spike — a sports final or a keynote — three patterns show up at once:

  • Late join, scoped to the marquee tier. Time-to-first-frame from the marquee cohort (na-east / eu-west marquee fixture or keynote) bucketed, with p50 drifting from a 1.8s baseline to 8.2s and p95 drifting toward >15s. The cohort divergence is on the marquee tier alone — adjacent non-marquee cohorts on the same shield tier are at baseline. The discriminator against the live-event-scale-out-buffering incident (envelope-shaped, not tier-shaped) is that this failure sits on one tier's queue ceiling, not on the marquee cohort's egress profile.
  • Shield queue depth pegged at ceiling. cdn_shield.queue_depth_concurrent climbs from a 0.41 pre-peak baseline to 1.00 of the slot ceiling within a 90-second window. cdn_shield.queue_p99_wait_ms climbs from 0.21s to 4.62s, exceeding the 1.5s slot budget by ~3×. The shield's queue stops accepting viewer fan-in — the cohort member's reconnect storm is now stuck behind an exponentially-growing back-off queue.
  • No request-side error, no segment-side miss. The HTTP 200 ratio on manifest revalidations reads at 100% — the shield is queueing, not erroring. edge.egress_kbps holds at-or-above the expected profile; cdn_shield.segment_leg_cache_hit reads pass. The cohort is delivering traffic; the failure is on the queue leg of the shield tier, not on an HTTP 5xx and not on a segment cache miss.

The viewer-visible shape is therefore tier-shaped, queue-shaped, and HTTP-200-shaped on the wire. It is the inverted image of a transit-failure-to-regional-POP incident (cross-region fan-in on every leg instead of tier-specific on the queue leg only) and the inverted image of an edge cache-warm-up incident (segment-leg-shaped instead of shield-tier-queue-shaped). It is precisely the shape the Streamwake probe set calls origin_shield_queue_saturation, and it is precisely the shape that does not get caught if the team is only watching edge egress, segment-side HTTP-error counts, or replay-origin mean concurrency.

Ranked root-cause walkthrough

The system surfaces three hypotheses when the marquee-tier queue divergence cluster fires. They are ranked top to bottom by confidence — and the dismissive work on the lower two is as load-bearing as the affirmative work on the top one, because dismissing them is what narrows the fix lane from "the egress is fine, what now?" to "the shield tier queue is the move".

Rank 1 — origin shield queue saturation under the marquee viewer spike (confidence ~0.86)

The top hypothesis is the marquee live-event spike has fanned concurrent viewer connection demand into the CDN origin-shield queue past its pre-provisioned ceiling, with viewer-driven reconnect storms compounding the fan-in past the queue's design profile. The signal set is consistent with shield-tier queue saturation:

  • The cohort re-anchors to the marquee tier on first shield queue fan-in. cdn_shield.queue_depth_concurrent climbs to 1.00 of the slot ceiling within a 90-second window — the slot is at ceiling; the queue has stopped accepting fan-in.
  • The shield's queue p99 wait (cdn_shield.queue_p99_wait_ms) climbs from baseline 0.21s to 4.62s, exceeding the 1.5s slot budget by ~3×. The reader-rendering loop binds to the queue wait — the cohort member's reconnect storm is stuck behind the back-off curve, not behind a cache miss and not behind an HTTP error.
  • The shield's replay origin (origin.replay_concurrency_ceiling_pct) reads at 1.00 on the affected tier — the replay origin is playing out the queue at ceiling, with no headroom for additional fan-in without tier expansion.
  • The viewer-impact probe fan-in: cohort.cohort_join_stall_ratio lifts from 0.018 baseline to 0.142 over the same window; cohort.cohort_rebuffer_ratio lifts from 0.012 to 0.078; cohort.cohort_startup_time_p95_ms lifts from 1840ms to 8210ms — the three cohort-side signals are in lockstep with the shield's queue wait time climb, not with the egress profile change and not with the segment leg.
  • cohort.reconnect_storm_ratio reads at 1.00 — the cohort's reconnect fan-in matches the shape of the shield fan-in exactly. The cohort's reconnect behaviour is feeding the shield queue; the queue's saturation is contributing back to the reconnect storm.
  • Edge egress holds at-or-above expected: edge.egress_kbps reads 8642 Kbps; cdn_shield.segment_leg_cache_hit reads pass. The cohort is delivering traffic; the symbol of failure is on the shield queue slot, not on the egress profile.

The shield tier queue slot is the move.

Rank 2 — secondary amplifier, edge POP cache-miss amplification (confidence ~0.41)

The secondary contributor is explicitly named to avoid fixing the wrong lane:

  • The cohort's playback demand peaks in the same marquee window in which the shield queue pegs to ceiling. If a regional cache-miss amplifier were stateful, the warm edge POP on the same cohort would also misfire. The warm edge POP reads pass on cache_hit, and cdn_shield.segment_leg_cache_hit reads pass — the segment leg is green.
  • If the shield queue slot is what pegged first, edge-POP cache-miss amplification is not the cause — it would have moved the cohort's experience in cache-shape (HTTP miss-shape, longer RTT on segment fetch), not in queue-shape (HTTP 200, longer wait on manifest fetch through the shield). The cohort's experience is queue-shaped, not cache-shaped.
  • Fixing only an edge-side cache primer — without touching the shield queue — would have moved segments through slightly more cleanly, but the cohort's experience would still be dominated by the shield queue saturation.

The edge-POP cache-miss amplifier is the dismissed alternate contributor; it is named explicitly so the audit step below knows to log it; it is not the cause.

Rank 3 (dismissed) — encoder bandwidth regression as the dominant cause (confidence ~0.18)

This hypothesis is dismissed with explicit language so the dismissal is auditable:

  • The probe pattern on an encoder bandwidth regression is encoder.bitrate_target_delta_pct failing past the cohort's expected profile and origin.replay_orig_egress_kbps running outside the encoder's egress profile. On this incident, both probes read pass — encoder profile reads clean (0.21 within baseline) and origin egress is shaped correctly (4211 Kbps stable).
  • The discriminator: the affected cohort is delivering traffic above the configured egress profile on the edge leg. The encoder could not be the regression if egress is shaped correctly — and it is.
  • An operator who escalates on encoder bandwidth regression at this point chases a lane that is closed; the fix lane is the shield-tier queue ceiling, not an encoder-side regression.

The dismissal is logged so the playbook doesn't re-test it next incident.

How Streamwake caught it

The catch is shaped by what the failure is not. An origin-shield queue saturation under a marquee viewer spike is the kind of failure that is invisible to edge egress dashboards, invisible to segment-side HTTP-error counts, invisible to a replay-origin mean concurrency aggregate. It is visible only to a probe set that fans in across the shield tier's queue slot ceiling, the shield's queue p99 wait, and the cohort's late-join divergence signals — and that fires on the slot-ceiling breach instead of a throughput-mean breach above it.

Concretely, three slots in the Streamwake probe set are load-bearing here:

  • Shield-tier queue depth + queue p99 wait. Per-tier, per-window shield-slot occupancy and cdn_shield.queue_p99_wait_ms with a fan-in across the cohort's expected join-window profile. When one tier shows queue depth pegging to 1.00 and p99 wait climbing past the slot budget while the others stay at baseline, the fan-in discriminates the tier-specific, queue-shaped nature of the failure.
  • Replay-origin concurrency ceiling. origin.replay_concurrency_ceiling_pct on the affected replay-origin tier measured against the cohort's expected marquee window demand profile. A replay-origin tier pegged at 1.00 is the concurrent indicator that the queue is being played out — the replay-origin cannot add capacity without tier expansion.
  • Cohort-impact probe fan-in. cohort.cohort_join_stall_ratio, cohort.cohort_rebuffer_ratio, cohort.cohort_startup_time_p95_ms, and cohort.reconnect_storm_ratio measured together — the late-join cohort divergence signals are in lockstep with the shield queue wait-time climb. A single late-join metric could not discriminate this incident from a marquee-envelope-shape issue; the cross-lane fan-in within the cohort (join + rebuffer + startup-time + reconnect) is the discriminator that names the lane.

The cross-tier, cross-cohort fan-in discriminates this incident from a transit-failure-to-regional-POP incident (the cross-region fan-in would show origin-side latency on every leg), from a live-event-scale-out-buffering incident (the envelope fan-in would show breach against the marquee capacity envelope, not against the shield's queue slot ceiling), and from a manifest fetch timeout storm (the manifest-leg divergence would appear on a single regional edge POP, not on a marquee-tier-wide queue slot). The fan-in shape is precisely tier-specific, queue-leg-only, slot-ceiling-shaped — and that is the discriminator that names the lane.

The three-step loop: Detect → Classify → Governed Fix

The three-step loop is the same shape across every Streamwake autonomous-response surface. On a marquee-event origin-shield queue saturation incident, the steps are:

Detect

Shield-tier queue fan-in + viewer-impact divergence fan-in converge on the marquee tier's queue slot. The probe set fans in across the shield's queue depth, the shield's queue p99 wait, and the cohort's late-join divergence signals; the affected tier reads above the slot queue because the queue-concurrency ceiling has been pegged, and the cohort reads above the join-window profile because the cohort's reconnect fan-in matches the queue fan-in shape. The cross-lane fan-in within the affected tier closes the failure lane. The probe set is independent of edge egress and segment-side metrics: separate tier, separate cohort, separate verdict, fan-in is the convergence.

Classify

Three ranked hypotheses come out with confidence mass on origin_shield_queue_saturation at 0.86, the alternate amplifier edge_pop_cache_miss_amplification at 0.41, and the dismissible alternate encoder_bandwidth_regression at 0.18. The discriminators against the lower two hypotheses are explicit on the timeline: warm edge POP reads pass on segment-leg cache-hit (rule out cache-miss amplifier), and encoder profile reads pass with origin egress shaped correctly (rule out encoder bandwidth regression).

Governed Fix

Two paired branches, governed — one autonomous under explicit gates, one surfaced-to-humans by default.

  • Pull / expand the shield tier. Raise cdn_shield.queue_concurrency_ceiling and the per-request timeout on the shield tier to absorb the marquee-viewer fan-in inside the cohort window. The fix is autonomous under a confidence-and-cohort-divergence gate (confidence ≥ 0.80 + cohort_divergence_active) and surfaced to humans outside that gate so the operator team reviews the false-positive rate. On this incident, the top-hypothesis confidence (0.86) and the cohort divergence (join_stall_ratio 0.142) clear the gate — the agent emits pull_origin_shield_to_expanded_tier and raise_cdn_shield_queue_concurrency_ceiling autonomously.
  • Throttle reconnect storms. Apply viewer-side reconnect backoff / jitter tuning plus connector / segment re-fetch throttle so the cohort's reconnect fan-in drops below the shield's tolerance. Surfaced to humans by default — governed, because the change is viewer-visible (reconnect cadence shapes the cohort's join experience directly). The throttle is configured, not probe-driven, so the agent holds off emitting and the viewer-platform team owns the change for the next marquee broadcast window.

The fix lane is "shield-tier queue, viewer-side reconnect cadence". It is not "edge egress tier", "encoder ladder", "DRM shard warmup", or "manifest cadence". The loop keeps that discipline explicit and closes only the lane that the probe set has confirmed.

Verification: viewer-side close-out, not queue-side

The most important caveat in this postmortem is that the origin-shield queue returning to baseline is geometric close-out, not viewer-side close-out. The actual close-out signal is the late-join cohort's:

  • cohort.cohort_join_stall_ratio within tolerance over the next same-length cohort window
  • cohort.cohort_rebuffer_ratio within tolerance over the same window
  • cohort.cohort_startup_time_p95_ms within tolerance over the same window

A fix whose audit step closes on 'cdn_shield.queue_depth_concurrent returned to its pre-peak baseline' is a fix that didn't reach the cohort. The shield queue can normalize as replay concurrency slackens without the cohort's reconnect posture having been corrected — which would mean the next marquee spike pegs the queue again on the same lane. The audit step on this incident writes the close-out signal into the playbook as viewer-side, not queue-side, with "queue normalized" ≠ "viewers are getting green playback" pinned in front of every fix.

What we learned

Three things shifted in the playbook after this incident:

  • The shield queue reaches the cohort through the slot ceiling, not the egress profile. The temptation on a marquee viewer spike is to scale the CDN tier (raise edge egress, raise cache TTL, raise the player ladder) because that fix has shorter lead time. The cohort's experience is dominated by the shield queue wait, not by the egress profile — and scaling egress without scaling the shield slot just means the cohort delivers more traffic into a slot that is already at ceiling. The shield slot is the move on this lane.
  • The marquee-vs-adjacent-tier fan-in is the discriminating signal. Two probes could catch this incident — a global queue-mean-depth aggregate, or a tier-scoped shield-queue-ceiling fan-in. Only the fan-in is decisive on the failure lane, because the failure is by definition tier-shaped on the queue slot only. A median dashboard that smooths across tiers will catch the symptom and miss the lane; the tier-scoped fan-in sees the breach at the slot boundary.
  • Recovery is verified viewer-side, not queue-side. Two close-out signals could be applied to this incident — "did the shield queue return to baseline?" or "did the late-join cohort's join_stall, rebuffer, and startup_time clear tolerance?". Only the viewer-side signal is the actual close-out, because the cohort's experience is dominated by the queue wait and not by the queue depth. The audit step on this incident writes close-out into the playbook as a cohort-side window, not a shield-queue-side window.

The three-step loop — Detect, Classify, Governed Fix — applies in the same shape to every Streamwake autonomous-response surface: the discriminating signal is what changes between failure classes (here: shield-tier queue ceiling + viewer-side reconnect posture), the loop itself does not.

Read the next

For the full Incident Lab writeup with the ranked hypotheses, the governed-action split (autonomous pull / expansion vs surfaced-to-humans reconnect-throttle), the ten-event timeline, and the explicit close-out-as-viewer-side caveat, see the Origin shield queue saturation during a live-event viewer spike postmortem (synthetic). For the player-visible sister triaging — the regression that looks like an ISP problem but is a CDN problem (and the reverse) — see the ISP congestion vs CDN failure writeup. For the manifest-timeout variant at a single regional edge POP before peak, see Manifest fetch timeout storm at a regional edge POP. For the marquee-envelope-shape sibling — capacity envelope breached under a marquee viewer storm — see Live event scale-out buffering. For the CMAF low-latency partial-segment cache warm-up variant on a freshly activated edge cohort, see the CMAF low-latency edge cache warm-up postmortem. For the full editorial library of incident writeups and the Incident Lab hub, start at the hub index.