使用全局表与 Route 53 实现多站点主动-主动
使用 DynamoDB Global Tables、Aurora Global Database 和 Route 53 延迟路由,同时在两个或更多 Region 中运行完整的生产容量
使用全局表与 Route 53 实现多站点主动-主动 是 CoddyKit 上的免费 Cloud & IT Cert Prep 课时。 这是第 4 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 Cloud & IT Cert Prep 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 Cloud & IT Cert Prep 课程共包含 4 节课。
多站点 Active-Active 的定义
Multi-Site Active-Active 是灾难恢复的最高级别,应用程序同时以完整生产容量运行在两个或更多 AWS region 中。与等待接管的 active-passive 模式不同,在 Active-Active 模式下,两个 region 始终都为真实用户流量提供服务。当一个 region 发生故障时,另一个 region 会立即吸收 100% 的流量,不会产生 failover 延迟。这种模式还可以通过从距离全球用户最近的 region 提供服务来降低延迟。
# Active-Active traffic split (normal operation):
# us-east-1: serving ~50% of users (North America)
# eu-west-1: serving ~50% of users (Europe)
# Active-Active traffic split (us-east-1 failure):
# us-east-1: 0% (health check failed)
# eu-west-1: 100% (ASG scales up automatically)
# RTO: near-zero (DNS TTL propagation only)
# RPO: near-zero (with DynamoDB Global Tables)DynamoDB Global Tables 架构
DynamoDB Global Tables 是 Active-Active 架构的数据基础。Global Tables 支持多主、多 region 复制——任何 region 中的应用程序都可以对本地 DynamoDB 表进行读取和写入,更改会在大约 1 秒内复制到所有其他 region。您只需指定该表应存在于哪些 region 中,即可启用 Global Tables。AWS 会自动处理所有复制、冲突解决(最后写入者获胜)和 failover。
# Create DynamoDB table and add global regions
aws dynamodb create-table \
--table-name UserSessions \
--attribute-definitions AttributeName=userId,AttributeType=S \
--key-schema AttributeName=userId,KeyType=HASH \
--billing-mode PAY_PER_REQUEST \
--region us-east-1
# Add replica regions for Global Table
aws dynamodb update-table \
--table-name UserSessions \
--replica-updates '[{"Create":{"RegionName":"eu-west-1"}},{"Create":{"RegionName":"ap-southeast-1"}}]' \
--region us-east-1Aurora Global Database:写入 Active、读取 Active
Aurora Global Database 支持读取 Active,但写入 active-passive。所有 Secondary region 都可以提供读取服务,复制延迟低于 1 秒,而只有 Primary region 接受写入。这非常适合读取密集型应用程序:它们既希望在全球范围内实现低延迟读取,又需要明确的写入 Primary。在 Primary 发生区域故障期间,您可以在 1 分钟内将 Secondary 提升为 Primary,从而使写入层实现较低的 RTO。请与支持所有 region Active-Active 写入的 DynamoDB Global Tables 进行比较。
# Aurora Global Database read configuration
# Primary region (us-east-1): reads + writes
# Secondary region (eu-west-1): reads only
# ~100ms replication lag, serves EU users low-latency reads
# Application reads from local Aurora endpoint
# Application writes to primary region Aurora endpoint
# Java connection string with region routing:
# readEndpoint=eu-west-1.cluster-ro-xxx.aurora.amazonaws.com
# writeEndpoint=us-east-1.cluster-xxx.aurora.amazonaws.comActive-Active 的 Route 53 路由
Route 53 是多站点 Active-Active 架构的流量调度器。使用基于延迟的路由,将每位用户发送到从其所在位置看网络延迟最低的 region。为每个区域记录附加健康检查——当某个 region 未通过健康检查时,Route 53 会自动将其从 DNS 响应中移除,把所有流量发送到其余健康 region。将 DNS 的 TTL 设置为 60 秒或更短,以尽量缩短用户 failover 到健康 region 所需的时间。
# Route 53 latency routing with health checks
aws route53 change-resource-record-sets \
--hosted-zone-id ZXXX \
--change-batch '{
"Changes": [
{
"Action": "UPSERT",
"ResourceRecordSet": {
"Name": "api.example.com",
"Type": "A",
"Region": "us-east-1",
"SetIdentifier": "us-east-1",
"HealthCheckId": "hc-us-east-1",
"AliasTarget": {"DNSName": "alb-us-east-1.amazonaws.com", "EvaluateTargetHealth": false}
}
}
]
}'用于吸收流量的 Auto Scaling
在 Active-Active 设置中,当一个 region 发生故障时,存活的 region 必须处理正常流量的 2 倍(或更多)。您的 Auto Scaling Group 必须具备足够的最大容量和能够快速响应的扩展策略。根据每个目标的 ALB 请求数配置目标跟踪扩展,这样当流量翻倍时,ASG 会自动添加实例。此外还应考虑预热:在 failover 演练期间,观察 ASG 扩展的速度,并确保它能在 RTO 目标时间内达到所需容量。
# ASG target tracking for request count
aws autoscaling put-scaling-policy \
--auto-scaling-group-name app-asg-eu-west-1 \
--policy-name scale-on-requests \
--policy-type TargetTrackingScaling \
--target-tracking-configuration '{
"TargetValue": 1000,
"PredefinedMetricSpecification": {
"PredefinedMetricType": "ALBRequestCountPerTarget",
"ResourceLabel": "app/my-alb/xxx/targetgroup/my-tg/yyy"
},
"ScaleInCooldown": 60,
"ScaleOutCooldown": 30
}'Active-Active 中的会话管理
在单 region 架构中,用户会话可以在本地应用程序服务器上存储。在 Active-Active 多 region 架构中,用户后续请求可能会在不同 region 之间切换,从而导致服务器端会话失效。解决方案包括:1) 无状态会话——将会话数据存储在签名 JWT 或 Cookie 中,任何 region 中的服务器都可以对其进行验证。2) 使用 DynamoDB Global Tables 存储会话——集中存储会话,并从任何 region 以毫秒级速度访问。3) 使用带有 Global Datastore 的 ElastiCache——通过跨 region 的 Redis 复制来存储会话。
# DynamoDB Global Table for session storage
# Session item structure:
{
'sessionId': 'sess-abc123',
'userId': 'usr-456',
'data': {'cart': [...], 'preferences': {}},
'expiresAt': 1750000000,
'lastUpdatedRegion': 'us-east-1'
}
# Application reads from local region DynamoDB
# Writes replicate to all regions within ~1 second
# No sticky sessions needed on the ALB写入冲突与解决
在多主写入的 Active-Active 架构中,最大的挑战是写入冲突。如果不同 region 中的两位用户同时更新同一条记录,哪一次更新应当生效?DynamoDB Global Tables 根据写入时间戳采用最后写入者获胜的规则。这对大多数使用场景都很有效,但对于相互竞争的更新可能会造成数据丢失(例如两位用户同时递增一个计数器)。请使用条件写入,或按 region 划分数据所有权,从而设计出能够避免不同 region 并发写入同一项目的数据模型。
# Avoid conflicts with conditional writes
aws dynamodb update-item \
--table-name UserProfiles \
--key '{"userId":{"S":"usr-123"}}' \
--update-expression 'SET profileVersion = profileVersion + :inc, username = :name' \
--condition-expression 'profileVersion = :expectedVersion' \
--expression-attribute-values '{
":inc":{"N":"1"},
":name":{"S":"newname"},
":expectedVersion":{"N":"5"}
}'
# If another region already updated version, this fails gracefullyActive-Active 中的 S3 复制
对于 Active-Active 中的对象存储,请使用支持双向复制的 S3 跨 region 复制(适用于已启用版本控制的 Bucket)。与单向 CRR 不同,双向复制会使两个 region 的 Bucket 保持同步——在任一 region 中写入的对象都会自动复制到另一个 region。这对于以下应用程序至关重要:它们将用户上传的文件写入本地 region 的 S3 Bucket,但又需要让这些文件在全球范围内可访问。启用 S3 Replication Time Control (RTC),以保证 99.99% 的对象在 15 分钟内完成复制。
# Bidirectional S3 replication
# Bucket A (us-east-1) replicates to Bucket B (eu-west-1)
# Bucket B (eu-west-1) replicates to Bucket A (us-east-1)
# Enable S3 RTC for guaranteed replication time
aws s3api put-bucket-replication \
--bucket us-east-1-uploads \
--replication-configuration '{
"Rules": [{
"Status": "Enabled",
"ReplicationTime": {"Status": "Enabled", "Time": {"Minutes": 15}},
"Metrics": {"Status": "Enabled", "EventThreshold": {"Minutes": 15}},
"Destination": {"Bucket": "arn:aws:s3:::eu-west-1-uploads"}
}]
}'使用多 region Origin 的 CloudFront
使用带有 OriginGroups 的 CloudFront,创建具备自动 failover 能力的 Active-Active CDN。配置一个 Primary Origin(位于 us-east-1 的 ALB)和一个 Secondary Origin(位于 eu-west-1 的 ALB)。当 Primary 返回 5xx 错误时,CloudFront 会自动 failover 到 Secondary Origin。对于从 S3 提供的静态资源,请配置指向多个 region 中 S3 Bucket 的 OriginGroups,并启用双向复制。这会在 Route 53 Active-Active 路由之上增加一层 CDN 级别的弹性。
# CloudFront origin group for multi-region failover
aws cloudfront create-distribution \
--distribution-config '{
"Origins": {
"Quantity": 2,
"Items": [
{"Id": "us-east-1", "DomainName": "alb-us-east-1.amazonaws.com"},
{"Id": "eu-west-1", "DomainName": "alb-eu-west-1.amazonaws.com"}
]
},
"OriginGroups": {
"Items": [{
"Id": "multi-region-group",
"FailoverCriteria": {"StatusCodes": {"Items": [500,502,503,504]}},
"Members": {"Items": [{"OriginId": "us-east-1"},{"OriginId": "eu-west-1"}]}
}]
}
}'Active-Active 健康状况监控
Active-Active 架构需要强大的监控能力,以确保两个 region 均处于健康状态,并且流量按预期保持均衡。关键指标包括:每个 region 的 Route 53 HealthCheckPercentageHealthy、Global Tables 的 DynamoDB ReplicationLatency、用于验证流量分布的每个 region 的 ALB RequestCount,以及提供统一视图的 CloudWatch 跨账户/跨 region 控制面板。当复制延迟超过 RPO 阈值,或流量分布严重失衡时,请设置告警。
# CloudWatch alarm for DynamoDB Global Table replication lag
aws cloudwatch put-metric-alarm \
--alarm-name 'GlobalTable-ReplicationLag-eu-west-1' \
--metric-name ReplicationLatency \
--namespace AWS/DynamoDB \
--dimensions Name=TableName,Value=UserSessions Name=ReceivingRegion,Value=eu-west-1 \
--period 60 \
--evaluation-periods 3 \
--threshold 5000 \
--comparison-operator GreaterThanThreshold \
--alarm-actions arn:aws:sns:us-east-1:123:ops-alerts何时应选择 Active-Active
在以下情况下,Active-Active 适合您的需求:用户分布在全球各地,访问单个 region 的延迟无法接受;RTO 必须接近零,业务无法容忍哪怕几分钟的停机;高写入吞吐量要求将写入分散到多个 region;监管要求规定必须在境内处理数据。其成本显著高于其他 DR 级别,因此只有在业务需求和经济性都明确支持时,才应选择 Active-Active。对于许多工作负载,Warm Standby 已经足够,而且成本低得多。
# Active-Active justification checklist:
# [ ] Users in 2+ continents with latency SLAs
# [ ] RTO requirement < 5 minutes
# [ ] Revenue impact of downtime justifies 2x+ cost
# [ ] Data must remain within specific regions (regulations)
# [ ] Write throughput exceeds single-region capacity
# If fewer than 2-3 boxes checked:
# Consider Warm Standby instead (lower cost, adequate RTO)快速检查
测试您对本课 AWS Solutions Architect (SAA-C03) 概念的理解。
课程回顾
本课您学到了:DynamoDB Global Tables 支持跨 region 的多主写入,从而实现真正的 Active-Active;Route 53 的延迟路由结合健康检查,可将用户引导至距离最近的健康 region;Active-Active 中的会话管理必须采用无状态方式,或使用全局复制的存储。Active-Active 可以提供接近零的 RTO 和 RPO,但成本显著更高。接下来,我们将学习 Well-Architected Framework 的 Operational Excellence 和 Security 支柱。
常见问题解答
「使用全局表与 Route 53 实现多站点主动-主动」课时是免费的吗?
是的 — 「使用全局表与 Route 53 实现多站点主动-主动」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 Cloud & IT Cert Prep 课程的其余内容,请升级到 CoddyKit PRO。 Cloud & IT Cert Prep 课程共包含 4 节课。
「使用全局表与 Route 53 实现多站点主动-主动」这节课中我会学到什么?
使用 DynamoDB Global Tables、Aurora Global Database 和 Route 53 延迟路由,同时在两个或更多 Region 中运行完整的生产容量 你通过在浏览器中直接运行的动手代码来练习 Cloud & IT Cert Prep,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 Cloud & IT Cert Prep 需要有经验吗?
无需任何先前经验。CoddyKit 上的 Cloud & IT Cert Prep 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 4 节课,共 4 节。
「使用全局表与 Route 53 实现多站点主动-主动」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 Cloud & IT Cert Prep 课中编写并运行代码吗?
能。每节 Cloud & IT Cert Prep 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- RTO、RPO 与 DR 层级
- 备份与还原
- 试点灯与温备
- 使用全局表与 Route 53 实现多站点主动-主动