Explainer10 min read

Delivering AI models globally is a systems problem

In brief

Training gets attention. Reliable delivery is where architecture becomes real.

Training creates a capability. Delivery turns that capability into a product people can depend on across regions, networks, workloads, and failures. The model may be the most sophisticated component in the stack, but the user experiences the whole request path: authentication, routing, queuing, inference, streaming, storage, and recovery.

What does global AI delivery require?

Direct answer: Global AI model delivery means serving one model product across regions while preserving policy, capacity limits, stream behavior, and failure semantics. A reliable design filters destinations by hard constraints, ranks eligible regions by live conditions, admits only work the system can finish, and gives clients explicit outcomes for success, degradation, interruption, or refusal.

What matters most

  • Filter for residency, model, and safety requirements before optimizing latency.
  • Protect capacity with bounded queues, admission control, and honest rejection.
  • Treat streaming, cancellation, and retry as one client-visible contract.
  • Measure the full request path and rehearse regional failure before launch.

That distinction matters once usage leaves a single region. A request can reach the nearest data center and still wait behind a saturated GPU pool. A healthy model server can still produce a broken experience if the stream stalls at an edge proxy. A fast fallback can still be wrong if policy forbids the request from leaving its home geography.

The practical job is not “put the model in more places.” It is to make a chain of constrained systems behave like one understandable service. The projects in Systems follow the same rule: make constraints and recovery paths visible.

01 / ROUTEChoose an eligible region
02 / ADMITProtect finite capacity
03 / STREAMMake progress visible
04 / RECOVERFail without surprise

The useful unit of design is the complete request journey, not an isolated inference server.

Start with the request, not the map

A global architecture becomes easier to reason about when every request passes through explicit decisions. The exact services vary, but the questions do not.

  1. Identify the request. Authenticate the caller, resolve its account and policy, and assign a stable request ID.
  2. Determine eligibility. Filter regions by data residency, model version, hardware capability, safety configuration, and customer tier.
  3. Choose a destination. Compare live queue depth, recent latency, network health, and the cost of moving input or context.
  4. Admit the work. Reserve capacity or reject early. An honest refusal is better than accepting work that will time out in a hidden queue.
  5. Execute and stream. Load the required state, run inference, send incremental output, and observe cancellation or backpressure.
  6. Finalize. Persist only what policy permits, record usage, release reservations, and emit a terminal status clients can interpret.

This flow separates two concerns. The control plane decides where work may run and distributes configuration, model versions, quotas, and policy. The data plane carries prompts, tokens, tool results, and responses. Keeping that boundary clear limits the blast radius of control-plane trouble: an unavailable configuration service should not automatically terminate healthy in-flight inference.

The nearest region is not always the fastest

Geographic routing is a useful default, not a complete strategy. Network round-trip time is only one part of user-visible latency. Queue delay, model cold starts, prefix-cache availability, output length, and accelerator contention can dominate it.

A production router should first build an eligible set, then rank the candidates. This order prevents a common mistake: optimizing latency before enforcing hard constraints. Residency, contractual isolation, model availability, and safety policy are filters. Load and proximity are scores.

A simple routing decision

Suppose Region A is 25 milliseconds closer but has a six-second estimated queue. Region B has the same approved model, satisfies residency rules, and has spare capacity. Region B is the better choice even though the network path is longer. If Region B is outside the permitted boundary, however, it is not a fallback at all.

Use live signals carefully. A router that reacts to every small latency change can send traffic back and forth, creating instability in otherwise healthy regions. Smooth measurements over short windows, add a penalty for switching, and reserve headroom. The goal is not to select the theoretical best region every second. It is to make stable, policy-correct decisions under incomplete information.

Routing should answer two separate questions: where is this request allowed to run, and which allowed destination is most likely to finish well?

Admission control is part of reliability

Inference capacity is finite, expensive, and uneven. Without admission control, overload appears as growing queues, longer timeouts, abandoned streams, and repeated client retries. Each retry adds more load to a system that is already behind.

