Multi-Region and Geo-Distributed Systems Questions
Running a system across regions and continents: multi-region replication, data residency and sovereignty, geo-routing and CDN edge distribution, cross-region consistency and quorum placement, and conflict resolution when two regions accept writes. Covers regional failover and split-brain prevention, recovery objectives (RTO/RPO), region-by-region rollout and blast-radius containment, and the latency, cost, and consistency tradeoffs of going global. Global distribution strategy across the service and data tiers.
Design a failure-injection (chaos engineering) framework to safely simulate a regional outage for production traffic. Describe safety gates, blast radius control, automated rollback, metrics and SLO checks to assert resilience, coordination with stakeholders, and runbook steps executed during and after the experiment.
Sample Answer
A safe chaos-engineering framework for a regional outage is a controlled experiment with three non-negotiable properties: the blast radius grows in small, reversible steps; every step is guarded by an automated gate tied to real SLOs (service-level objectives: the internal targets defining acceptable service behavior); and a rehearsed rollback executes in seconds, not minutes, the moment a gate trips.
Safety gates and preconditions
Before starting: confirm synthetic canary traffic is healthy in every region, confirm no risky deploy has landed in the last 72 hours, and require explicit sign-off from both an SRE lead and the owning product team, recorded against the experiment so there is a clear record of who approved running a fault against production.
Blast radius control
Start at the smallest meaningful scope: a single, non-critical service, a single region, 1 percent of that region's traffic, during a low-traffic window. Only widen scope (more services, more traffic percentage, a full region) after the previous scope has run cleanly, and always exclude anything stateful and hard to reverse, such as a primary database, from the earliest stages.
What fault is actually being injected: draining is not an outage
Be explicit that shifting load-balancer weight away from a region is an EVACUATION, not an outage. Conflating the two is the most common way a regional-outage drill passes cleanly while the real event goes badly. A graceful drain announces itself in advance: connections finish, health checks stay green throughout, in-flight writes complete, replication keeps streaming, and no leader election is ever triggered. What a drain does test is real and worth testing on its own, namely whether the surviving regions have the compute headroom, connection-pool capacity, and cache warmth to carry the extra load. What it structurally cannot test is everything that distinguishes an outage: how long detection takes, what happens to requests in flight at the instant the region vanishes, whether writes acknowledged a second before the loss survive, whether leader election completes and in what time, whether clients holding long-lived connections reconnect, and whether OTHER regions that call into the now-dead region degrade gracefully or cascade.
So run them as a ladder, not as one experiment. First the evacuation, at the percentages above, to prove capacity, because that is what tells you the surviving regions will not fall over when the second stage works. Then an unannounced HARD fault under the same blast-radius discipline: blackhole the region's traffic at the network layer, or fail its health-check endpoint without draining first, so that detection time sits inside the measurement rather than outside it. Start the hard fault at the same smallest scope (one non-critical service, one region, a low-traffic window) and widen only once measured detection and failover times match what the runbook claims they are.
Automated rollback
An orchestrator (infrastructure-as-code plus an automation layer, not a person manually editing routing tables mid-incident) performs the actual fault injection, for example shifting load-balancer weight away from a region, and continuously evaluates health checks. The moment a threshold breaches, it reverts the routing change automatically and only then pages a human, so recovery does not wait on someone noticing a dashboard. For the hard-fault stage the undo is a different action and has to be built and rehearsed separately: withdrawing a network blackhole, restoring a health-check endpoint, or re-advertising a route is not the same operation as moving a load-balancer weight, and an abort path that only knows how to move weights will fail exactly when it is needed.
Metrics and SLO checks
Watch user-facing latency (p95 and p99: the 95th and 99th percentile response times, meaning 95 percent or 99 percent of requests are faster than that number), error rate, and a downstream signal like queue depth or database write error rate; define a concrete gate, for example "error rate above 0.5 percent sustained for 2 minutes" or "p99 latency more than double the pre-experiment baseline," and treat either as an automatic abort, not a judgment call made under pressure.
Coordination with stakeholders
Notify the on-call team, the affected product owner, and customer support before starting, with the exact scope and abort criteria in writing; post a live status update during the run so nobody discovers the experiment by noticing a spike in their own dashboard first, and circulate a written summary afterward regardless of outcome.
Runbook: during and after
During: run the pre-flight checklist that is part of the runbook (the written, step-by-step procedure the team follows to execute and respond to the experiment), get sign-off, start at the smallest scope, monitor continuously, and either proceed to the next scope step or auto-abort based on the gate. After a clean run: let the system soak at full scope for a further period, commonly 24 hours, before declaring success, and publish the findings. After an aborted run: open an incident regardless of whether real users were affected, preserve the metrics and traces from the window, and drive concrete fixes (a missing retry, an under-provisioned failover path, a replica quorum misconfiguration, where too few replicas were required to agree before a write counted as committed) before attempting the experiment again.
Worked example
An outage simulation against a secondary region starts at 1 percent of that region's traffic for 5 minutes; health checks stay within the pre-defined error-rate gate (under 0.5 percent), so the orchestrator ramps to 5 percent for the next 15 minutes, then to 25 percent for 30 minutes. At the 25 percent step, error rate crosses 0.6 percent sustained for just over 2 minutes; the automated gate trips, the orchestrator reverts the routing change within seconds, and an incident is opened even though no real customer-visible outage resulted, because the gate existing to trip is the point of the exercise.
Trade-offs and pitfalls
Conservative, small-step phasing is slower to reach a meaningful conclusion but is what makes running this safely against real production traffic possible at all; skipping straight to a full-region simulation to save time is how a chaos experiment turns into a real incident. The recurring mistake is defining gates only on the service being tested and missing a downstream dependency that silently absorbs the failure differently, such as a queue that backs up quietly for twenty minutes before anything alerts; include downstream saturation metrics (signals that a resource, like a queue or a connection pool, is filling up faster than it drains) in the gate set from the start, not after the first surprise.
An EU customer requires data residency for personal data while still wanting global users to experience low latency. Propose an architecture that satisfies GDPR residency requirements for EU customers, supports replication for analytics, and minimizes complexity for operations. Discuss encryption, pseudonymization and where application-level routing is needed.
Sample Answer
Direct answer
Satisfy the legal requirement first, EU personal data physically stored and processed in the EU, and treat global low latency as a routing and caching problem layered on top, not a reason to relax the residency boundary.
Framework
- Architecture: run a dedicated EU region, or region pair, as the system of record for EU customers' personal data. Non-EU users route to their nearest region for everything that doesn't touch EU personal data, and any request that does need EU data crosses as a narrow, audited API call rather than a data copy.
- Encryption: encrypt EU personal data at rest with keys managed by an EU-resident key management service (KMS), so the ciphertext and the key together never legitimately exist outside the EU.
- Pseudonymization, and the line it does not cross: replace direct identifiers, name, email, with a pseudonymous token everywhere outside the EU region, and keep the token-to-identity mapping inside the EU region only. This is a genuine and worthwhile risk reduction, and it is also the single most common place an architecture like this gets described incorrectly, so be precise about it: under GDPR, pseudonymised data is still personal data. The regulation defines pseudonymisation as processing after which the data can no longer be attributed to a person WITHOUT additional information kept separately, and the fact that the additional information exists at all, in your EU region, under your control, is exactly why the pseudonymised copy stays in scope. Only anonymisation, where re-identification is irreversible for everyone including you, takes data out of scope, and the moment you hold the mapping you have not anonymised anything.
What follows is concrete rather than pedantic. The globally replicated event stream is still personal data, so it still needs a lawful basis, the regions outside the EU still need a transfer mechanism, and a deletion request still has to reach it, which means the token has to be usable to find and erase those rows rather than being a one-way hash nobody can search on. What pseudonymisation actually buys is a much smaller blast radius if that global store is breached, plus a defensible record that appropriate technical measures were in place. What it does not buy is an exemption from the residency and transfer rules, and a candidate who claims it does has just failed the compliance half of the question.
If you want data genuinely out of scope, aggregate before it leaves: counts and rates over cohorts large enough that no individual can be singled out, with the per-user event rows staying in the EU. That is a real trade with a real cost, since you give up the ability to ask new per-user questions of the global store later, and saying so out loud is what separates a considered design from a hand-wave. - Where application-level routing is needed: at the API gateway, route by a resolved "home region" field set on the account at signup based on residency, not by current IP, so every write for that account always goes to its home region. Reads of already-pseudonymized, non-personal aggregates can be served from the nearest region's cache.
- Minimizing operational complexity: keep the number of home regions small and centralize the routing logic in one shared gateway or SDK layer rather than letting every service reimplement its own residency check, which is where these systems typically drift out of compliance.
- Cost and validation (the multi-country angle): every additional jurisdiction with its own residency rule is close to a linear increase in infrastructure cost, since you're standing up close to a full regional stack, not a config change, so a new region should be justified by actual customer demand there. Validate the whole design continuously, for example a scheduled job asserting no personal-data table has ever received a write from a non-EU service credential, rather than relying on a one-time architecture review.
Worked example
Signup sets home_region to the EU for an EU customer. Their profile writes always route there. Product usage events are pseudonymized at write time with a token, so a team anywhere can compute global engagement metrics without ever holding an EU user's real email address. The shared analytics warehouse those events replicate into is registered as an in-scope personal-data system rather than treated as exempt, which means it inherits a transfer mechanism, a retention limit, and a deletion path keyed on the token. The cohort-level rollups computed from it, daily active users by country and by feature, carry no per-user row and are the copy that circulates freely inside the company.
Trade-offs and pitfalls
Calling a pseudonymised global store anonymous, and therefore out of scope, is the most expensive mistake available here, because it is normally discovered during an audit or an unanswerable deletion request rather than during design, at which point the store has years of data in it. Separately, a pseudonymisation that can be trivially reversed by joining another globally available field, a rare timestamp plus a coarse location will often do it, fails even on its own weaker terms and is a common audit finding. Deriving "home region" from current IP instead of a fixed account attribute breaks the moment a user travels.
You're seeing high monthly cross-region egress costs due to frequent read replicas and backups. Propose concrete cost-optimization strategies that reduce egress while keeping acceptable latency and availability for a global read-heavy analytics dashboard. Include trade-offs for each suggestion.
Sample Answer
Direct answer
The recurring pattern behind high cross-region egress cost from read replicas and backups
is almost always "we keep shipping the same or overlapping data across regions more times
than necessary." The fix is to reduce how much crosses the wire (compress, deduplicate,
send deltas instead of full copies) and to reduce how often each region has to ask for it
(cache aggressively, pre-compute what the dashboard actually needs), not to simply accept
the current data movement pattern and look for a cheaper way to move the same bytes.
Concrete cost-optimization strategies
Consolidate read replicas instead of maximizing their number. Every additional read
replica in a new region is another target for the same replicated data stream. If several
regions with light traffic each have their own replica, check whether they could share one
replica in a nearby region plus a lightweight cache in front of it, cutting the number of
full replication streams while still meeting latency needs for those lower-traffic regions.
Trade-off: slightly higher latency for the consolidated regions' reads.
Pre-aggregate for the dashboard instead of shipping raw rows. A read-heavy analytics
dashboard usually queries the same handful of aggregate shapes repeatedly (totals by day, by
region, by category). Compute those aggregates once, close to the data, and replicate or
cache the much smaller aggregate result set across regions instead of the full raw dataset
each dashboard viewer's queries would otherwise touch. Trade-off: the dashboard becomes
less flexible for truly ad hoc queries that don't fit a pre-computed shape; keep a
narrower, more expensive path available for those.
Cache dashboard query results at the edge or in each region. If many users in a region
are looking at largely the same dashboard views, a shared cache with a sensible time-to-live
(TTL, how long a cached value is considered valid before refreshing) can serve most requests
without touching the cross-region data path at all. Trade-off: dashboard data is as fresh
as the cache TTL, not real-time; usually acceptable for analytics, rarely acceptable for
live operational data.
Move from full backups to incremental/differential backups. A full backup ships every
byte every time; an incremental backup ships only what changed since the last one. For large
datasets with a modest daily change rate, this alone can cut backup-related egress by a
large margin, since a full copy is only needed occasionally, with cheap incrementals
in between. Trade-off: restoring from an incremental chain is slightly more operationally
complex than restoring a single full snapshot, and you need to periodically consolidate the
chain so restore time doesn't grow unbounded.
Keep backup storage in-region rather than duplicating across regions by default. Ask
whether every backup genuinely needs a cross-region copy, or whether a single durable,
in-region backup (with a separate, less-frequent cross-region copy only for disaster
recovery purposes) meets the actual recovery requirement. Trade-off: slightly weaker
protection against a full-region disaster if the cross-region copy is less frequent, a trade
worth making explicit against the recovery point objective (RPO, the maximum amount of data the business can afford to lose, measured as time since the last good backup) the business actually
needs, not assumed away.
Compress data in transit for replication and backup streams. A straightforward lever
that reduces bytes moved for both read-replica streams and backup jobs, at the cost of CPU
time to compress and decompress; usually a clear win when the network, not compute, is the
constrained and costly resource.
Worked example
A dashboard queries daily revenue-by-region from a primary database replicated in full to
three regional read replicas, and takes nightly full backups shipped cross-region for
disaster recovery. Switching the dashboard to read from a nightly pre-computed
revenue-by-region aggregate table (a few thousand rows instead of the full transactional
table) lets you stop replicating the full transactional table into those three regions and
replicate only the small aggregate, and that narrowing is where the saving actually comes
from. Be precise about the mechanism, because it is easy to get backwards: a read replica's
cross-region bytes are driven by the write volume at the source, not by how many queries the
dashboard runs against the replica. Queries against a local replica never cross a region
boundary and cost nothing in egress at all. So pre-aggregation buys you egress savings by
exactly one of two routes, and you should know which one you are claiming: either by changing
what gets replicated (retire the full-table stream, ship the aggregate instead), or, if a
region has no local replica and the dashboard queries back to a remote primary, by shrinking
the result bytes each query drags across the boundary. Booking a saving from "fewer queries"
while the full replication stream keeps running is how a cost model promises a reduction that
never shows up on the bill. Switching nightly backups to incremental (with a weekly full baseline) cuts
backup egress by a factor worth computing rather than hand-waving. Seven nightly fulls ship
7 times the dataset size F every week. One weekly full plus six incrementals at a daily change
rate d ships (1 + 6d) x F instead. At a 5% daily change rate that is 1.3F against 7F, an 81%
cut; even at a heavy 10% daily change rate it is 1.6F, still a 77% cut. The shape of that
formula is the useful part: the saving comes overwhelmingly from dropping six of the seven
fulls, and the daily change rate only moves you around inside a narrow band, 81% at a 5%
change rate, 77% at 10%, and 86% in the limit of a dataset that never changes at all. That is
why this lever is reliably large across very different workloads.
Stretching the full-backup interval past a week is a separate decision, and the percentage
framing actively hides how large it is. At the same 5% daily change rate a fortnightly full
ships 0.83F per week against the weekly scheme's 1.30F, a further 37% cut, and a monthly full
ships 0.57F per week, a further 56%. On the percent-of-original scale those same three
schemes read as 81%, 88% and 92%, which looks like diminishing returns while the bytes are
halving. Check which denominator a cost model is quoting before you trust its ranking. The
reason to stop near a week anyway is restore time, not egress: every extra day adds one more
incremental the restore has to replay in order, so size the interval against the recovery
time objective and take the egress saving as a side effect up to that limit.
Both changes reduce cross-region bytes moved without touching the dashboard's actual
freshness requirement (daily figures, not real-time).
Trade-offs and pitfalls
- Don't optimize the replication path while ignoring what's actually driving the queries
behind it. If the dashboard's real requirement is "yesterday's numbers," architecting
for real-time freshness anywhere in the pipeline is wasted cost. - Incremental backups reduce egress but increase restore complexity and time; make sure
the recovery time objective (RTO, how quickly you must be back up after an incident) still
holds with the new backup shape before adopting it purely for cost. - Consolidating read replicas trades latency for cost; validate that the affected
regions' users won't notice the difference before rolling it out broadly.
Design a globally distributed e-commerce checkout system that must prevent overselling inventory while providing low latency across three regions that can experience network partitions. Describe data placement, partitioning of inventory by SKU or region, options for synchronous cross-region consensus versus local reservations, reconciliation strategies, and operational procedures for failover and sale events.
Sample Answer
Direct answer
Split "reserve the inventory" from "confirm the payment," and default the checkout hot path to
fast local reservations with asynchronous replication rather than a synchronous cross-region
agreement on every order. Reserve synchronous cross-region coordination for the narrow case that
actually needs it (the last few units of a nearly sold-out SKU), and use a background
reconciliation job to catch and correct the rare oversell that local reservations allow.
Structured elaboration
Data placement and partitioning. Inventory is partitioned by SKU. Each SKU has a home region
(wherever it historically sells most), but its remaining-count is replicated to all three regions
so every region can serve fast reads. Ahead of a known sale, split the total stock into a soft
per-region quota (a fixed sub-allocation), so most decrements happen entirely locally with zero
cross-region calls.
Synchronous cross-region consensus vs. local reservations.
| Approach | Extra latency per checkout | Behavior during a network partition (regions unable to reach each other) | Overselling risk |
|---|---|---|---|
| Synchronous quorum write (majority of regions must acknowledge) | About 75-105ms, bound by the round trip to the nearest other region | Blocks or fails checkout in the affected region | Near zero |
| Local reservation, async replication | Under 10ms | Fully available | Bounded but nonzero, needs reconciliation |
Derive that latency row rather than guessing at it, because a quorum of 2 out of 3 only waits on
the leader's nearest peer, never on the farthest. us-east and eu-west are 5,466 km apart
great-circle, which over a realistic 1.4x cable path at the speed of light in fiber is a 75ms
round-trip floor; ap-south's nearest peer is eu-west at 7,603 km, a 104ms floor. Those are floors,
so real links sit at or above them and never below, and nothing in a three-region set like this can
plausibly reach 200ms or more on the nearest-peer path: even the widest pair here, us-east to
ap-south at 12,861 km, floors at about 176ms, and that pair is never the one a majority waits on.
Reconciliation strategies. Two-phase commit (2PC, a coordinator that locks every region's row
and only commits once all regions confirm) gives strong correctness but structurally cannot
survive a partition without blocking: if the coordinator can't reach a region, the transaction
holds its locks open, trading away the availability the question requires. A saga instead breaks
checkout into local steps (reserve stock locally, charge payment, confirm order), each committed
locally with a compensating action if a later step fails (release the reservation, issue a
refund); it tolerates partitions because no single step needs cross-region agreement, at the cost
of a brief window where state is only eventually consistent. Eventual reconciliation goes further:
accept optimistic local reservations, replicate lazily, and run a periodic job that compares the
true committed total against the SKU's real stock and cancels the newest oversold orders first.
Idempotency. Every checkout call carries a client-generated idempotency key (cart-session id
plus attempt number). A retry sent because a partition caused a timeout hits the same key and
returns the original reservation result instead of creating a second one, which is what makes the
saga's local-commit-then-retry pattern safe to use at all.
Operational procedures. Before a known sale event, pre-allocate the per-region quota with a
safety margin, canary (canary: route a small slice of real traffic through the new path first, to catch problems before full rollout) the flash-sale traffic path days ahead, and run a scripted failover drill:
mark a region degraded, freeze new reservations there, and reroute its traffic to the two healthy
regions before it matters for real.
Worked example
Take one SKU with 40 total units, quota-split 15/15/10 across us-east/eu-west/ap-south ahead of a
flash sale. Peak demand runs at 50 checkout attempts/sec in each of the three regions once the sale
opens globally; state the rate per region rather than globally, because that is the quantity the
formula below consumes. Replication lag is L=0.2 seconds between regions. If we had instead pooled a single shared counter with async
replication and no quota, the worst-case transient oversell across the other 2 regions before
us-east's decrement is visible is r×L×(N−1)=50×0.2×2=20 units,
literally half the stock. The hard per-region quota avoids this: us-east burns its 15-unit quota in
15/50 = 0.3 seconds and can locally reject its 16th reservation with zero cross-region calls, and
every attempt after that 0.3-second mark is refused locally in under 10ms. Under the
synchronous-consensus alternative each of those same attempts would wait on a cross-region round
trip of roughly 75ms before being told no, and the same 75ms tax lands on every checkout for every
other SKU in the catalog, including the overwhelming majority that are nowhere near selling out and
will never contend for a last unit. Be careful how you frame that last point for this SKU
specifically: 40 units against, say, 5,000 attempts means 4,960 of them (99.2%) cannot get stock no
matter what the design does, so the argument here is not "most attempts never contend," it is "the
contention is resolved locally in under 10ms instead of remotely in 75ms." The "most attempts never
contend" argument is the one that applies across the catalog, not inside a sold-out flash sale.
Trade-offs & pitfalls
Quotas can strand demand when one region runs out while pooled stock still exists elsewhere;
mitigate with a lightweight, off-hot-path "quota nearly exhausted, can I borrow N" signal between
regions rather than putting that check on every checkout. Decide a fairness rule (first-committed
wins vs. random) before the sale, not after reconciliation finds an oversell, or support will give
customers inconsistent explanations. Two-phase commit is the pitfall people default to because it
"sounds correct"; it is the one option here that structurally cannot survive a partition without
blocking, so treat it as a last resort, not the starting design.
flowchart LR
C[Client checkout request] --> R1[us-east: local quota check]
R1 -->|quota ok| Reserve[Local reservation with idempotency key]
Reserve --> Pay[Payment charge]
Pay --> Confirm[Order confirmed]
Reserve -.async replication.-> R2[eu-west view]
Reserve -.async replication.-> R3[ap-south view]
Recon[Reconciliation job] --> R1
Recon --> R2
Recon --> R3
Recon -->|oversold found| Cancel[Cancel and refund newest order]
Architect a globally distributed BI dashboard platform that must serve interactive dashboards to 100M monthly active users with sub-second time-to-first-interaction for common tiles and strict SLAs. Describe multi-region deployment topology, data partitioning strategies, cache and edge strategies (CDN, precomputed tiles), approaches for global aggregation and rollups, consistency trade-offs, failover, monitoring, and cost controls you would put in place.
Sample Answer
Direct answer
Sub-second time-to-first-interaction for common tiles is mostly a caching and pre-computation
problem, not a database problem: the answer to a popular tile should already be sitting in an edge
cache before the user opens the dashboard, and global aggregation gets pushed entirely off the
request path into a scheduled rollup pipeline.
Structured elaboration
Multi-region deployment topology. Deploy the query-serving tier in every major region behind a
content delivery network (CDN: a globally distributed network of edge servers caching content
near the user) reached via anycast (many servers share one IP address; the network routes each
client to the nearest one), so users hit a nearby edge for both static assets and cached tiles.
Data partitioning. Source data is partitioned by tenant, each customer's data isolated, and by
the tenant's home region for compliance. A background job materializes the roughly 20% of tiles
that account for 80% of all tile requests into a small precomputed rollup table refreshed on a
schedule.
Cache and edge strategies. Precomputed tiles are pushed to the CDN with a short time-to-live
(TTL) matched to the rollup's refresh cadence, for example a 5-minute rollup gets a 5-minute edge
TTL. Uncached, ad-hoc tiles fall back to the regional query engine and accept a slower path, which
is fine since they're the minority.
Global aggregation and rollups. Cross-tenant, cross-region rollups (like benchmark comparisons)
run as separate nightly or hourly batch jobs, so a slow global rollup never blocks a fast
per-tenant tile.
Consistency, failover, monitoring, cost. Common tiles are allowed to be a few minutes stale,
matching the TTL above, with an "as of" timestamp shown so staleness never looks like a bug. Each
region serves its own tenants independently through a control-plane outage elsewhere. Monitor
cache hit ratio, tile freshness lag, and p95/p99 (95th/99th percentile) latency per region as the
core service-level agreement (SLA) signals. Control cost by capping how many tiles are eagerly
precomputed based on measured popularity rather than materializing every possible filter
combination.
Fintech-specific residency. For a tenant needing country-level residency plus central
analytics, keep the same architecture but pin that tenant's raw data and precomputed tiles to its
home country's region, and let only fully-aggregated, non-identifiable rollups feed the central
cross-tenant benchmark job.
Worked example
100 million monthly active users at roughly 5 dashboard opens/user/month is about 500 million
opens/month, which over a 30-day month averages about 193 dashboard opens/sec. Opens are not the
unit the serving tier handles, though, and keeping the two apart is the point of the exercise: a
dashboard is a grid of tiles and each open fans out into one request per tile, so the fan-out
factor has to be carried explicitly rather than quietly assumed to be 1. At an average of 6 tiles
rendered per open, 193 opens/sec is about 1,160 tile-requests/sec. Apply a 20x business-hours peak
multiplier to the opens and peak is 3,860 opens/sec, which is roughly 23,200 tile-requests/sec. If
80% of those hit the precomputed CDN cache at sub-10ms edge latency, about 4,630 tile-requests/sec
fall through to the regional query engines, and spread across four regional tiers that is roughly
1,160/sec each, a load a modestly sized query tier handles inside the sub-second budget. Without
the precomputation all 23,200/sec would hit the query engines directly, about 5,800/sec per region,
the difference between meeting the SLA and falling over at peak. The fan-out factor is the number
worth challenging out loud in an interview: double the tiles per dashboard and the uncached load
doubles with it, which is why capping how many tiles are eagerly precomputed is a capacity control
as much as a cost control.
Trade-offs & pitfalls
Over-eager precomputation (materializing every filter combination) blows up storage and compute
cost combinatorially; measure actual tile popularity and precompute only the head of that
distribution. Showing a precomputed number with no "as of" timestamp erodes trust the first time a
customer notices a delayed update during an incident.
Unlock Full Question Bank
Get access to all Multi-Region and Geo-Distributed Systems interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.