Last reviewed: 2026-08-09

Direct answer

An LLM fallback is not independent merely because it uses a different model name. It is independent only when the request can reach and execute through components that are unlikely to fail together with the primary route. Treat each route as a dependency fingerprint, then compare the fingerprints before allowing traffic to move.

A useful fingerprint includes the provider, model, region, account or quota pool, edge gateway, DNS path, network path, identity system, and control plane. If the primary and fallback share one of those dimensions, record that relationship explicitly. If you do not know whether they share it, classify the relationship as unknown rather than assuming independence.

DimensionQuestion to askPromotion rule
ProviderCan a provider-wide incident affect both routes?Prefer distinct provider failure boundaries, or document the shared boundary.
Region or zoneDo both endpoints depend on the same geography?Require a tested alternate region or accept a declared regional risk.
Edge and DNSCan one gateway, resolver, or routing policy remove both paths?Verify an alternate path before calling the route independent.
Quota and accountWill one quota pool or account limit both routes?Check usable capacity under the incident load, not just nominal quota.
Network and identityDo both paths require the same egress, peering, or identity service?Mark shared dependencies and make them part of the fallback decision.
Control planeDoes recovery require provisioning, configuration, or credential changes?Keep the serving path usable without an impaired control plane.

Amazon Web Services describes this last property as static stability: existing work continues when a dependency is impaired, rather than waiting for a new recovery action. Its static-stability guidance also explains why independently placed capacity matters. Google SRE documents the complementary risk in Addressing Cascading Failures : shifting traffic away from one overloaded cluster can overload the next cluster and turn a local fault into a service-wide outage. For an LLM gateway, failover is therefore both a dependency decision and a load-transfer decision.

Who this is for

This article is for platform engineers, SREs, and gateway owners who already have more than one LLM route and need to know whether those routes are genuinely resilient. It is especially useful when a primary and backup use different model families but still pass through the same cloud account, regional egress, DNS provider, gateway fleet, quota pool, or identity system. It is not a model quality comparison. It is a method for deciding whether a route can survive the same incident as the primary while preserving a defined user flow.

Key takeaways

  • Model diversity is only one part of failure-domain diversity.
  • A route registry should expose shared provider, geography, edge, quota, network, identity, and control-plane dependencies.
  • Unknown dependency relationships are not a reliability pass; they are a reason to hold promotion or use a degraded path.
  • Backup capacity must already exist. Scaling or reconfiguring during an impairment can make the recovery path depend on the impaired control plane.
  • Failover can create a cascade if the surviving route cannot absorb the transferred load. Test that condition and define load shedding before production traffic moves.
  • Keep a short, sanitized decision record for every promotion, hold, or degradation so the next review can distinguish a real independent failure from a route that merely looked different.

Sources checked

These sources describe general distributed-system behavior. The route fingerprint, promotion rules, and workflow below are an operational synthesis for LLM API gateways, not a claim that any source documents a particular provider integration.

Contract details to verify

1. Define a route fingerprint

Give every candidate route a stable, reviewable record. At minimum, capture provider, endpoint family, model identifier, region, account or quota pool, egress location, edge gateway, DNS authority, network path, identity dependency, and the control-plane actions needed to activate capacity. Store the record beside the route policy rather than in an informal runbook. A model alias can change while the underlying provider, region, and network remain the same, so the fingerprint must describe infrastructure and policy as well as model metadata.

For each pair of routes, classify every dimension as independent, shared, or unknown. Add an evidence reference and an expiry date for the classification. A claim that two providers are independent without checking the gateway, egress, quota, and identity layers is incomplete. The provider risk register is a useful place to record owners, evidence, and assumptions.

2. Make capacity part of eligibility

A technically separate route is not a usable fallback if it has no room for the traffic it will receive. Define the incident you are designing for: one provider unavailable, one region unavailable, a quota reduction, or a gateway fleet impairment. Load-test the candidate under that transferred load and include queue time, concurrency, token limits, and downstream tool capacity. Use the results to set a promotion threshold. Do not copy a universal percentage from another system; the right headroom depends on the user flow and the failure scenario.

3. Keep the recovery path statically stable

Ask what must happen after the decision to fail over. If the gateway must create a new endpoint, request a quota increase, refresh a shared control-plane configuration, or wait for a regional deployment, the route is not ready for an immediate outage. Pre-provision what the serving path needs and keep the data path usable when management actions are unavailable. This is the LLM analogue of static stability: the request should be able to use already-known route state while the control plane is degraded.

4. Separate routing state from serving state