Set limits at more than one level. A global quota protects the service. Regional budgets keep one location from absorbing every request. Per-account limits prevent a noisy tenant from consuming shared capacity. Model-specific pools stop a large batch workload from starving an interactive endpoint.

The admission decision should consider predicted work, not just request count. A short classification prompt and a long document generation request are not equivalent. Useful estimates can include input tokens, maximum output tokens, model size, tool-use allowance, and current tokens-in-flight. They will be imperfect, but even rough work-aware accounting is better than pretending every request costs one unit. The ordering tradeoffs continue in What scheduling algorithms teach us about serving LLMs.

Overload optionWhen it fitsWhat the client needs
Queue brieflyInteractive traffic with a bounded waitDeadline awareness and an honest queue estimate
Move regionsAn eligible destination has healthy spare capacityOne logical request ID, deduplicated results, and consistent charging
DegradeA smaller model or reduced feature set is acceptableExplicit response metadata describing the change
DeferBatch work can complete asynchronouslyA durable job ID, status, and cancellation path
RejectThe deadline or policy cannot be metA retryable or terminal error with backoff guidance

Capacity protection is not an internal optimization. It is how the service keeps a small overload from becoming a global outage.

Streaming is a protocol, not a loading animation

For generation, time to first useful output often shapes the experience more than total completion time. Streaming lets the user see progress, start reading, or cancel work that is heading in the wrong direction. It does not reduce the computation required, and it introduces its own distributed-systems problems.

Every layer must preserve stream semantics, including the reconnection and event-ID behavior defined for HTTP event streams: gateway timeouts, proxy buffering, connection limits, client backpressure, and mobile network changes. The server needs to notice when the client disconnects so it can stop generating and release capacity. When a terminal event arrives, the client can distinguish success, cancellation, and policy interruption. Unexpected EOF, disconnect, or timeout must be treated as an unknown transport outcome and reconciled through request status before retrying.

Retries require special care. If a connection breaks after partial output, blindly replaying the request may double the charge or produce a different continuation. Keep one idempotency key stable for the logical request, assign a distinct attempt ID to each execution, and track whether work started. Then define whether a client may resume, restart, or only fetch the final stored result. “Retry” is not one behavior; it is a product contract.

Keep state close, but know which state

Model weights are large, but they are not the only state affecting placement. A request may also depend on conversation history, retrieved documents, tenant adapters, prompt templates, tool credentials, and cached prefixes and KV state. Moving all of that across an ocean can erase the benefit of spare compute.

Classify state by lifetime and sensitivity. Immutable model artifacts can be replicated and verified ahead of traffic. Short-lived inference caches can be rebuilt and should not become a recovery dependency. Conversation or retrieval state may need regional persistence and encryption. Credentials should be exchanged for narrow, short-lived capabilities rather than copied into a request envelope.

Cache hits are a routing input, but they should not override policy or health. Prefer affinity while it remains useful; break it when the attached region is overloaded. A cache is an acceleration, not a promise that makes the system immovable.

Design failure as a named state

Global systems do not fail only as “up” or “down.” They become slow, partitioned, stale, partially deployed, or capacity-constrained. Reliable delivery begins by naming those states and deciding what the user sees.

Failure modeDesigned response
Region lossStop new admissions, drain or mark in-flight work, and reroute only requests whose policy and idempotency rules allow it.
Queue saturationShed low-priority work, defer batch jobs, and return bounded retry guidance before gateway timeouts create a retry storm.
Model mismatchRefuse the route or use an explicitly approved fallback. Never silently mix versions inside an experiment or regulated workflow.
Stream interruptionRecord the terminal reason, cancel compute when possible, and expose whether the result can be resumed, fetched, or restarted.
Control-plane outageContinue with last-known-good policy for a short, defined window. Fail closed when the decision cannot safely be made from cached configuration.

Consider a practical incident: one region is reachable, but its accelerator pool has stopped making progress. Basic health checks still pass. If global routing watches only HTTP availability, it continues sending traffic into a black hole. Progress-based health, including queue age, token production, completion rate, and admission success, detects the real failure. The router removes the region gradually, preserving headroom elsewhere instead of shifting the entire load in one burst.

