Security & Reliability

Disaster Recovery and Backups: RPO, RTO, Multi-Region Failover, and DR Testing

Learn how to design for disaster recovery: RPO vs RTO, full/incremental/differential backup strategies, multi-region failover architecture, active-active vs active-passive, DR tiers, and game-day testing.

August 14, 2026
disaster recoverybackupsRPORTOfailoverbusiness continuityhigh availability

Why Disaster Recovery Matters

Reliability patterns like circuit breakers and retries protect you from a single request failing. Disaster recovery (DR) protects you from something much bigger: a whole data center burning down, a region-wide cloud outage, a botched migration that corrupts your primary database, or ransomware that encrypts your production data. DR is not about individual requests — it's about whether the business survives when the worst happens.

Every DR conversation starts with two numbers, and every architecture decision downstream follows from them.

Key insight: DR is a business decision disguised as an engineering problem. The right answer isn't "the most resilient architecture possible" — it's "the cheapest architecture that meets the RPO/RTO the business actually needs." Over-engineering DR wastes money; under-engineering it risks the company.


RPO and RTO

Recovery Point Objective (RPO)

RPO answers: "How much data can we afford to lose?" It's measured backward in time from the moment of failure.

Recovery Time Objective (RTO)

RTO answers: "How long can we be down?" It's measured forward from the moment of failure until service is restored.

Worked Example

Say you set RPO = 1 hour and RTO = 4 hours for an e-commerce order database:

  • RPO of 1 hour means your backup/replication cadence must capture data at least every 60 minutes. If the primary dies at 2:47 PM and your last snapshot was 2:00 PM, you lose up to 47 minutes of orders. To hit this RPO you need continuous replication or backups at least hourly — a nightly backup (23-hour RPO) would violate it badly.
  • RTO of 4 hours means that from the moment of failure, you have 4 hours to detect it, fail over, and serve traffic again. That drives you toward automation: a manual "page an engineer, they SSH in, restore from S3, update DNS" process rarely finishes in 4 hours under stress. You likely need a pre-provisioned standby and scripted or automatic failover.

These two numbers are independent and drive completely different investments:

ObjectiveDrives investment inCheap way to improve itExpensive way to improve it
RPOBackup/replication frequencyMore frequent snapshotsSynchronous multi-region replication
RTOFailover automation & standby capacityRunbooks + practiceHot standby, automated traffic-manager failover
💡

RPO near zero and RTO near zero together are the most expensive combination you can ask for — it typically requires synchronous cross-region replication plus a fully warm or active standby, which multiplies infrastructure cost and adds write-latency overhead in the normal case, not just during a disaster.


Backup Strategies

Full, Incremental, and Differential

  • Full backup — copies everything, every time. Simplest to restore (one file), most expensive to store and slowest to run.
  • Incremental backup — copies only what changed since the last backup of any kind. Cheapest and fastest to create, but restoring means replaying the full backup plus every incremental since — a longer, more fragile restore chain.
  • Differential backup — copies everything changed since the last full backup. Storage and restore time grow between fulls, but restoring only ever needs two files: the last full plus the latest differential.

Storage Cost vs Restore-Time Tradeoff

StrategyBackup storage costBackup speedRestore complexityRestore speed
FullHigh (redundant data every run)SlowTrivial — one fileFast
IncrementalLowFastComplex — full + every increment in orderSlow (chain replay)
DifferentialMedium, grows until next fullMediumSimple — full + one differentialMedium
⚠️

A broken link in an incremental chain breaks every restore after it. If Tuesday's incremental is corrupted, Wednesday and Thursday's incrementals are useless even if they're intact, because each depends on the one before it. Most production systems use a hybrid: weekly full + daily incremental, with periodic chain-integrity checks.

Backup Schedule Example

text
Sunday    00:00  -> FULL backup       (baseline)
Mon-Sat   00:00  -> INCREMENTAL backup (changes since previous day)
Every hour        -> Transaction log backup (for point-in-time recovery)

