本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
评估表的 Application Auto Scaling 设置
本节概述如何评估 Amazon Keyspaces 表上的 Application Auto Scaling 设置。Amazon Keyspaces Application Auto Scaling 是一项功能,用于根据您的应用程序流量和目标利用率指标来管理表吞吐量。这可以确保您的表具有应用程序模式所需的容量。
Application Auto Scaling 服务将监控您当前的表利用率,并与目标利用率值 TargetValue
作比较。当需要增加或减少分配的容量时,它会通知您。
主题
了解 Application Auto Scaling 设置
为目标利用率、初始步骤和最终值定义正确的值是一项需要运营团队参与的活动。这让您可以根据应用程序的历史使用量来适当地定义值,以便触发 Application Auto Scaling 策略。利用率目标是总容量的百分比值,需要在一段时间内达到后,才会应用 Application Auto Scaling 规则。
当您设置高利用率目标(大约 90%)时,意味着流量在一段时间内高于 90% 后才会激活 Application Auto Scaling。除非您的应用程序非常稳定且不会收到高峰流量,否则不应使用高利用率目标。
当您设置非常低的利用率目标(低于 50%)时,意味着您的应用程序需要达到预置容量的 50% 后才会触发 Application Auto Scaling 策略。除非您的应用程序流量以非常激进的速度增长,否则这通常会造成未用的容量和浪费的资源。
如何识别具有低目标利用率 (<=50%) 的表
您可以使用 Amazon CLI 或 Amazon Web Services Management Console 在 Amazon Keyspaces 资源TargetValues
中监控和识别您的应用程序 Auto Scaling 策略:
如果您的目标利用率值小于或等于 50%,则应浏览您的表利用率指标,看看这些指标是配置不足还是过度配置。
如何处理具有季节性差异的工作负载
考虑以下场景:您的应用程序大部分时间都在最低平均值下运行,但是利用率目标较低,所以您的应用程序可以对一天中特定时间发生的事件做出快速反应,并且您有足够的容量来避免节流。当您的应用程序在正常办公时间(上午 9 点到下午 5 点)非常繁忙,但在下班后处于基本工作水平时,这种场景很常见。因为一些用户会在上午 9 点前开始连接,所以应用程序使用这个低阈值来实现快速提高,以便在高峰时段达到所需容量。
此场景可能是这样的:
-
下午 5 点到上午 9 点之间,
ConsumedWriteCapacityUnits
单位保持在 90 到 100 之间 -
用户在上午 9 点之前开始连接到应用程序,容量单位显著增加(您看到的最大值为 1500WCU)
-
平均下来,您的应用程序在工作时间内的使用量在 800 到 1200 之间变化
如果前面的场景适合您的应用程序,可考虑使用计划 Application Auto Scaling,在这种情况下,您的表仍可以配置 Application Auto Scaling 规则,但目标利用率不那么激进,只是在您需要的特定间隔预置了额外容量。
您可以使用执行以下步骤 Amazon CLI 来创建根据一天中的时间和一周中的某一天执行的定时自动缩放规则。
-
使用 Application Auto Scaling将您的 Amazon Keyspaces 表注册为可扩展目标。可扩展目标是 Application Auto Scaling 可以扩大或缩小的资源。
aws application-autoscaling register-scalable-target \ --service-namespace cassandra \ --scalable-dimension cassandra:table:WriteCapacityUnits \ --resource-id keyspace/
keyspace-name
/table/table-name
\ --min-capacity 90 \ --max-capacity 1500 -
根据您的要求设置预定操作。
在此场景中,您需要两条规则:一条规则用来扩展,一条规则用来缩减。用来扩展预定操作的第一条规则如下面的示例所示。
aws application-autoscaling put-scheduled-action \ --service-namespace cassandra \ --scalable-dimension cassandra:table:WriteCapacityUnits \ --resource-id keyspace/
keyspace-name
/table/table-name
\ --scheduled-action-name my-8-5-scheduled-action \ --scalable-target-action MinCapacity=800,MaxCapacity=1500 \ --schedule "cron(45 8 ? * MON-FRI *)" \ --timezone "Australia/Brisbane"用来缩减预定操作的第二条规则如下面的示例所示。
aws application-autoscaling put-scheduled-action \ --service-namespace cassandra \ --scalable-dimension cassandra:table:WriteCapacityUnits \ --resource-id keyspace/
keyspace-name
/table/table-name
\ --scheduled-action-name my-5-8-scheduled-down-action \ --scalable-target-action MinCapacity=90,MaxCapacity=1500 \ --schedule "cron(15 17 ? * MON-FRI *)" \ --timezone "Australia/Brisbane" -
运行以下命令来验证两条规则是否已激活:
aws application-autoscaling describe-scheduled-actions --service-namespace cassandra
应得到类似如下的结果:
{ "ScheduledActions": [ { "ScheduledActionName": "my-5-8-scheduled-down-action", "ScheduledActionARN": "arn:aws:autoscaling:<region>:<account>:scheduledAction:<uuid>:resource/keyspaces/table/
table-name
:scheduledActionName/my-5-8-scheduled-down-action", "ServiceNamespace": "cassandra", "Schedule": "cron(15 17 ? * MON-FRI *)", "Timezone": "Australia/Brisbane", "ResourceId": "keyspace/keyspace-name
/table/table-name
", "ScalableDimension": "cassandra:table:WriteCapacityUnits", "ScalableTargetAction": { "MinCapacity": 90, "MaxCapacity": 1500 }, "CreationTime": "2022-03-15T17:30:25.100000+10:00" }, { "ScheduledActionName": "my-8-5-scheduled-action", "ScheduledActionARN": "arn:aws:autoscaling:<region>:<account>:scheduledAction:<uuid>:resource/keyspaces/table/table-name
:scheduledActionName/my-8-5-scheduled-action", "ServiceNamespace": "cassandra", "Schedule": "cron(45 8 ? * MON-FRI *)", "Timezone": "Australia/Brisbane", "ResourceId": "keyspace/keyspace-name
/table/table-name
", "ScalableDimension": "cassandra:table:WriteCapacityUnits", "ScalableTargetAction": { "MinCapacity": 800, "MaxCapacity": 1500 }, "CreationTime": "2022-03-15T17:28:57.816000+10:00" } ] }
下图显示了一个始终保持 70% 目标利用率的示例工作负载。请注意观察,如何做到自动扩缩规则仍在应用,而吞吐量不会降低。
放大图片,我们可以看到,应用程序中有一个高峰,它触发了 70% 自动扩缩阈值,迫使自动扩缩启动,来为表提供所需的额外容量。计划的 auto Scaling 操作将影响最大值和最小值,您有责任对其进行设置。
如何处理具有未知模式的尖峰工作负载
在这种场景中,应用程序使用非常低的利用率目标,因为您尚不清楚应用程序的模式,需要确保工作负载不遇到吞出容量不足错误。
可考虑改用按需容量模式。按需模式表非常适合您不知道流量模式的尖峰工作负载。在按需容量模式下,您按请求为应用程序在表上执行的数据读取和写入付费。您无需指定应用程序预计将执行多少读取和写入吞吐量,因为 Amazon Keyspaces 会根据工作负载的增减来即时做出调整。
如何处理具有关联应用程序的工作负载
在这种场景中,应用程序依赖其他系统,例如在批处理场景中,根据应用程序逻辑中的事件,您会遇到非常大的流量尖峰。
可考虑开发自定义 Application Auto Scaling 逻辑,以便对那些您可以根据自己的具体需求增加表容量和 TargetValues
的事件作出反应。您可以从 λ Amazon EventBridge 和 Step Functi Amazon ons 等服务组合中受益并使用这些服务来满足您的特定应用需求。