在构建多区域高可用系统时常会用到DynamoDB全局表,它的每个区域都保存一份可写副本。当某个区域业务量突然上升,如果副本的读写容量还停留在旧值,请求就会被限流。DynamoDB replica auto scaling正是用来解决这个问题的能力,它让每个副本根据真实负载自动调整预置吞吐量,不需要运维人员盯着监控手动改数值。

副本自动扩缩的基本机制
DynamoDB本身并不在表内部直接实现副本扩缩,而是依赖AWS Application Auto Scaling服务。全局表创建后,每一个区域的副本都会被注册为一个可伸缩目标(Scalable Target),对应的资源类型标识为dynamodb:table,但维度上通过replica区分。系统会为副本绑定目标跟踪策略,核心参数是目标使用率,比如设定为70%,含义是希望实际消耗容量与预置容量的比值维持在七成左右。
当CloudWatch定时上报的副本消费指标超过阈值,Application Auto Scaling会发起UpdateTable调用,提升该副本的读或写容量单位。反之,在低谷期且过了冷却时间后,它会逐步下调容量。值得注意的是,副本扩缩和主表扩缩在策略上是分开配置的,某区域副本扩容不会强制其他区域同步扩容,这避免了跨区资源浪费。
如何开启与配置
可以通过控制台、CLI或IaC工具开启。以AWS CLI为例,先注册副本为伸缩目标,再挂一个目标跟踪策略。下面这段命令把美西副本的写容量目标使用率设为六十,最小五十最大五百。
# 注册副本为可伸缩目标
aws application-autoscaling register-scalable-target
--service-namespace dynamodb
--resource-id table/my_global_table/replica/us-west-2
--scalable-dimension dynamodb:table:WriteCapacityUnits
--min-capacity 50
--max-capacity 500
# 绑定目标跟踪策略
aws application-autoscaling put-scaling-policy
--service-namespace dynamodb
--resource-id table/my_global_table/replica/us-west-2
--scalable-dimension dynamodb:table:WriteCapacityUnits
--policy-name replica-write-target-tracking
--policy-type TargetTrackingScaling
--target-tracking-scaling-policy-configuration '{"TargetValue":60,"PredefinedMetricSpecification":{"PredefinedMetricType":"DynamoDBWriteCapacityUtilization"}}'
上面的PredefinedMetricType选用了写容量利用率,读容量同理换成DynamoDBReadCapacityUtilization。在实际项目中,建议给每个副本单独评估流量模型,不要直接复制同一套最大最小值,因为不同区域用户行为差异很大。
如果采用Terraform,也能用aws_appautoscaling_target与aws_appautoscaling_policy资源描述同样逻辑,好处是配置可版本化,方便回溯。但要注意副本资源ID里的区域字段必须和全局表实际副本一致,写错会导致注册到不存在的节点上。
扩缩行为与避坑点
副本自动扩缩默认采用阶梯式调整,并不是瞬间拉满。它的扩容动作相对敏感,通常在一两个监控周期后就触发;缩容则保守得多,除了要低于目标值,还要满足冷却时间,默认是两三分钟到更久,目的是防止容量在临界点来回跳动产生抖动费用。
一个常见误区是认为开了副本自动扩缩就可以完全不关心容量模式。其实若表本身是按需模式(on-demand),则不需要也不能配置基于预置的副本扩缩,因为按需模式由服务后台完全托管。只有预置模式(provisioned)的副本才适用本套机制。另外,若某副本长期为零流量却设了较高最小值,仍然会产生基础费用,应结合业务关掉无用副本而非只靠缩容。
与其他组件的协同
副本自动扩缩产生的变更都会记录在CloudTrail里,方便审计。与此同时,它触发的容量修改会和DynamoDB的本地配额、账户级并发控制相互作用。若账户在该区域有总容量上限,扩容可能被限,需要在服务配额页面提前提报提升申请。
在应用层,客户端最好配合重试与指数退避,因为扩缩生效前短暂限流仍可能出现。把副本自动扩缩看作弹性兜底,而不是实时精确调度,系统整体才更稳。对于读写比极度倾斜的场景,可以分别设读和写策略,让两者独立伸缩,进一步省成本。
小结
总体来看,DynamoDB replica auto scaling是通过Application Auto Scaling把每个全局表副本当成独立目标来做目标跟踪式容量管理。它隔离了区域间影响,支持细粒度配置,但只服务于预置模式,且扩缩节奏有自身保守特性。理清这些,才能在多区域业务里用得踏实。
DynamoDBreplica_auto_scalingcapacity_mode修改时间:2026-08-11 05:09:28