Retention: 4 weekly fulls, 30 days of incrementals, 7 days of transaction logs

Transaction log (or write-ahead log) shipping is what lets databases hit sub-hour, even sub-minute, RPOs without doing a full backup every few minutes — you replay logs on top of the last full/incremental to reconstruct state at any point in time.


Backup Testing: Untested Backups Are Not Backups

A backup you have never restored is a hypothesis, not a safety net. Backup jobs silently fail: permissions change, storage fills up, encryption keys rotate and nobody updates the restore script, schemas drift so an old backup no longer imports cleanly.

🚨

The single most common DR failure isn't "no backups" — it's "backups that turned out not to restore." Teams discover this during the actual outage, which is the worst possible time to find out.

Restore Drills

PracticeWhy it matters
Scheduled restore drills (e.g., monthly)Verifies the backup is actually restorable, not just "created"
Restore to an isolated environmentConfirms the process works without risking production
Time the restoreTells you if you can actually meet your RTO
Checksum/row-count validation post-restoreConfirms data integrity, not just file existence
Rotate who runs the drillConfirms the runbook is usable by someone other than its author

A good rule of thumb: if you can't point to a dated log entry of the last successful restore test, treat your RTO/RPO numbers as unverified.

Backup Immutability and Ransomware

Traditional DR planning assumes the disaster is a hardware failure or a data center outage. Ransomware changes the threat model: an attacker who compromises production credentials can often reach — and encrypt or delete — your backups too, if they're just another writable location the same credentials can touch.

ProtectionWhat it prevents
Immutable / WORM (write-once-read-many) backup storageBackups can't be altered or deleted even by a compromised admin account, for a set retention window
Separate credentials/account for backup storageA breach of production credentials doesn't automatically grant access to delete backups
Air-gapped or offline copyA network-based attack physically cannot reach a copy that isn't network-reachable
Versioned backups (not overwrite-in-place)An attacker who "successfully" encrypts today's backup hasn't destroyed yesterday's
🚨

If the same credentials that write your application data can also delete your backups, you don't have a ransomware recovery plan — you have a shared blast radius. Backup storage should be a permissions boundary, not just a different bucket.


Multi-Region Failover Architecture

How Failover Actually Happens

  1. Replication streams data continuously (or on a schedule) from primary to standby region — this is what determines your realized RPO.
  2. Health checks on the traffic manager (Route 53, Cloud DNS, a global load balancer) continuously probe the primary region.
  3. Detection — health checks fail past a threshold (avoiding flapping on a single blip).
  4. Failover — DNS/traffic manager shifts traffic to the standby region. TTLs matter here: a 1-hour DNS TTL can silently add an hour to your RTO regardless of how fast the standby is ready.
  5. Promotion — the standby database is promoted from replica to writable primary. This is often the riskiest scripted step, and it's why it needs to be rehearsed, not improvised.
  6. Fail-back — once the original region recovers, traffic is not automatically shifted back; re-syncing and cutting back over is a deliberate, separate operation to avoid a second outage.

Replication lag is a hidden RPO tax. If your replication is asynchronous and lagging 90 seconds behind at the moment of failure, your realized RPO is 90 seconds even if your target was "near zero." Monitor replication lag as a first-class metric, not an afterthought.


Active-Active vs Active-Passive

DimensionActive-PassiveActive-Active
Normal operationStandby region idle or read-onlyBoth regions serve live traffic
CostLower — standby capacity is minimally provisionedHigher — full capacity duplicated and always running
ComplexityLower — one write pathHigher — writes can land in either region
RTO achievedMinutes to tens of minutes (promotion + DNS cutover)Seconds to near-zero (traffic already flowing both places)
Conflict resolution burdenNone — single writerSignificant — concurrent writes to the same record in two regions must be reconciled (last-write-wins, vector clocks, CRDTs, or application-level merge logic)
Best fitMost systems where a few minutes of downtime is acceptableSystems with a hard near-zero RTO requirement and the engineering budget to handle write conflicts correctly
⚠️

