如何做好网站推广营销,CQ网络科技网站建设,高级搜索技巧,山东招标网官方网站伸缩组成本优化模式以成本为目标#xff0c;始终创建最低价的实例#xff0c;同时#xff0c;通过多可用区#xff0c;多实例规格分布#xff0c;以此来提高服务稳定性。但是#xff0c;对于成本优势最大化的竞价实例#xff0c;伸缩组难以防范竞价实例大范围回收可能导…伸缩组成本优化模式以成本为目标始终创建最低价的实例同时通过多可用区多实例规格分布以此来提高服务稳定性。但是对于成本优势最大化的竞价实例伸缩组难以防范竞价实例大范围回收可能导致的服务雪崩本次升级允许用户制定更详细的成本控制策略在成本和稳定性之间进行调整和权衡。
成本优化模式简介
当您的伸缩配置选择了多实例规格并想以最低的价格来使用同等规模的 ECS 实例配置时您可以选择使用 成本优化策略 的伸缩组来降低您的 ECS 实例使用成本当您的伸缩配置选择的实例为抢占式实例时您可能会遇到由于价格、库存等原因导致抢占式实例创建失败场景从而导致扩容不及时影响到业务您也可以选择使用 成本优化策略 的伸缩组在抢占式实例创建失败的时候自动为您尝试创建同规格的按量实例来保证业务的稳定性。
从上述的描述我们可以清晰的看到成本优化模式的核心策略
创建实例时以单核cpu价格价格最低来选择创建实例的 InstanceType实例规格ZoneId可用区等配置信息。竞价实例创建失败时调整为创建按量实例以保证业务连续性。
我们将上述的策略称为最低价策略LowestPrice。
成本优化模式升级
成本优化模式的升级策略主要针对竞价实例回收机制可能带来的业务雪崩情况。主要集中在以下两点
混合实例配比。允许用户为成本优化伸缩组制定按量实例与竞价实例的混合策略。竞价实例主动替换。在竞价实例释放前创建新实例主动替换掉当前的竞价实例。
在下面的文章中我们将原成本优化伸缩组称为普通成本优化伸缩组将指定实例混合策略的成本优化伸缩组称为成本优化混合实例伸缩组。
参数详解
OnDemandBaseCapacity
伸缩组所需要的按量实例的最小个数当伸缩组中按量实例个数小于该值时将优先创建按量实例。
OnDemandPercentageAboveBaseCapacity
满足 OnDemandBaseCapacity 条件后创建实例中按量实例所占的比例。
SpotInstancePools
SpotInstancePools 指定了最低价的多个实例规格当创建竞价实例时将在 SpotInstancePools 中进行均衡分布。
SpotInstanceRemedy
是否开启竞价实例的补偿机制。开启后在竞价实例被回收前5分钟左右将主动替换掉当前竞价实例。
兼容性介绍
成本优化混合实例伸缩组与普通成本优化伸缩组在接口和功能方面是完全兼容的。当您不指定混合实例策略的相关参数时您将创建出普通成本优化伸缩组。同时对于成本优化混合实例伸缩组通过合理的制定混合实例策略能够具有与普通成本优化伸缩组完全相同的行为。下面举例说明
假设普通成本优化伸缩组创建的全为按量实例。
此时你创建的成本优化混合实例伸缩组只需要指定OnDemandBaseCapacity0, OnDemandPercentageAboveBaseCapacity100spotInstancePools1那么将拥有完全相同的行为。
假设普通成本优化伸缩组优先创建竞价实例。
此时你创建的成本优化混合实例伸缩组只需要指定OnDemandBaseCapacity0, OnDemandPercentageAboveBaseCapacity0spotInstancePools1那么将拥有完全相同的行为。
扩缩容策略
成本优化混合实例伸缩组拥有一套相对独立的扩缩容策略您在大多数情况下不需要关注实例的选择过程如果您需要对伸缩组行为具有更详细的了解本节中对扩缩容过程进行了详细的描述。
扩容策略
当指定了伸缩组的实例混合策略之后伸缩组并非仅对新创建出来的实例按照混合比例进行创建而是保证伸缩组整体的实例配比趋近目标配比。
按量实例扩容策略
按量实例部分采用了 LowestPrice 的创建方式多实例规格与多可用区按照优先级方式依此进行选择该部分与普通成本优化伸缩组保持一致。
竞价实例扩容策略
竞价实例部分采用了 LowestPrice 的创建方式当配置多实例规格时将根据 SpotInstancePools 配置在最低价的多个实例规格之间平均分配针对每一种实例规格当无法成功创建时按照价格顺序依次选取下一规格继续进行创建当竞价实例全部不可创建将退回到创建对应的按量实例。多可用区则按照优先级的方式依次进行选择。
下面我们通过示例来描述成本优化混合实例伸缩组的扩容行为
假设伸缩组组内按量实例个数为3竞价实例为1个ecs.n1.tiny规格实例OnDemandBaseCapacity 5OnDemandPercentageAboveBaseCapacity 40SpotInstancePools 2伸缩组实例规格配置为ecs.n1.tiny, ecs.n1.small,ecs.n1.medium价格依此上升。
扩容数量按量实例分配情况竞价实例分配情况031tiny141tiny251tiny361tiny471tiny571tiny1small672tiny1small782tiny1small882tiny2small
缩容策略
成本优化混合实例伸缩组的释放策略不遵循伸缩组上指定的释放策略为了保持实例伸缩组内实例的混合配比将采用以下描述的实例释放策略。首先将根据伸缩组实例混合策略确定将要释放的按量实例与竞价实例的个数我们将在保证足够数量的实例被释放的前提下按照伸缩组整体趋近期望配比的方式确定释放按量实例和竞价实例的个数。当按量实例个数不足时将释放更多的竞价实例当竞价实例个数不足时将改为释放按量实例。
按量实例缩容策略
释放按量实例时将按照以下条件选择可释放的实例
优先释放价格高的实例价格相同时按照伸缩组指定的释放策略选取合适数量的实例进行释放。
竞价实例缩容策略
释放竞价实例时将按照以下条件选择可释放的实例
将首先释放不属于spotInstancePools中规格类型的实例这部分实例的释放策略与上述按量实例的缩容策略相同 如果还需要释放规格类型属于spotInstancePools的实例将进一步选择释放所需要的实例选择方式如下 选择释放的实例将使得剩余实例的实例规格在spotInstancePools中趋于均衡分布相同规格的多个实例可供选择时将按照伸缩组指定的释放策略选择释放的实例。
下面同样我们通过简单的示例来描述成本优化混合实例伸缩组在缩容时的实例选择过程
假设伸缩组组内按量实例个数为8竞价实例为2个ecs.n1.tiny规格实例2个ecs.n1.small规格实例OnDemandBaseCapacity 5OnDemandPercentageAboveBaseCapacity 40SpotInstancePools 2伸缩组实例规格配置为ecs.n1.tiny, ecs.n1.small,ecs.n1.medium价格依此上升。
缩容数量按量实例分配情况竞价实例分配情况082tiny2small182tiny1small272tiny1small371tiny1small471tiny561tiny660750840
竞价实例补偿
竞价实例在系统回收之前五分钟左右将会发送系统回收消息当您开启竞价实例主动替换功能之后在系统发送竞价实例的回收消息之后弹性伸缩将会为该竞价实例创建补偿任务并在稍后通过创建新的竞价实例来替换即将释放的实例。我们将这一主动替换即将被回收的竞价实例的行为称为竞价实例补偿。 竞价实例补偿是保障业务连续性的辅助保障机制该补偿机制具有以下特点你需要对这些特点有充分的认识以便您配置合理的成本优化伸缩组。
竞价实例补偿的时间窗口。在收到竞价实例系统回收消息后将为对应的实例生成补偿任务大约五分钟时间后实例将被回收当实例被回收后伸缩组内的对应实例将被健康检查机制清除伸缩组大约6分钟。竞价实例补偿任务的有效期为补偿任务生成到健康检查将实例移除伸缩组之间。一旦错过补偿时间窗口对应的补偿任务将会失效和清理意味着对应实例错过补偿期。有限的补偿能力。一次竞价实例的补偿过程分为新实例启动和旧实例释放两个过程补偿任务执行过程中伸缩组将处于锁定状态。由于暂时伸缩组不支持并行伸缩活动处理因此在有限的补偿时间窗口内能够进行的补偿任务次数和实例数是有限的。由于竞价实例回收通常是呈现批次状因此为了最大程度利用有限的补偿能力我们将对补偿任务进行一定程度的聚合之后按批次进行下发最大程度的补偿更多的实例。
最佳实践
这里我们主要展示如何使用java SDK创建伸缩规则并采用maven进行依赖管理。创建目标追踪伸缩规则需要使用aliyun-java-sdk-ess 2.3.1及以上版本。
程序所需的maven依赖如下 dependencygroupIdcom.aliyun/groupIdartifactIdaliyun-java-sdk-core/artifactIdversion3.0.8/version/dependencydependencygroupIdcom.aliyun/groupIdartifactIdaliyun-java-sdk-ess/artifactIdversion2.3.1/version/dependency
创建混合实例的成本优化伸缩组
CreateScalingGroupRequest request new CreateScalingGroupRequest();
request.setScalingGroupName(name);
request.setMinSize(0);
request.setMaxSize(100);
request.setVSwitchId(vsId);
request.setMultiAZPolicy(COST_OPTIMIZED);
request.setOnDemandBaseCapacity(onDemandBaseCapacity);
request.setOnDemandPercentageAboveBaseCapacity(onDemandPercentageAboveBaseCapacity);
request.setSpotInstanceRemedy(spotInstanceRemedy);
request.setSpotInstancePools(spotInstancePools);
CreateScalingGroupResponse response client.getAcsResponse(request);
原文链接 本文为云栖社区原创内容未经允许不得转载。