Build a Multi-Region Config Management System


distributed-systems reliability deployment

System Design Deep Dive

Multi-Region Config Management

One wrong config key pushed to 20 regions simultaneously - and you need rollback in under 5 seconds

⏱ 14 min read 📐 Advanced 🏗️ Config-Management

Think of your application’s configuration as sheet music handed to an orchestra of 20 regional ensembles. When you change the tempo marking, every ensemble needs to play the new tempo - and they need to do it within the same measure, not drift independently. One ensemble playing at the wrong tempo for even a few bars turns the symphony into chaos. Now imagine the conductor needs to be able to instantly revert to the previous tempo if the new one causes the violins to fall apart.

Configuration management at global scale carries exactly this tension. A feature_flag: true that works flawlessly in us-east-1 can trigger a latency spike in ap-southeast-1 if the dependent service has a version mismatch. A rate_limit: 1000 that protects a database in Europe may be too low for Asia-Pacific traffic patterns. The challenge is not just propagating values - it is propagating them fast enough that no region runs a different config version for any meaningful duration, and guaranteeing that a bad change can be retracted before it causes a customer-visible incident.

The naive approach - a centralized config database that all 20 regions poll every minute - fails on three fronts. First, 60-second propagation windows mean regions can diverge on a rolling-deploy timeline. Second, a polling architecture creates a thundering herd on the config DB during a high-churn deployment. Third, rollback becomes “push a new version and wait another minute,” which is too slow when you’re watching error rates climb in real time.

We need to solve for three constraints simultaneously: sub-500ms propagation to all 20 regions, prevention of config divergence between regions, and instant rollback within 5 seconds of triggering it.

Requirements and Constraints

Functional Requirements

  • Store and version configuration key-value pairs (strings, booleans, numbers, JSON blobs)
  • Push changes to all 20 global regions within 500ms of commit
  • Detect and alert on config divergence between regions
  • Support instant rollback to any previous version by key or entire config snapshot
  • Provide an audit trail of every change with author, timestamp, and diff
  • Support validation gates - schema checks and canary rollout - before global propagation

Non-Functional Requirements

  • Propagation latency: p99 under 500ms globally
  • Rollback latency: under 5 seconds from trigger to full propagation
  • Availability: 99.99% (config reads must succeed even during control-plane outages)
  • Write throughput: up to 1,000 config changes/hour during peak deployments
  • Config store size: up to 10 million key-value pairs per environment
  • Read throughput: up to 100,000 config reads/second per region (from local cache)

Constraints and Assumptions

  • Config reads are on the hot path; writes are infrequent compared to reads
  • Regions are assumed to have stable inter-region connectivity (P2P links, not internet)
  • A config change that passes validation can still be bad at runtime - rollback is the recovery path
  • We are not building feature flag evaluation logic; this is the distribution layer

High-Level Architecture

The system splits into two planes: a control plane that manages versioning, validation, and change propagation; and a data plane that serves config reads with sub-millisecond latency to local services.

Multi-region config management architecture overview

The control plane lives in a primary region and consists of a Config API, a versioned Config Store backed by a distributed KV database, a Validation Engine, and a Propagation Coordinator. When an operator commits a config change through the Config API, the Validation Engine runs schema checks and optional canary deployment. If validation passes, the Propagation Coordinator fans out the change to all 20 regional Config Agents via a push channel.

Each region runs a Config Agent that receives pushed updates, writes them to a local Config Cache (an in-memory store with disk persistence), and serves all local service reads. Services never call the control plane directly - they call the local agent, so config reads survive control-plane outages entirely.

The Config Agent also runs a background reconciliation loop that compares its local version digest against the control plane’s expected version every 30 seconds - catching any divergence from missed pushes.

Key Insight

The data plane (local agent) and control plane (central store) must be completely decoupled for reads. Reads should never cross region boundaries; only writes should. This is what gives you both low-latency reads and high availability during control-plane failures.

The Config Store

Premium Content

Unlock the full article along with everything else in the archive — all in one place.

In-depth analysis Expert insights Full archive access
Unlock Full Article