Active-active is frequently over-purchased. Teams reach for it because "active-active sounds more resilient," then spend months fighting conflict-resolution bugs for an RTO improvement the business never actually required. Confirm the RTO requirement first — often active-passive with a well-rehearsed failover comfortably meets it at a fraction of the complexity.


DR Strategy Tiers

A widely used way to frame the cost/speed tradeoff (popularized by AWS's DR guidance, but the shape applies to any cloud):

TierDescriptionTypical RTOTypical RPORelative cost
Backup & restoreBackups stored offsite/cross-region; infrastructure rebuilt from scratch on disasterHours to a day+Hours (since last backup)$ — cheapest
Pilot lightCore data replicated continuously; minimal/no compute running in the standby region until neededTens of minutes to a couple hoursMinutes$$
Warm standbyScaled-down but fully functional copy of the stack always running in the standby region; scale up on failoverMinutesSeconds to minutes$$$
Multi-site active-activeFull-scale stack live in two or more regions simultaneously, serving real traffic at all timesNear zeroNear zero$$$$ — most expensive

Moving down this table buys you a faster, more data-current recovery — at a real dollar cost that scales roughly with how "always-on" the standby capacity is. Picking a tier is where the RPO/RTO numbers from earlier in this article turn into an actual budget line.


Testing DR With Game Days

Chaos engineering (covered separately) tests request-level resilience — killing an instance, injecting latency into one service call. DR game days test something bigger: can the organization actually survive losing an entire region?

What a DR Game Day Looks Like

Game day typeWhat it validates
Tabletop exerciseDo people know the plan? Cheap, but doesn't catch technical surprises
Simulated region failure (non-prod)Does the failover automation actually work end to end?
Full production failover drillDoes it work under real traffic and real data volume — the only test that fully validates RTO
Unannounced drillTests whether the on-call process itself works, not just the scripted steps

Run game days on a schedule, not "when we get around to it." Infrastructure drifts — a new service gets added that isn't replicated, an IAM permission needed for failover expires, a runbook references a tool that's since been decommissioned. Quarterly is a common cadence for full failover drills; more often for the systems with the tightest RTO commitments.


Disaster Recovery Checklist

AreaChecklist Item
ObjectivesRPO and RTO defined and signed off per system, not assumed
BackupsBackup strategy (full/incremental/differential) matches the required RPO
BackupsBackups stored in a different region/account than production
TestingRestore drills run on a schedule, with timing recorded
ReplicationReplication lag monitored and alerted on
FailoverFailover process automated or fully scripted, not manual/ad hoc
FailoverDNS/traffic-manager TTLs tuned to not silently inflate RTO
ArchitectureDR tier chosen deliberately based on RTO/RPO, not by default
TestingGame days scheduled, including full failover drills, not just tabletop
Fail-backFail-back procedure defined and rehearsed, not improvised after recovery

What to Remember for Interviews

  1. RPO and RTO are different axes: RPO is about data loss tolerance, RTO is about downtime tolerance — they drive different investments and should each be stated as explicit numbers, not vibes.
  2. Untested backups are not backups: Always mention restore drills, not just backup creation, when asked about DR.
  3. DR tiers trade cost for speed: Backup-and-restore → pilot light → warm standby → multi-site active-active, each step buying a faster RTO/RPO for more money.
  4. Active-active isn't automatically better: It buys near-zero RTO at the cost of conflict resolution and doubled infrastructure spend — justify it against the actual requirement.
  5. DR game days are region-level, not request-level: Distinguish this from chaos engineering, which tests individual service failures, not "we lost an entire region."

Practice: For any system design, ask "What's the RPO and RTO the business actually needs here?" before proposing an architecture. Backing into the numbers from a cool architecture is a common interview mistake — start from the requirement.