The router needs enough local, signed configuration to choose a known-good route without synchronously querying the same dependency that is failing. That does not mean keeping stale policy forever. Set an explicit freshness limit, fail closed when policy is too old, and expose the age of the route map in telemetry. Keep circuit-breaker state scoped to the dimensions that can fail together; the provider, region, and model circuit-breaker guide provides a related pattern for avoiding one unhealthy bucket disabling unrelated traffic.

5. Use a concrete happy and error path

On the happy path, the gateway accepts a user action, selects the primary using a current route fingerprint, receives a valid response, and records the route outcome. On the error path, it should classify the failure before selecting a backup. First identify whether the symptom is a provider response, a timeout, a quota response, a gateway error, or a local cancellation. Then compare the failed dependency with the candidate fingerprint. If the candidate is independent, has tested capacity, and satisfies policy, promote it once. If any critical relationship is shared or unknown, hold failover and return a bounded degraded response, queue the action, or reject it clearly.

Log the decision without prompts, completions, headers, account numbers, or tokens. A compact record can look like this:

event: llm_route_decision
request_id: req_7f3a
trace_id: trace_42
user_action: summarize
primary_route: provider_a/us_east
candidate_route: provider_b/eu_west
failed_dependency: provider_a/control_plane
shared_domains: []
independence_status: verified
capacity_check: pass
decision: failover
payload_redacted: true

For a hold decision, use the same fields with independence_status: unknown, capacity_check: not_run, and decision: degrade. This makes the reason visible without turning logs into a copy of user content. After either outcome, watch the surviving route for queue growth and error amplification, and stop additional promotion if the capacity assumption is no longer true.

Failure modes

Different model, same provider. A provider-wide incident, account restriction, or shared quota can affect both names. Guardrail: compare provider and quota dimensions, not only model identifiers.

Different provider, same edge. One gateway, resolver, or egress path can make two providers unreachable at once. Guardrail: map the request path from the caller to the provider and test the edge dependency separately.

Regional concentration. Both routes may be geographically distinct in their documentation but terminate in the same region or depend on the same regional control service. Guardrail: record the effective serving region and test a regional impairment.

Reactive capacity. The backup appears healthy until traffic arrives, then the gateway tries to provision or scale while its control plane is impaired. Guardrail: pre-provision capacity and verify it with a failure-load test.

Failover cascade. The primary fails, the router sends all traffic to the backup, and the backup exhausts CPU, connections, queue space, or provider quota. Google SRE describes this pattern as positive feedback across clusters. Guardrail: reserve capacity, cap transferred load, shed low-priority work, and stop routing when the surviving path crosses its tested limit.

Gray failure. A route returns responses but has unusable latency, incomplete streams, or a degraded dependency. A shallow health check can mark it healthy while user requests fail. Guardrail: use a data-path probe and a user-flow signal, not only endpoint reachability.

Unknown relationship. The team cannot prove whether identity, DNS, network, or quota is shared. Guardrail: treat unknown as shared for promotion purposes, document the missing evidence, and choose a bounded degradation path.

FAQ

Is a different model enough to make a fallback independent?

No. It changes the model dimension, but the provider, region, gateway, quota, network, identity, or control plane may still be shared. Independence is a property of the whole request path.

Must the backup use a different provider?

Not always. Two routes from one provider can be useful when the failure boundary is known to be separate and the route has tested capacity. Conversely, two providers can still share an edge, network, identity, or quota dependency. Verify the boundary instead of relying on a brand label.

How much backup capacity is enough?

Enough to handle the defined failure scenario while meeting the user-flow target you negotiated. Measure it with realistic load and failure tests. Capacity that exists only after emergency scaling is not immediate fallback capacity.

What should the router do when independence is unknown?

Do not silently promote it. Hold the route, use an intentionally degraded response, queue work within a bounded limit, or ask the user to retry later. A visible limitation is safer than converting an uncertain dependency into a larger outage.

Does active-active routing solve shared failure domains?

No. Active-active removes a single instance bottleneck only when the active units and their dependencies are genuinely separated and each side can absorb the required load. The same edge or control plane can still make both sides fail together.

Reader next step

Choose one critical LLM user flow and draw its complete route from caller to provider. Mark each provider, region, quota pool, edge, DNS, network, identity, and control-plane dependency as independent, shared, or unknown. Then run one controlled fault that removes the primary and verify the happy path, the error path, the capacity guard, the sanitized log, and the degradation response. Record the result in the bulkhead isolation guidance and your route risk register. Promote the fallback only after the evidence shows that it crosses the failure boundary you intended.