

# DAX 集群大小调整指南
<a name="DAX.sizing-guide"></a>

本指南提供了有关为您的应用程序选择适当的 Amazon DynamoDB Accelerator (DAX) 集群大小和节点类型的建议。这些说明将指导您完成估计应用程序的 DAX 流量、选择集群配置和测试它的步骤。

如果您有一个现有的 DAX 集群，并且想评估它是否具有适当的节点数和大小，请参阅 [DAX 集群的扩缩](DAX.cluster-management.md#DAX.cluster-management.scaling)。

**Topics**
+ [概述](#DAX.sizing-guide.overview)
+ [估计流量](#DAX.sizing-guide.estimating-traffic)
+ [负载测试](#DAX.sizing-guide.load-testing)

## 概述
<a name="DAX.sizing-guide.overview"></a>

无论您是创建新集群还是维护现有集群，请务必根据您的工作负载适当地扩展 DAX 集群。随着时间的推移和应用程序工作负载的变化，您应该定期重新访问扩展决策，以确保它们仍适用。

此过程通常遵循以下步骤：

1. **估计流量。**在此步骤中，您将预测应用程序向 DAX 发送的流量、流量的性质（读取和写入操作）以及预期的缓存命中率。

1. **负载测试。**在此步骤中，您将创建一个集群并向其发送流量，从而反映上一步中的估计值。重复此步骤，直至找到合适的集群配置。

1. **生产监控。**当您的应用程序在生产中使用 DAX 时，您应[监控集群](DAX.Monitoring.md)，以便持续验证它是否在工作负载随时间的推移而发生变化时仍正确扩展。

## 估计流量
<a name="DAX.sizing-guide.estimating-traffic"></a>

典型的 DAX 工作负载的特性通过三个主要因素进行描述：
+ 缓存命中率
+ 每秒[读取容量单位](provisioned-capacity-mode.md#read-write-capacity-units) (RCU)
+ 每秒[写入容量单位](provisioned-capacity-mode.md#read-write-capacity-units) (WCU)

### 估计缓存命中率
<a name="DAX.sizing-guide.estimating-traffic.hit-rate"></a>

如果您已有一个 DAX 集群，则可以使用 `ItemCacheHits` 和 `ItemCacheMisses` [Amazon CloudWatch 指标](dax-metrics-dimensions-dax.md)来确定缓存命中率。缓存命中率等于 `ItemCacheHits` / (`ItemCacheHits` \$1 `ItemCacheMisses`)。如果工作负载包括 `Query` 或 `Scan` 操作，则还应查看 `QueryCacheHits`、`QueryCacheMisses`、`ScanCacheHits` 和 `ScanCacheMisses` 指标。缓存命中率因应用程序而异，并且受集群的存活时间 (TTL) 设置的影响很大。使用 DAX 的应用程序的典型命中率为 85-95%。

### 估计读取和写入容量单位
<a name="DAX.sizing-guide.estimating-traffic.rcu-wcu"></a>

如果您已具有应用程序的 DynamoDB 表，请查看 `ConsumedReadCapacityUnits` 和 `ConsumedWriteCapacityUnits` [CloudWatch 指标](dax-metrics-dimensions-dax.md)。使用 `Sum` 统计数据并除以周期内的秒数。

如果您还有一个 DAX 集群，请记住 DynamoDB `ConsumedReadCapacityUnits` 指标仅考虑缓存未命中。因此，要了解 DAX 集群处理的每秒读取容量单位，请将该数字除以缓存未命中率（即，1 - 缓存命中率）。

如果您还没有 DynamoDB 表，请参阅有关[读取和写入容量单位](provisioned-capacity-mode.md#read-write-capacity-units)的文档，以便根据应用程序的估计请求速率、每个请求访问的项目数以及项目大小来估计流量。

在估计流量时，请对未来的增长以及预期的和意外的峰值进行计划，以确保您的集群有足够的流量增长空间。

## 负载测试
<a name="DAX.sizing-guide.load-testing"></a>

估计流量后，下一步是测试负载下的集群配置。

1. 对于初始负载测试，我们建议您从 `dax.r4.large` 节点类型开始，该类型是固定性能成本最低、且内存优化的节点类型。

1. 容错集群需要至少三个节点，它们分布在三个可用区中。在此情况下，如果可用区变得不可用，则可用区的有效数量将减少三分之一。对于初始负载测试，我们建议您从双节点集群开始，此类集群可模拟三节点集群中某个可用区的故障。

1. 在负载测试持续时间内，将持续的流量（如上一步中所估计的）驱动到测试集群。

1. 在负载测试期间监控集群性能。

理想情况下，您在负载测试期间驱动的流量剖析应尽可能与应用程序的实际流量相似。这包括操作的分布（例如，70% `GetItem`、25% `Query` 和 5% `PutItem`）、每个操作的请求速率、每个请求访问的项目数，以及项目大小的分布。要实现与应用程序的预期缓存命中率类似的缓存命中率，请密切注意测试流量中键的分布。

**注意**  
在对 T2 节点类型（`dax.t2.small` 和 `dax.t2.medium`）进行负载测试时，请务必小心。T2 节点类型提供[突发型 CPU 性能](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances.html)，此性能会随着时间的推移而发生变化，具体取决于节点的 CPU 积分余额。T2 节点上运行的 DAX 集群可能看起来运行正常，但如果任何节点的性能超出其实例的[基准性能](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-credits-baseline-concepts.html)，则该节点将消耗其累积的 CPU 积分余额。如果积分余额不足，则[性能会逐步减低](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/burstable-performance-instances-standard-mode.html)至基准性能水平。

在负载测试期间[监控您的 DAX 集群](DAX.Monitoring.md)以确定用于负载测试的节点类型是否为适合您的节点类型。此外，在负载测试期间，应监控您的请求速率和缓存命中率，从而确保测试基础设施实际上正在驱动您预期的流量。

 您应注意所选集群实例类型的网络字节消耗。如果超过 Amazon EC2 实例的可用基准带宽，则表明您的集群可能无法承受应用程序的工作负载，需要进行扩展。

如果负载测试表明选定的集群配置无法承受应用程序的工作负载，则应[切换到更大的节点类型](DAX.cluster-management.md#DAX.cluster-management.scaling.node-types)，尤其是在您发现集群中的主节点上的 CPU 利用率较高、驱逐率较高或缓存利用率较高的情况下。如果命中率始终很高，并且读写流量比率很高，则您可能需要考虑[向集群添加更多节点](DAX.cluster-management.md#DAX.cluster-management.scaling.read-scaling)。有关何时使用更大节点类型（垂直扩展）或添加更多节点（水平扩展）的其他指导，请参阅 [DAX 集群的扩缩](DAX.cluster-management.md#DAX.cluster-management.scaling)。

在更改集群配置后，应重复负载测试。