评估预置容量大小是否合适 - Amazon Keyspaces(Apache Cassandra 兼容)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

评估预置容量大小是否合适

本节概述如何评估您的 Amazon Keyspaces 表预置容量大小是否合适。随着工作负载的演变,您应该相应地修改操作程序,尤其是在您的 Amazon Keyspaces 表以预置模式配置时,因为它们可能存在过度预置或预置不足的风险。

本节中所述的过程需要从支持您的生产应用程序的 Amazon Keyspaces 表捕获的统计信息。要了解您的应用程序行为,应该定义一个足够长的周期,以捕获应用程序的数据季节性特点。例如,如果您的应用程序表现出周模式,则不妨使用三周的周期来分析应用程序吞吐量需求。

如果您不知道从哪里开始,可根据至少一个月的使用数据来进行以下计算。

在评估容量时,您可以为 Amazon Keyspaces 表单独配置读取容量单位 (RCU)写入容量单位 (WCU)

如何从 Amazon Keyspaces 表中检索使用指标

要评估表容量,请监控以下 CloudWatch 指标并选择相应的维度来检索表格信息:

读取容量单位 写入容量单位

ConsumedReadCapacityUnits

ConsumedWriteCapacityUnits

ProvisionedReadCapacityUnits

ProvisionedWriteCapacityUnits

ReadThrottleEvents

WriteThrottleEvents

您可以通过 Amazon CLI 或来执行此操作 Amazon Web Services Management Console。

Amazon CLI

在检索表格消耗指标之前,您需要先使用 CloudWatch API 捕获一些历史数据点。

首先创建两个文件:write-calc.jsonread-calc.json。这些文件代表表的计算。您需要更新一些字段(如下表所示)以匹配您的环境。

注意

如果表名称在账户中不是唯一的,则还必须指定键空间的名称。

字段名称 定义 示例
<table-name> 您要分析的表的名称 SampleTable
<period> 您要用来评估利用率目标的周期(以秒为单位) 对于 1 小时的周期,应指定:3600
<start-time> 评估间隔的开始时间,以 ISO8601 格式指定 2022-02-21T23:00:00
<end-time> 评估间隔的结束时间,以 ISO8601 格式指定 2022-02-22T06:00:00

写入计算文件将检索指定日期范围内的时间段中预置和使用的 WCU 数量。它还将生成可用于分析的利用率百分比。write-calc.json 文件的完整内容应类似于以下示例。

