Skip to content

Architecture and migrationGuide

Multi-region AI traffic: latency, quotas and data location

Multi-region means four different things for AI traffic: surviving a regional outage, finding more quota, answering faster, and keeping data in a jurisdiction. They pull in different directions. This guide separates them and shows which control each one needs.

By INFRO Editorial

Published

8 min read

Glowing amber request paths radiating from a central hub node to surrounding provider nodes on a dark ground, representing AI traffic spread across regions

In short

Decide first why you want more than one region. Availability and quota call for a second connection in another Region or provider behind one route with failover; latency calls for measuring every hop before moving anything; data location is set at the provider, by deployment type, inference profile or residency project, and every fallback target has to satisfy it too. Gateway-level regional processing is a separate guarantee, and in INFRO it is on the roadmap, not shipped.

Key takeaways

  • Availability, quota, latency and data location are four goals; name yours before choosing a design.
  • A request has up to five locations: client, gateway, provider endpoint, processing region, and stored records.
  • Provider controls decide where inference runs: Azure deployment types, Bedrock inference profile prefixes, OpenAI residency projects.
  • Global options usually offer the most capacity and the least location control.
  • Every failover target must meet the same location policy as the primary, or failover quietly moves the data.

"We need to be multi-region" usually arrives as one requirement and turns out to be four. A reliability review wants the feature to survive a regional outage. A capacity plan wants more tokens per minute than one Region grants. A product manager wants faster answers for users on another continent. A legal review wants personal data processed inside a jurisdiction.

Each of those is a legitimate goal, and each needs a different control. Worse, they conflict: the option with the most capacity is often the one with the least control over location, and a failover target added for availability can move data somewhere the legal review never approved. Separate the goals before you design anything.

Why do you want more than one region?

  • A provider or Region outage must not stop the featureTwo connections in different Regions or providers, one route, failover.
  • One Region's quota is too smallSplit load with a weighted route across deployments or accounts.
  • Users far from your provider endpoint wait too longMeasure first: the gateway hop and the provider endpoint both add distance.
  • Data must stay in a jurisdictionPin processing at the provider, and review every fallback target. INFRO regional processing is roadmap.
Start from the reason. Each branch leads to a different control, and only the last one is about where data is processed.

Where is a request, exactly?

For a request that goes through a gateway to a hosted model, there are up to five locations worth naming. Most multi-region confusion comes from treating them as one.

  1. 1 · client

    Your application's region
    Where the request starts. You choose it.
  2. 2 · gateway

    INFRO on Cloudflare
    Enters at the nearest edge; the Worker is placed near its primary database in Frankfurt. A performance setting, not residency.
  3. 3 · endpoint

    The provider endpoint you connected
    An Azure resource, a Bedrock Region, api.openai.com, or your own server.
  4. 4 · processing

    Where the provider runs inference
    Set by the provider product: deployment type, inference profile or data residency project.
  5. 5 · records

    What INFRO stores
    Request metadata always; payloads only if you opt in. No regional pinning today: residency is roadmap.
Five places a request can be said to be. Provider controls govern layer 4; your gateway's own guarantees govern layers 2 and 5.

Layer 4 is the one most regulations care about, and it is set almost entirely at the provider. Layer 3, the endpoint you call, is not the same thing: an Azure resource in an EU region with a Global deployment may still process prompts in any Azure region1.

Goal 1: availability across regions

A regional outage at a provider affects everything routed to that Region. Microsoft notes that with Global Standard and Data Zone Standard deployments, "if the primary region experiences an interruption in service, all traffic initially routed to this region is affected"1. The remedy is a second, independent place to send the request: a deployment in another Region, an account at another provider, or both.

What makes the second target useful is independence. Two deployments behind the same quota, the same account policy and the same model version share more failure modes than two different providers do. And the second target has to be proven, not assumed: disable the primary in a drill and confirm the standby answers.

Goal 2: more quota than one Region grants

Provider quotas are regional. Azure assigns quota per region, per model and per deployment type, in tokens per minute, and its guidance for workloads that need more than one deployment supports is to "spread requests across multiple deployments or regions"2. Bedrock's bedrock-runtime quotas are per model, per Region, with on-demand and cross-Region inference counted separately3.

The provider-managed alternative is a global option. Azure's Global Standard "provides the highest default quota and eliminates the need to load balance across multiple resources"1; Bedrock's global inference profiles route to any supported commercial Region4. Both buy capacity by giving up control of layer 4. If location does not matter for a workload, that is often the simplest answer. If it does, spread load across regional deployments yourself.

Goal 3: latency for distant users

Latency is where intuition fails most often, because a model call's time is dominated by the model: queueing, prompt processing and token generation. Network distance matters, but it is usually a smaller share than it is for an ordinary API call, and it can be spent in places that are not obvious. A gateway is one more hop, and where it runs matters as much as where the provider runs.

Measure before moving anything. From the client, record time to first token and total time per provider endpoint. Then compare with the provider-side timing where one is available. Moving a workload to a nearer Region only helps if distance, not generation, is where the time goes.

Goal 4: keeping data in a jurisdiction

Each provider offers its own control over where inference runs.

