Disaster Recovery & Business Continuity
Layered continuity controls that protect Grade My Investments data and keep services self-healing — honestly separated into what is implemented today and what is on the roadmap.
flowchart TB
subgraph IMPL[Implemented - Central US single region]
direction TB
DB[(MySQL prod<br/>35 day backups<br/>point-in-time restore)]:::data
BLOB[(Blob Storage ZRS<br/>3 availability zones)]:::data
KV[(Key Vault<br/>soft-delete 90d<br/>purge protection)]:::sec
SVC[Background services<br/>systemd Restart=always<br/>RestartSec=10]:::svc
HM[Health Monitor<br/>checks every 60s<br/>emails admins]:::svc
REC[Idempotent billing<br/>FailedPaymentReconciliation<br/>no double-charge]:::svc
ROLL[Deployment backups<br/>opt-gmi-Backup-TIMESTAMP<br/>stop-restore-restart]:::svc
end
HM -->|watches| SVC
SVC -->|reads-writes| DB
SVC -->|reads-writes| BLOB
SVC -->|secrets| KV
REC -->|reconciles| DB
ROLL -->|recovers| SVC
subgraph ROAD[Roadmap - not yet implemented]
direction TB
MR[Multi-region failover<br/>secondary region]:::ext
HA[Database HA<br/>zone-redundant auto failover]:::ext
RT[Formal RTO-RPO SLA targets]:::ext
GEO[Cross-region<br/>geo-redundant backup]:::ext
end
IMPL -.->|future| ROAD
classDef app fill:#1f2630,stroke:#C0894E,color:#F3EFE8;
classDef svc fill:#241c14,stroke:#E2B583,color:#F3EFE8;
classDef data fill:#22201a,stroke:#C0894E,color:#EBD3AE;
classDef ext fill:#1b1f27,stroke:#5A616B,color:#C4C0B8;
classDef sec fill:#1d2733,stroke:#5cc8e0,color:#eafaff;
This page distinguishes implemented controls running in production today from forward-looking roadmap items that are not yet built. Grade My Investments currently operates in a single region (Central US); there is no secondary region failover today.
Implemented Today
Database Backups & Recovery
The production MySQL database is protected by Azure automated backups:
- Automated backups Enabled
- Retention window 35 days
- Point-in-time restore Supported
Point-in-time restore allows the database to be recovered to any moment within the 35-day retention window, protecting against accidental deletion, corruption, or bad deployments.
Redundant Blob Storage
User files and generated reports live in Azure Blob Storage with environment-appropriate redundancy:
| Environment | Redundancy | Copies |
|---|---|---|
| Production | Zone-Redundant (ZRS) | 3 copies across 3 availability zones |
| Development | Locally-Redundant (LRS) | 3 copies in a single datacenter |
ZRS in production keeps data available even if an entire availability zone within Central US becomes unavailable.
Secrets Protection
Azure Key Vault guards application secrets against accidental or malicious loss:
- Soft-delete retains deleted secrets for 90 days
- Purge protection blocks permanent deletion during the retention window
- Recoverable even after an erroneous delete operation
Self-Healing Services
All background services run under Linux systemd with automatic restart on failure:
[Service]
Restart=always
RestartSec=10
If a worker process crashes, systemd automatically restarts it after 10 seconds,
without manual intervention. This applies to all long-running background services
(report builders, download builders, billing, and notification workers).
Health Monitoring & Alerting
- Health Monitor check interval Every 60 seconds
- Admin email on failure Enabled
The Health Monitor polls service health every 60 seconds and emails administrators the moment a failure is detected, so issues are caught quickly rather than discovered by users.
Idempotent Billing
Billing is idempotent: a FailedPaymentReconciliation process safely retries failed
payments so that a retry can never double-charge a customer. Recovery from a
transient payment-provider outage will not produce duplicate charges.
Retries are reconciled against prior attempts before any charge is committed.
Deployment Rollback
Every deployment captures a timestamped backup of the previous release:
/opt/gmi/Backup/<TIMESTAMP>/Documented rollback procedure:
- Stop the affected service
- Restore the prior build from the timestamped backup
- Restart the service
Implemented Controls Summary
| Control | Detail | Status |
|---|---|---|
| MySQL automated backups | 35-day retention, point-in-time restore | Live |
| Blob Storage redundancy | ZRS across 3 availability zones (prod), LRS (dev) | Live |
| Self-healing services | systemd Restart=always, RestartSec=10 | Live |
| Health Monitor | 60-second checks, admin email on failure | Live |
| Key Vault protection | 90-day soft-delete + purge protection | Live |
| Idempotent billing | FailedPaymentReconciliation, no double-charge | Live |
| Deployment rollback | /opt/gmi/Backup/<TIMESTAMP>/ stop-restore-restart | Live |
| Region footprint | Single region: Central US | Single region |
Roadmap — Not Yet Implemented
The following items are forward-looking. They are not in place today and are documented here for transparency.
Multi-Region Failover
No secondary region exists today. A future secondary region would allow failover if Central US becomes unavailable.
RoadmapDatabase High Availability
The current database tier is Burstable. Zone-redundant automatic failover HA is a future upgrade.
RoadmapFormal RTO / RPO SLA
No formally documented recovery-time and recovery-point objective SLA targets exist yet.
RoadmapGeo-Redundant Backup
Cross-region geo-redundant backup is not configured today; backups remain within the single region.
Roadmap