内容
- 使用vCpu对伸缩组进行容量加权
- 单位权重的价格
- 伸缩组扩缩容行为
- 注意事项
- 示例
使用vCpu对伸缩组进行容量加权
弹性伸缩允许您为伸缩组中的实例规格设置不同的容量权重,使得不同实例规格的单个实例在伸缩组中表示不同的容量。目前,您可以通过以下两种方式设置伸缩组实例权重:
- 若您使用伸缩配置作为配置来源,您可以为伸缩配置中各实例规格指定容量权重;
- 若您使用启动模板作为配置来源,您可以通过弹性伸缩提供的启动模板覆盖参数,扩展启动模板以支持多实例规格,并在启动模板覆盖参数中指定各实例规格的容量权重。
通过以实例规格的vCpu个数对实例规格进行容量加权,伸缩组将以vCpu为容量单位,伸缩组容量大小,将直接反映伸缩组内vCpu个数。下面通过一个具体示例为您展示如何设置vCpu容量。
假设您运行着一个计算敏感型应用,该应用需要至少4 vCPU, 8GiB以满足最小运行需求。为了提高伸缩组创建实例的成功率,您选择了多个满足条件的实例规格:
实例规格 | 核数 | 内存 |
---|---|---|
ecs.c5.xlarge | 4 | 8 |
ecs.c5.2xlarge | 8 | 16 |
ecs.c5.3xlarge | 16 | 32 |
设置实例权重时,您可以根据需要选择合适的容量单位,例如,以实例个数,vCpu个数,内存个数等作为容量单位。此处,我们将单个vCpu作为伸缩组容量单位。由此,计算出各实例规格的权重:
- ecs.c5.xlarge = 4 容量单位
- ecs.c5.2xlarge = 8 容量单位
- ecs.c5.3xlarge = 16 容量单位
此时,若应用实际需要40c80g,即40倍的容量单位大小,伸缩组的期望容量大小应当为40,伸缩组在扩缩容的过程中,也将以容量单位为最小粒度进行。
弹性伸缩强烈建议您按照以下方式设置实例权重:
- 使用与实例规格相关的性能指标设置实例权重,例如,cpu核数(vCPUs),内存个数(GiBs)。您可以以单个vCpu,1GiB内存或某个最小规格作为伸缩组容量单位,此时伸缩组的MaxSize,MinSize,DesiredCapacity是相对该容量单位计算的;
- 尽量不要为不同规格设置差距过大的权重。例如,较小规格的权重设置为1,较大规格的权重设置为200。如果权重之间的差距过大,将对伸缩组的总体成本产生负面影响;
- 设置合适的权重大小,尽量保证伸缩组内当前容量至少是2到3倍的最大权重值;
单位权重的价格
对于竞价实例,您在伸缩配置/启动模板中设置的竞价实例最高价应当为单个实例每小时价格。该价格应当高于伸缩组中任意实例规格的每小时价格,当竞价实例当前价格低于您的最高出价,并且具有可用容量时,弹性伸缩将为您创建竞价实例。
对于采用成本优化扩展策略的伸缩组,在扩容过程中,当设置实例权重,伸缩组将根据每单位权重每小时价格确定最低价实例规格/可用区配置。下表为您展示了每单位权重每小时价格的计算方式:
实例规格 | 每小时价格 | 权重 | 每单位权重每小时价格 |
---|---|---|---|
ecs.c5.large | 0.18 | 2 | 0.090 |
ecs.c5.xlarge | 0.34 | 4 | 0.085 |
ecs.c5.2xlarge | 0.64 | 8 | 0.080 |
伸缩组扩缩容行为
- 伸缩活动允许超量扩容。超量扩容是指单次伸缩活动实际扩容量超出该活动期望扩容量。例如,您设置ecs.c5.2xlarge的权重为2,ecs.c5.12xlarge的权重为12,若伸缩活动期望扩容5个容量单位,弹性伸缩可能为您创建1个ecs.c5.12xlarge类型实例,比您期望扩容量多7个容量单位;
- 伸缩组当前容量允许超过DesiredCapacity/MaxSize。伸缩组中当前容量允许超过DesiredCapacity,MaxSize,例如,MaxSize为5,伸缩组中可能包含一个ecs.c5.12xlarge实例,其权重为12,此时伸缩组容量超过 MaxSize 7个容量单位;
- 弹性伸缩扩缩容过程中,优先根据伸缩组扩展策略进行容量分配,而不是避免容量超出期望。例如,您期望扩容4个容量单位,若扩展策略确定该次扩容应当选择ecs.c5.12xlarge类型,即使可能超出期望容量,弹性伸缩仍将为您生产1个ecs.c5.12xlarge实例,而不是2个ecs.c5.2xlarge实例;
- 伸缩活动超出期望扩容量的容量或伸缩组当前容量超过DesiredCapacity/MaxSize的容量,必须小于最大权重值。例如:若伸缩组MaxSize为5,上例中,最大权重为12,则伸缩组中容量一定小于17(5+12)。
注意事项
- 当您为伸缩组设置实例权重时,必须同时设置伸缩组中所有实例已使用的实例规格的权重;
- 当您修改已存在实例权重时,弹性伸缩将根据新的权重信息重新计算伸缩组当前容量,可能触发新的扩缩容活动;
- 即使您删除伸缩配置中某实例规格,伸缩组将依然记录该规格最新权重值。
示例
此处以使用启动模板作为配置来源的伸缩组为例,为您展示了通过启动模板覆盖参数扩展启动模板支持伸缩组多实例规格,并同时设置伸缩组实例权重,以vCpu个数作为伸缩组容量单位。
// set up launch template overrides
LaunchTemplateOverride launchTemplateOverride1 = new LaunchTemplateOverride();
launchTemplateOverride1.setInstanceType("ecs.c5.large");
launchTemplateOverride1.setWeightedCapacity(2);
LaunchTemplateOverride launchTemplateOverride2 = new LaunchTemplateOverride();
launchTemplateOverride2.setInstanceType("ecs.c5.xlarge");
launchTemplateOverride2.setWeightedCapacity(4);
List<CreateScalingGroupRequest.LaunchTemplateOverride> launchTemplateOverrides = Lists.newArrayList(launchTemplateOverride1,launchTemplateOverride2);
// create scaling group
CreateScalingGroupRequest request = new CreateScalingGroupRequest();
request.setMinSize(0);
request.setMaxSize(100);
request.setScalingGroupName("example");
request.setLaunchTemplateId(launchTemplateId);
request.setLaunchTemplateVersion("Default");
request.setLaunchTemplateOverrides(launchTemplateOverrides);
return client.getAcsResponse(request).getScalingGroupId();