已解决:ap-southeast-2 中的 DynamoDB 错误

发布: (2026年2月25日 GMT+8 20:18)
8 分钟阅读
原文: Dev.to

Source: Dev.to

请提供您希望翻译的正文内容,我将为您翻译成简体中文。

TL;DR

DynamoDB 在 ap‑southeast‑2 区域的错误,常表现为 ProvisionedThroughputExceededException 或连接超时,通常是由于特定可用区内的本地网络“灰色故障”,而非容量问题。解决方案包括快速重启实例以及更稳健的架构改进,如调优 AWS SDK 客户端超时并实现 DynamoDB Gateway VPC Endpoint 以实现私有网络连接。

为什么会发生

  • AWS 区域 = 可用区(AZ)集合。
  • 单个 AZ 中的“灰色故障”可能会导致 DynamoDB 连接中断,即使整个区域状态显示为绿色。
  • AWS SDK 将 dynamodb.ap-southeast-2.amazonaws.com 解析为针对调用者所在 AZ 进行延迟优化的 IP。如果该特定前端出现瞬时网络故障,只有该 AZ 中的实例会看到失败。

专业提示: 永远不要假设一个区域是单一的、整体的单点故障服务。要在任何单独的 AZ 内部进行故障架构设计。

事件(真实案例)

“凌晨 2:47。PagerDuty 报警。我们在悉尼(ap‑southeast‑2)的主要认证服务抛出 ProvisionedThroughputExceededException 并出现连接 DynamoDB 的超时。prod‑users‑table 的 CloudWatch 指标保持平坦——没有容量耗尽。我们一半的登录尝试失败。”

经过一小时的调试我们发现:

  • 只有位于 AZ ap‑southeast‑2a 的实例出现故障。
  • 2b 和 2c 区域的实例状态正常。

这正是 AWS “灰色故障”的经典特征:一种局部的、通常与网络相关的故障,却不会让 AWS 状态页面变红。

三个方案——从快速修复到长期解决方案

#方案使用时机作用
1重启出现故障的 EC2 实例紧急情况,需要在几分钟内恢复服务强制创建新的网络接口、新的出站 IP 和全新的 DNS 解析,通常可绕过故障的网络路径。
2调优 AWS SDK 超时和重试策略希望获得可持续、低成本的修复,且能降低影响范围使客户端快速失败、积极重试,避免在不良连接上长时间卡住。
3部署 DynamoDB Gateway VPC 端点构建长期弹性且安全的架构在你的 VPC 与 DynamoDB 之间建立私有、直接的连接,绕过公共互联网,消除大量网络相关故障。

Play #2 – 示例:激进的 SDK 配置(Python/Boto3)

# Example in Python using Boto3
from botocore.config import Config
from boto3 import resource

# Configure a more aggressive timeout and retry strategy
#   • Connect timeout: 1 s
#   • Read timeout:    1 s
#   • Retries: 5 attempts with backoff
config = Config(
    connect_timeout=1,
    read_timeout=1,
    retries={'max_attempts': 5}
)

# Pass this config when creating your client or resource
dynamodb = resource('dynamodb',
                    region_name='ap-southeast-2',
                    config=config)

table = dynamodb.Table('prod-users-table')
# All calls using `table` now inherit the new timeouts.

此更改可以将 30 秒的用户可见停机时间转变为快速失败并重试的情形,大多数用户根本不会注意到。

第3幕 – 将问题从根本上设计消除

DynamoDB 网关 VPC 端点

  • 私有、直接连接 您的 VPC 与 DynamoDB。
  • 流量保持在 AWS 私有网络中——永不经过公共互联网
  • 提高可靠性,降低延迟,并增加安全边界(无需 NAT/IGW 出站)。

实现步骤(高层次):

  1. 打开 VPC 控制台 → Endpoints → Create Endpoint
  2. 选择 Service category: AWS services 并选中 com.amazonaws.ap-southeast-2.dynamodb
  3. 将端点关联到相应的 子网路由表
  4. (可选)添加 策略 以限制可以访问的 DynamoDB 表。
  5. 更新应用程序的 SDK 配置以使用 VPC 端点(通常在 DNS 解析到端点后自动生效)。

结论

  • 灰色故障 在单个可用区中可能伪装成容量问题。
  • 快速修复: 重启受影响的实例。
  • 短期弹性: 调整 SDK 的超时和重试。
  • 长期稳健性: 部署 DynamoDB Gateway VPC 端点。

通过分层采用这些方法,即使单个可用区出现故障,也能让您的身份验证服务(或任何基于 DynamoDB 的工作负载)保持平稳运行。 🚀

DynamoDB 的 VPC 端点

创建 VPC 端点可绕过公共 DNS 解析以及导致“灰色失败”的不可预测网络路径。您的流量始终停留在 VPC 内部,从而实现 可靠安全 的访问。

设置步骤

  1. 在 VPC 中创建网关端点
  2. 将端点关联到承载应用实例的子网的路由表
  3. 更新安全组,以允许通过端点的前缀列表访问 DynamoDB 服务。

这需要稍多的操作,但几乎可以消除此类问题,同时保持数据库流量不经互联网。

解决方案选项

#解决方案工作量有效性使用时机
1Reboot Instance非常低低(临时修复)在活跃事件期间恢复单个节点
2Tune SDK Client高(处理大多数情况)应作为所有生产应用的标准实践
3VPC Endpoint中等非常高(架构性修复)对可靠性和安全性至关重要的关键生产工作负载

TL;DR

当你遇到奇怪的、特定地区的 DynamoDB 错误时:

  1. 不要立刻把错误归咎于你的代码或容量规划。
  2. 检查是哪几个可用区(AZ)出现故障。
  3. 如果问题频繁出现或影响生产可靠性,考虑使用 VPC 端点。

记住:云其实是别人的电脑,有时这些电脑之间的网络线会稍微松动。


👉 阅读原文于 TechResolve.blog

支持我的工作
如果这篇文章对你有帮助,你可以请我喝杯咖啡:
👉

0 浏览
Back to Blog

相关文章

阅读更多 »