步进伸缩规则是弹性伸缩基于云监控报警服务为用户提供的分段扩缩容策略,是对现有简单伸缩规则的扩展,为用户的动态扩缩容过程提供更精细的控制。
步进伸缩规则简介
步进伸缩规则在原有简单伸缩规则的基础上增加了分步定义,步进伸缩规则是简单伸缩规则的超集。步进伸缩规则允许用户指定一组扩展策略集合,这些扩展策略将根据报警监控值的违例规模来选择合适的分步步骤进行执行。
StepScalingRule
创建一个步进伸缩规则时,您需要定义至少一个分步步骤(StepScalingRule),每一个分步步骤必须包括以下信息:
名称 | 类型 | 是否必须 | 默认值 | 描述 |
---|---|---|---|---|
MetricIntervalLowerBound | Float | 否 | 无 | 分步步骤的下边界 |
MetricIntervalUpperBound | Float | 否 | 无 | 分步步骤的上边界 |
ScalingAdjustment | Integer | 否 | 无 | 分步步骤的调整数量 |
对于步进伸缩规则,支持与简单伸缩规则完全相同的调整类型:
- QuantityChangeInCapacity:增加或减少指定数量的ECS实例。
- PercentChangeInCapacity:增加或减少指定比例的ECS实例。
- TotalCapacity: 将当前伸缩组的ECS实例数量调整到指定数量。
分步步骤的上下边界取值是相对于违例阈值的差值,这表示,如果您的违例阈值是40,您希望在40-50之间时指定分步步骤a,你需要制定的分步步骤上下边界将分别为0和10.
分步步骤的上下边界选取存在以下限制:
- 分步调整范围不能重叠或有间隙。
- 只有一个分步调整可以有空下限 (负无穷)。如果一个分步调整有负下限,则必须有一个分步调整有空下限。
- 只有一个分步调整可以有空上限 (正无穷)。如果一个分步调整有正上限,则必须有一个分步调整有空上限。
- 同一分步调整中的上限和下限不能为空。
- 如果指标值高于违例阈值,则含下限而不含上限。如果指标值低于违例阈值,则不含下限而含上限。
执行分步步骤
步进伸缩规则可以由云监控报警规则触发或者用户手动执行。
云监控触发
当由云监控触发步进伸缩规则时,只需要将步进伸缩规则关联到一条指定的云监控报警规则,当云监控报警规则超过阈值,触发报警时,将执行步进伸缩规则,报警规则的报警阈值将作为违例阈值(BreachThreshold),监控指标的实际值将作为触发指标值(MetricValue),步进伸缩规则将根据指标值和违例阈值选择合适的分步步骤执行。。
手动执行
当由用户手动执行步进伸缩规则时,您需要制定报警规则的违例阈值(BreachThreshold)以及触发指标值(MetricValue),步进伸缩规则将根据指标值和违例阈值选择合适的分步步骤执行。
分步步骤的选取
分步步骤的选取遵循以下开闭原则:
- 当MetricValue高于BreachThreshold时,将使用左闭右开方式选取分步步骤;
- 当MetricValue高于BreachThreshold时,将使用左开右闭方式选取分步步骤。
分步调整类型为PercentChangeInCapacity时,调整个数大于0时,向下取整;调整个数小于0时,向上取整。该行为您可以通过制定MinAdjustmentMagnitude来指定分布步骤最小的调整个数。
最佳实践
使用SDK创建步进伸缩规则
这里我们主要展示如何使用java SDK创建伸缩规则,并采用maven进行依赖管理。创建目标追踪伸缩规则,需要使用aliyun-java-sdk-ess 2.3.1及以上版本。
程序所需的maven依赖如下:
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>3.0.8</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-ess</artifactId>
<version>2.3.1</version>
</dependency>
创建目标追踪伸缩规则
CreateScalingRuleRequest request = new CreateScalingRuleRequest();
request.setScalingGroupId(scalingGroupId);
request.setScalingRuleType("StepScalingRule");
CreateScalingRuleRequest.StepAdjustment step1 = createStepAdjustment(10, 20, 1);
CreateScalingRuleRequest.StepAdjustment step2 = createStepAdjustment(20, null, 2);
List<CreateScalingRuleRequest.StepAdjustment> stepAdjustments = Lists.newArrayList(step1, step2);
request.setStepAdjustments(stepAdjustments);
CreateScalingRuleResponse response = client.getAcsResponse(request);
控制台创建步进伸缩规则
创建步进伸缩规则时,您必须选择关联一条云监控报警规则。您可以选择一条已有的报警规则或者新创建一条报警规则。
当您选择了一条报警规则之后,需要根据该报警规则来创建合适的分步步骤,此处我们关联了cpu使用率大于40%的报警规则,我们根据该报警任务设置了两个分步步骤:
- 当报警发生时指标值处于[40,50)区间时,增加1个实例。
- 当报警发生时指标值处于[50,60)区间时,增加2个实例。
当创建完成之后,我们可以在伸缩规则列表查看到创建的步进伸缩规则以及其关联报警规则与分步步骤。
同时,在报警任务列表,我们也可以看到其关联到了我们刚创建的步进伸缩规则。
目前,步进伸缩规则不允许修改其关联的报警规则,只允许修改其分布步骤。