0Pricing
Cloud & IT Cert Prep · 课时

使用全局表与 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-1

Aurora 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.com

Active-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 gracefully

Active-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 反馈 — 无需本地设置。

此课程中的所有课时

  1. RTO、RPO 与 DR 层级
  2. 备份与还原
  3. 试点灯与温备
  4. 使用全局表与 Route 53 实现多站点主动-主动
← 返回 Cloud & IT Cert Prep