Observe the journey, not just the server

Averages hide the users who suffer most. Break latency into stages and inspect distributions by region, model, account tier, input size, output size, and route decision. At minimum, record edge latency, authentication time, routing time, queue time, model load time, time to first token, generation rate, total time, and terminal status.

Carry one trace context across the edge, router, admission service, model server, and billing path. Add an attempt ID when a request is retried or moved. Structured route metadata should explain why a destination was chosen without logging sensitive prompt content.

SignalQuestion it answersWarning pattern
Queue-time percentilesAre we admitting more work than a pool can finish?The tail rises while compute time stays stable
Time to first tokenDoes the service feel responsive?One region regresses after a routing or proxy change
Tokens per secondIs active inference making expected progress?Throughput falls with constant request shape
Cancellation rateAre users abandoning slow or poor responses?Cancellations cluster after long queue delays
Fallback rateHow often are users receiving a degraded path?A “temporary” fallback becomes the normal route
Cost per successful requestAre optimizations improving delivered value?Retries or unused output grow without more successes

Optimize cost and latency together

The cheapest accelerator-hour is not necessarily the cheapest request. A distant, underused pool may add network time and reduce cache locality. Aggressive batching can raise hardware utilization while hurting interactive latency. Keeping every model warm in every region reduces cold starts but pays for idle replicas.

Make the tradeoff visible with a small set of service classes. Interactive requests can favor time to first token and reserve headroom. Batch requests can use larger batches, flexible deadlines, and lower-cost windows. Premium or critical traffic can receive stricter availability targets. The architecture stays shared, while scheduling policy reflects the actual value of time.

Measure cost against successful outcomes: compute consumed, cross-region transfer, cache storage, retries, and output generated after the client disconnected. A utilization improvement that increases abandonment is not an improvement. Neither is a latency win that requires permanently idle capacity in every location.

Roll out globally in controlled steps

A model deployment changes more than weights. Tokenization, memory use, output length, safety behavior, and tool-calling patterns can all shift capacity or failure assumptions. Treat model and serving changes as coordinated releases.

  1. Validate artifacts, configuration, and policy in one non-critical pool.
  2. Shadow representative traffic without returning the result to users.
  3. Send a small canary slice and compare latency, errors, output volume, and cost.
  4. Expand region by region while retaining the previous version and a tested rollback path.
  5. Run a controlled failure exercise: remove a pool, interrupt streams, or make the control plane unavailable.
  6. Promote only after the system recovers inside the intended user-facing limits.

A rollback is credible only if capacity for the old version still exists and schemas remain compatible. Write that requirement into the rollout plan before the new version receives traffic.

A useful definition of “global”

Global delivery does not mean every model runs in every region. It means the product has a deliberate answer for users in every supported location: an eligible route, a bounded wait, an explicit degraded mode, or a clear refusal. The answer can vary by model and customer, but it should never depend on accidental infrastructure behavior.

Before adding the next region

  • Can we explain every hard routing constraint and every ranking signal?
  • Do clients know what to do after rejection, partial output, and cancellation?
  • Can we see queueing, inference progress, retries, fallbacks, and cost per success?
  • Have we tested failover without assuming infinite capacity in the destination?
  • Can we roll back the model and its serving configuration independently?

Sources and further reading

A globally delivered model is a chain of promises: route correctly, admit honestly, show progress, preserve policy, and recover predictably. The model supplies the capability. The system earns the trust.

Continue reading

Related articles.

01Build log

Agent Evals Need Decisions, Not Essays: Building with Jev

I built a small Jev evaluator to see what changes when models return typed judgments and code owns the final pass, review, or fail decision.

Sep 21, 202610 min read
02Architecture note

What scheduling algorithms teach us about serving LLMs

Fairness, throughput, and tail latency are old systems problems wearing new AI clothes.

Jul 11, 202610 min read
03Build log

AI-first does not mean AI everywhere

Start with the problem, simplify the system, and use AI only where it changes the outcome.

Jun 12, 202611 min read