Cost & Efficiency 30 Aug 2026 44 min read

Zone-local traffic and the cross-zone bill

How production systems pay for the availability they buy by spreading across availability zones, and what breaks when they route the per-gigabyte cross-zone bill away.

Spreading across three availability zones is billed twice: in standing idle capacity, and at a cent per gigabyte for every crossing. This guide reconstructs, from Slack, DoorDash, Grab, Grafana Labs, Uber, Polar Signals and AWS's own design documents, the five-layer stack every zone-affinity implementation assembles, which layer the cost-driven versions leave out, and what the issue trackers show going wrong. A reader finishes able to decide whether to make a given hop zone-local, what to instrument so the optimisation cannot silently switch itself off, and what the recovery path costs.

The finding that surprised me

Microsoft deleted the charge entirely on 21 May 2024, so a whole body of engineering, a product category and three competing Kafka redesigns exist to route around a pricing decision that one of the three major clouds has already reversed.

What you get out of it

  • Zone-local routing was published first as a reliability pattern, not a cost feature: AWS's Builders' Library derives it from survival odds, (2/3)^N for N regional hops against a constant 2/3 for zonal ones, and mentions the money once at the end.
  • Every published implementation assembles the same five layers, and the cost-driven ones stop at four. The missing layer is the drain, the ability to move all traffic out of a zone in minutes, which Slack budgets at five minutes with 1% granularity and Kubernetes Topology Aware Routing does not have at all.
  • The optimisation disables itself silently. Scaling nine replicas to eleven turns [3,3,3] into [4,4,3] and removes every hint, and there is no default alert on the optimisation being off, only on the outcome.
  • Same-zone routing distributes by endpoint count, not by load. Envoy's maintainers state it plainly in their own 2026 proposal: it 'has no visibility into actual backend load'. Grab needed extra brokers in the zone their consumers happened to cluster in.
  • The headline cloud outages in this corpus were regional, not zonal, so multi-AZ bought nothing against them. Uber measured the event it was provisioning against at 0.23% of the year and cut standing capacity from 2x to 1.3x on the strength of it.

Scope

Why this, now. Three things converged inside fifteen months: Kubernetes renamed and re-scoped its zone-routing option, Kafka is choosing between three competing redesigns whose stated motivation is this one line item, and AWS lost a single availability zone in us-east-1 to a thermal event on 7 May 2026.

What it does not cover. Cross-region traffic and multi-region disaster recovery, internet egress and CDN economics, quorum and replica placement for consensus latency, data residency constraints, and on-premises rack topology.

Open the field guide → Self-contained: it loads nothing at read time, follows your system theme, and prints cleanly.