Provider controlKeeps inference insideSet where
Azure Data Zone StandardThe US, EU or APAC data zoneDeployment type on the deployment
Azure StandardThe Azure geographyDeployment type on the deployment
Azure Global Standard○Any Azure regionDeployment type on the deployment
Bedrock geo profile (us., eu.)The profile's geographyThe model id you send
Bedrock global profile○Any supported commercial RegionThe model id you send
OpenAI data residency projectUS, Europe or UAE for processing; more regions for storage onlyProject setting and regional domain
Self-hosted serverWherever you run itYour infrastructure
Where each provider lets you pin processing, as documented on 2026-09-29. None of these is set by the gateway; all of them are set on your provider account.
  • Azure OpenAI sets it by deployment type. Data Zone deployments process prompts and responses only within the US, EU or APAC data zone; Standard keeps processing within the chosen Azure geography; Global may process in any Azure region. Data stored at rest remains in the designated geography for all types1.
  • Amazon Bedrock sets it by the model id you send. A geographic inference profile keeps routing within a geography such as the US or EU; a global profile routes to any supported commercial Region4. CloudTrail records the Region that processed each cross-Region request4.
  • OpenAI sets it per project. Data residency is a project configuration with regional domains such as eu.api.openai.com; regional processing is offered for the US, Europe and the UAE, while several other regions offer storage only, and non-US regions require approval for abuse-monitoring controls and a retention amendment5.

Availability of a location option differs by model, too. On Bedrock's bedrock-runtime endpoint, GPT-5.6 Sol is offered through a US geographic profile or a global profile; in the EU Regions the model card lists only global inference for it6. A location policy therefore has to be checked per model, not per provider.

The rule that ties this to failover: every target in a chain must satisfy the same location policy as the primary. A route that falls back from an EU Data Zone deployment to a global profile keeps the feature up by moving the data. If that is acceptable during an outage, write it down as a decision. If it is not, the fallback has to be another in-zone target, or an error.

Multi-region routing with INFRO today

INFRO calls the provider accounts and deployments you connect, so layer 4 is governed by the provider settings above, on your accounts, under your agreements (EU compliance). What INFRO adds is the chain: several connections, one name, and failover before the first token.

  • One connection per regional deployment or account. An Azure connection names one resource; a Bedrock connection names one Region; the model id you map decides geographic or global processing (connect a provider).
  • A route per workload. priority for a primary with in-policy standbys, weighted to split load across regional deployments; a target at weight 0 is a standby that never takes a first attempt (routes).
  • Scoped by environment. A connection or route scoped to production is invisible to a key that does not name that environment, which keeps a staging key from reaching production deployments (connect a provider).
  • Evidence per request. Each record names the connection that served and every failed attempt, so an audit can show which Region-bound deployment answered (request traces).
  1. Day 0Second connection addedDeployment or account in another Region, weight 0: a standby that takes no first attempts.
  2. Day 1Failover drillDisable the primary connection; confirm the standby serves and the record names it.
  3. Day 2Small shareGive the second target a small weight and compare latency and errors per connection.
  4. Day 7Target splitSettle weights from quota and measured latency, not from symmetry.
Adding a second region as a standby first, then as a share of traffic. Illustrative timing.

What INFRO does not do today matters as much:

  • No regional processing guarantee at the gateway. INFRO runs on Cloudflare; requests enter at the nearest edge location and the gateway Worker is placed near its primary database in Frankfurt, which is a performance setting, not a residency guarantee (EU compliance). For users and providers far from Frankfurt, that placement is part of the latency you should measure. Pinning an organization or project to a region is on the roadmap and is not claimed before it is enforced.
  • routing.regions is not a residency control. The legacy request field is recorded and checked against a stored region policy, but it does not constrain or rank your connections (smart routing). Location comes from which connections a route contains.
  • The OpenAI connection has no region setting. It calls api.openai.com, so an OpenAI data residency project's regional domain is not selectable through it today.

On layer 5, prompt and response capture is off by default, can be disabled per request with logging: false, and INFRO's settings do not change what your provider retains (privacy).

Checklist

  • The goal is named: availability, quota, latency, data location, or a stated combination.
  • All five locations written down for each workload: client, gateway, endpoint, processing, records.
  • Provider location control chosen per model: deployment type, profile prefix or residency project.
  • Every fallback target checked against the same location policy as its primary.
  • Quota headroom per Region recorded, with a weighted split where one Region is not enough.
  • Client-side time to first token measured per endpoint before any move for latency.
  • A failover drill that disables the primary Region and finds the standby on the request record.
  • Gateway-level residency treated as absent until your gateway enforces it.

From the team that builds it

Where this shows up in INFRO

INFRO is a control plane in front of the provider accounts you already hold. The capabilities below are the parts of it this article touches, each with the documentation that defines its behaviour.

INFRO is in private early access. Provider usage is billed to you by your providers; INFRO charges a software subscription and takes 0% of model spend. See plans.

Sources

Numbered in order of first citation. Each was opened and checked against the claim on the date shown.

  1. 1.Understanding deployment types in Microsoft Foundry Models (opens in a new tab) — Microsoft Learn. Accessed Sep 29, 2026.
  2. 2.Manage Azure OpenAI in Microsoft Foundry Models quota (opens in a new tab) — Microsoft Learn. Accessed Sep 29, 2026.
  3. 3.Quotas for the bedrock-runtime endpoint (opens in a new tab) — AWS. Accessed Sep 29, 2026.
  4. 4.Route model inference requests across AWS Regions with cross-Region inference (opens in a new tab) — AWS. Accessed Sep 29, 2026.
  5. 5.Data controls in the OpenAI platform (opens in a new tab) — OpenAI. Accessed Sep 29, 2026.
  6. 6.GPT-5.6 Sol model card — Amazon Bedrock (opens in a new tab) — AWS. Accessed Sep 29, 2026.

About this article

Written from Microsoft Learn, AWS and OpenAI documentation opened on 2026-09-29 and the public INFRO documentation (routing, fallbacks, EU compliance, privacy) and availability registry. No latency figures are measured; the example numbers are illustrative.

Last checked against its sources on . The next review is due by . No separate named reviewer is recorded for this article.

How articles are written, sourced and corrected is set out in the editorial standards.