{ "MetricDataQueries": [ { "Id": "provisionedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/Cassandra", "MetricName": "ProvisionedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedWCU", "MetricStat": { "Metric": { "Namespace": "AWS/Cassandra", "MetricName": "ConsumedWriteCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>"" } ] }, "Period": <period>, "Stat": "Sum" }, "Label": "", "ReturnData": false }, { "Id": "m1", "Expression": "consumedWCU/PERIOD(consumedWCU)", "Label": "Consumed WCUs", "ReturnData": false }, { "Id": "utilizationPercentage", "Expression": "100*(m1/provisionedWCU)", "Label": "Utilization Percentage", "ReturnData": true } ], "StartTime": "<start-time>", "EndTime": "<end-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

读取计算文件使用类似的指标。此文件将检索指定日期范围内的时间段中预置和使用的 RCU 数量。read-calc.json 文件的内容应类似于以下示例。

{ "MetricDataQueries": [ { "Id": "provisionedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/Cassandra", "MetricName": "ProvisionedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Average" }, "Label": "Provisioned", "ReturnData": false }, { "Id": "consumedRCU", "MetricStat": { "Metric": { "Namespace": "AWS/Cassandra", "MetricName": "ConsumedReadCapacityUnits", "Dimensions": [ { "Name": "TableName", "Value": "<table-name>" } ] }, "Period": <period>, "Stat": "Sum" }, "Label": "", "ReturnData": false }, { "Id": "m1", "Expression": "consumedRCU/PERIOD(consumedRCU)", "Label": "Consumed RCUs", "ReturnData": false }, { "Id": "utilizationPercentage", "Expression": "100*(m1/provisionedRCU)", "Label": "Utilization Percentage", "ReturnData": true } ], "StartTime": "<start-time>", "EndTime": "<end-time>", "ScanBy": "TimestampDescending", "MaxDatapoints": 24 }

创建文件后,即可开始检索利用率数据。

  1. 要检索写入利用率数据,请发出以下命令:

    aws cloudwatch get-metric-data --cli-input-json file://write-calc.json
  2. 要检索读取利用率数据,请发出以下命令:

    aws cloudwatch get-metric-data --cli-input-json file://read-calc.json

这两个查询的结果都是一系列 JSON 格式的数据点,可用于分析。您的结果取决于您指定的数据点数量、周期和您自己的特定工作负载数据。它可能类似于以下示例。

{ "MetricDataResults": [ { "Id": "utilizationPercentage", "Label": "Utilization Percentage", "Timestamps": [ "2022-02-22T05:00:00+00:00", "2022-02-22T04:00:00+00:00", "2022-02-22T03:00:00+00:00", "2022-02-22T02:00:00+00:00", "2022-02-22T01:00:00+00:00", "2022-02-22T00:00:00+00:00", "2022-02-21T23:00:00+00:00" ], "Values": [ 91.55364583333333, 55.066631944444445, 2.6114930555555556, 24.9496875, 40.94725694444445, 25.61819444444444, 0.0 ], "StatusCode": "Complete" } ], "Messages": [] }
注意

如果您指定了短周期和长时间范围,则可能需要修改 MaxDatapoints 值,该值在脚本中默认设置为 24。这表示每小时一个数据点,每天 24 个数据点。

Amazon Web Services Management Console
  1. 登录 Amazon Web Services Management Console 并导航到 “入门” 中的 CloudWatch 服务页面 Amazon Web Services Management Console。如有必 Amazon Web Services 区域 要,请选择相应的。

  2. 在左侧导航栏中,找到“指标”部分,然后选择所有指标

  3. 这将打开一个控制面板,其中包含两个面板。顶部面板显示图表,底部面板显示要绘成图表的指标。选择“Amazon Keyspaces”面板。

  4. 从子面板中选择表指标类别。这会显示当前表格 Amazon Web Services 区域。

  5. 识别您的表名,方法是向下滚动菜单并选择写入操作指标:ConsumedWriteCapacityUnitsProvisionedWriteCapacityUnits

    注意

    本例中使用了写入操作指标,但您也可以使用这些步骤绘制读取操作指标图。

  6. 选择绘成图表的指标(2) 选项卡来修改公式。默认情况下,为图表 CloudWatch 选择统计函数 “平均值”。

  7. 选中两个图表化指标(左侧的复选框)后,选择菜单添加数学函数,然后选择常用,再选择 Percentage 函数。重复该过程两次。

    第一次选择 Percentage 函数。

    第二次选择 Percentage 函数。

  8. 此时,底部菜单中应该有四个指标。我们来进行 ConsumedWriteCapacityUnits 计算。为了保持一致,您需要将名称与您在本 Amazon CLI 节中使用的名称相匹配。单击 m1 ID 并将此值更改为 consumedWCU

  9. 将统计函数从 Average 改为 Sum。此操作将自动创建另一个名为 ANOMALY_DETECTION_BAND 的指标。在此过程中,您可以通过删除新生成的 ad1 指标上的复选框来忽略它。

  10. 重复步骤 8,将 m2 ID 重命名为 provisionedWCU。保留统计函数设置为 Average

  11. 选择 Expression1 标签,并将值更新为 m1,将标签更新为 Consumed WCUs

    注意

    确保您只选择了 m1(左侧的复选框)和 provisionedWCU 以正确可视化数据。更新公式,方法是单击详细信息并将公式更改为 consumedWCU/PERIOD(consumedWCU)。这一步还可能生成另一个 ANOMALY_DETECTION_BAND 指标,但在此过程中,您可以忽略它。

  12. 您现在应该有两个图表:一个表示表上预置的 WCU,另一个表示已使用的 WCU。

  13. 通过选择 Expression2 图形 (e2) 来更新百分比公式。将标签和 ID 重命名为 utilizationPercentage。重命名公式,以匹配 100*(m1/provisionedWCU)

  14. 清除除 utilizationPercentage 之外的所有指标的复选框,以可视化您的利用率模式。默认间隔设置为 1 分钟,但您可以根据需要随意修改。

您获得的结果取决于您的工作负载中的实际数据。利用率超过 100% 的间隔容易导致吞出容量不足错误事件。Amazon Keyspaces 提供容量暴增,但一旦这些容量耗尽,任何超过 100% 的使用都会遇到吞出容量不足错误事件。

如何识别预置不足的 Amazon Keyspaces 表

对于大多数工作负载,如果一个表持续使用其预置容量超过 80%,该表将被视为预置不足。

容量暴增是 Amazon Keyspaces 的一项功能,它允许客户临时使用比最初预置更多的 RCU/WCU(超过为表定义的每秒预置吞吐量)。创建容量暴增的目的是应对因特殊事件或使用量高峰而突然增加的流量。这个容量暴增是有限的,要了解更多信息,请参阅在 Amazon Keyspaces 中有效使用突发容量。一旦未使用的 RCU 和 WCU 耗尽,您再试图使用比预置更多的容量时,可能就会遇到吞出容量不足错误事件。当您的应用程序流量接近 80% 的利用率时,您遇到吞出容量不足错误事件的风险就会大大增加。

80% 的利用率规则因数据的季节性和流量增长而异。考虑以下场景:

  • 如果您的流量在过去 12 个月中一直稳定在大约 90% 的利用率,那么您的表容量正合适

  • 如果您的应用程序流量在不到 3 个月内以每月 8% 的速度增长,那么您将达到 100% 利用率

  • 如果您的应用程序流量在略长于 4 个月内以每月 5% 的速度增长,那么您仍然将达到 100% 利用率

以上查询的结果可以说明您的利用率。将它们作为指导,来进一步评估其他指标,以帮助您在需要时选择增加表容量(例如:每月或每周增长率)。与您的运营团队合作,为您的工作负载和表定义一个合适的百分比。

在有些特殊场景中,当您每天或每周进行数据分析时,会发现数据是倾斜的。例如,季节性应用程序在工作时间会出现使用量激增情况(但在工作时间之外则降至接近零),您可以使用计划 Application Auto Scaling 来指定一天中什么时间(以及一周中的星期几)增加预置容量,以及什么时间减少预置容量。即使您的季节性不那么明显,也可以利用 Amazon Keyspaces 表自动扩缩配置,而无需为了满足繁忙时段的需求而设定较高的容量。

如何识别过度预置的 Amazon Keyspaces 表

从上述脚本中获得的查询结果提供了执行某些初始分析所需的数据点。如果您的数据集在多个时间间隔内显示为利用率低于 20%,则您的表可能配置过度。要进一步确定是否需要减少 WCU 和 RCU 的数量,应重新查看间隔内的其他读数。

当您的表包含多个低使用量间隔时,您可以使用 Application Auto Scaling 策略,计划 Application Auto Scaling 或者为表配置基于利用率的默认 Application Auto Scaling 策略。

如果您的工作负载具有低利用率与高限制比(间隔内的最大值 (ThrottleEvents) /最小 (ThrottleEvents)),则当您的工作负载非常激增,流量在特定日期(或一天中的时间)显著增加,但其他方面却持续较低时,可能会发生这种情况。在这些场景中,使用计划 Application Auto Scaling 可能很有好处。