评估表的 Application Auto Scaling 设置 - Amazon Keyspaces (for Apache Cassandra)
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

评估表的 Application Auto Scaling 设置

本节概述如何评估 Amazon Keyspaces 表中的Application Auto Scaling设置。Amazon Keyspaces 应用程序 Auto Scaling是一项根据应用程序流量和目标利用率指标管理表吞吐量的功能。这样可以确保您的表具有应付需要解决的问题,再开始处理的问题。

Application Auto Scaling 服务监控你当前表使用率,并将其与目标使用率值进行比较:TargetValue。它会通知您是时候增加或减少分配的容量。

了解您的 Auto Scaling 设置

为目标利用率、初始步骤和最终值定义正确的值是一项需要运营团队参与的活动。这让你能够根据应用程序使用情况的历史使用量正确定义值,即在触发应用上 Auto Scaling 策略。使用率目标是一个百分比,即在Appluests Auto Scaling规则适用之前,在一段时间内,需要在预置容量中,让预置容量。

当你设置高利用率目标(目标约为 90%)相比之下,需要先了解需要激活Application Auto Scaling之前的一段时间,再开始激活Application Auto Scaling。除非您的应用程序非常稳定且不会收到高峰流量,否则不应使用高利用率目标。

当你设置一个非常利用率低(目标低于 50%)这意味着在触发Appluests 之前,你的应用程序需要达到预置容量的 50%。除非您的应用程序流量以非常激进的速度增长,否则这通常会转化为使用容量和资源浪费。

如何识别具有低目标利用率 (<=50%) 的表

你可以使用Amazon CLI要么Amazon Web Services Management Console监视和识别TargetValues对于您的 Amazon Keyspaces 资源中的应用程序 Auto Scaling 策略:

Amazon CLI
  1. 通过运行以下命令返回整个资源列表:

    aws application-autoscaling describe-scaling-policies --service-namespace cassandra

    此命令将返回向任何 Amazon Keyspaces 资源发布的应用程序 Auto Scaling 策略的完整列表。如果您只想检索来自特定表的资源,则可以添加 –resource-id parameter。例如:

    aws application-autoscaling describe-scaling-policies --service-namespace cassandra --resource-id "keyspace/keyspace-name/table/table-name
  2. 通过运行以下命令来返回特定表的 auto Scaling 策略

    aws application-autoscaling describe-scaling-policies --service-namespace cassandra --resource-id "keyspace/keyspace-name/table/table-name

    Apache Apache Apache Apache Scaling () 您需要确保目标值大于 50%。您应该得到类似如下的结果:

    { "ScalingPolicies": [ { "PolicyARN": "arn:aws:autoscaling:<region>:<account-id>:scalingPolicy:<uuid>:resource/keyspaces/table/table-name-scaling-policy", "PolicyName": $<full-gsi-name>”, "ServiceNamespace": "cassandra", "ResourceId": "keyspace/keyspace-name/table/table-name", "ScalableDimension": "cassandra:index:WriteCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "KeyspacesWriteCapacityUtilization" } }, "Alarms": [ ... ], "CreationTime": "2022-03-04T16:23:48.641000+10:00" }, { "PolicyARN": "arn:aws:autoscaling:<region>:<account-id>:scalingPolicy:<uuid>:resource/keyspaces/table/table-name/index/<index-name>:policyName/$<full-gsi-name>-scaling-policy", "PolicyName":$<full-table-name>”, "ServiceNamespace": "cassandra", "ResourceId": "keyspace/keyspace-name/table/table-name", "ScalableDimension": "cassandra:index:ReadCapacityUnits", "PolicyType": "TargetTrackingScaling", "TargetTrackingScalingPolicyConfiguration": { "TargetValue": 70.0, "PredefinedMetricSpecification": { "PredefinedMetricType": "CassandraReadCapacityUtilization" } }, "Alarms": [ ... ], "CreationTime": "2022-03-04T16:23:47.820000+10:00" } ] }
Amazon Web Services Management Console
  1. 登录到Amazon Web Services Management Console并导航到 CloudWatch 服务页面位于Name table theAmazon Web Services Management Console。选择相应的Amazon Web Services 区域如有必要。

  2. 在左侧导航栏上,选择 Tables(表)。在 Tables(表)页面上,选择表的 Name(名称)。

  3. 表格详情页面上容量选项卡,查看表格的 Apache Apache Apache Scaling设置。

如果您的目标利用率值小于或等于 50%,则应浏览您的表利用率指标,看看这些指标是配置不足还是过度配置

如何处理具有季节性差异的工作负载

考虑以下场景:您的应用程序大部分时间都在最低平均值下运行,但是利用率目标较低,所以您的应用程序可以对一天中特定时间发生的事件做出快速反应,并且您有足够的容量来避免节流。当您的应用程序在正常办公时间(上午 9 点到下午 5 点)非常繁忙,但在下班后处于基本工作水平时,这种场景很常见。由于某些用户在上午 9 点之前开始连接,因此该应用程序使用此低阈值来快速上升以达到规定的高峰时段的容量。

此场景可能是这样的:

  • 下午 5 点到上午 9 点之间,ConsumedWriteCapacityUnits 单位保持在 90 到 100 之间

  • 用户在上午 9 点之前开始连接到应用程序,容量单位显著增加(您看到的最大值为 1500WCU)

  • 平均下来,您的应用程序在工作时间内的使用量在 800 到 1200 之间变化

如果前面的场景适用于您的应用程序,请考虑使用计划应用程序自动缩放,您的表其实可以利用其实可以利用其实可以利用自动缩放策略,安排不那么激进,您其实可以利用率的放策略。

您可以使用Amazon CLI执行以下步骤以创建预置的 Auto Scaling 规则,该规则基于一天中的时间和星期几执行。

  1. 将您的 Amazon Keyspaces ()Application Auto Scaling。可扩展目标是 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
  2. 根据您的要求设置预定操作。

    你需要两条规则来涵盖场景:一条是向上扩展。以下示例中显示了扩大计划操作的第一条规则。

    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"
  3. 运行以下命令来验证两条规则是否已激活:

    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% 目标利用率的示例工作负载。相比之下,auto Scaling 规则仍然适用,吞吐量并未降低。

放大图片,我们可以看到,应用程序中有一个高峰,它触发了 70% 自动缩放阈值,迫使自动缩放启动,来为表提供所需的额外容量。预定的自动缩放操作将影响最大值和最小值,设置这些值是您的责任。

如何处理具有未知模式的尖峰工作负载

在这种情况下,您其实可以利用率的低使用量目标。

可考虑改用按需容量模式。按需模式表非常适合您不知道流量模式的尖峰工作负载。在按需容量模式下,您按请求为应用程序在表上执行的数据读取和写入付费。您无需指定应用程序的预置容量,因为在工作负载增加或减少时,Amazon Keyspaces 会即时容纳您的工作量,即在工作量增加或减少时,Amazon Keyspaces。

如何处理具有关联应用程序的工作负载

在这种场景中,应用程序依赖其他系统,例如在批处理场景中,根据应用程序逻辑中的事件,您会遇到非常大的流量尖峰。

考虑开发自定义应用程序自动缩放逻辑,即在这些事件上,即在这些事件中,你可以增加表容量和TargetValues取决于您的具体需求。你可以从中受益Amazon EventBridge并使用以下组合Amazon像 HA 和 Step Functions之类的服务。