伸缩组成本优化模式以成本为目标,始终创建最低价的实例,同时,通过多可用区,多实例规格分布,以此来提高服务稳定性。但是,对于成本优势最大化的竞价实例,伸缩组难以防范竞价实例大范围回收可能导致的服务雪崩,本次升级允许用户制定更详细的成本控制策略,在成本和稳定性之间进行调整和权衡。

成本优化模式简介

当您的伸缩配置选择了多实例规格,并想以最低的价格来使用同等规模的 ECS 实例配置时,您可以选择使用 成本优化策略 的伸缩组,来降低您的 ECS 实例使用成本;当您的伸缩配置选择的实例为抢占式实例时,您可能会遇到由于价格、库存等原因导致抢占式实例创建失败场景,从而导致扩容不及时,影响到业务,您也可以选择使用 成本优化策略 的伸缩组,在抢占式实例创建失败的时候自动为您尝试创建同规格的按量实例,来保证业务的稳定性。

从上述的描述,我们可以清晰的看到,成本优化模式的核心策略:

  1. 创建实例时,以单核cpu价格价格最低来选择创建实例的 InstanceType(实例规格),ZoneId(可用区)等配置信息。
  2. 竞价实例创建失败时,调整为创建按量实例,以保证业务连续性。

我们将上述的策略称为最低价策略(LowestPrice)。

成本优化模式升级

成本优化模式的升级策略主要针对竞价实例回收机制可能带来的业务雪崩情况。主要集中在以下两点:

  1. 混合实例配比。允许用户为成本优化伸缩组制定按量实例与竞价实例的混合策略。
  2. 竞价实例主动替换。在竞价实例释放前创建新实例,主动替换掉当前的竞价实例。

在下面的文章中,我们将原成本优化伸缩组称为普通成本优化伸缩组,将指定实例混合策略的成本优化伸缩组称为成本优化混合实例伸缩组。

参数详解

  • OnDemandBaseCapacity

伸缩组所需要的按量实例的最小个数,当伸缩组中按量实例个数小于该值时,将优先创建按量实例。

  • OnDemandPercentageAboveBaseCapacity

满足 OnDemandBaseCapacity 条件后,创建实例中按量实例所占的比例。

  • SpotInstancePools

SpotInstancePools 指定了最低价的多个实例规格,当创建竞价实例时,将在 SpotInstancePools 中进行均衡分布。

  • SpotInstanceRemedy

是否开启竞价实例的补偿机制。开启后在竞价实例被回收前5分钟左右,将主动替换掉当前竞价实例。

兼容性介绍

成本优化混合实例伸缩组与普通成本优化伸缩组在接口和功能方面是完全兼容的。当您不指定混合实例策略的相关参数时,您将创建出普通成本优化伸缩组。同时,对于成本优化混合实例伸缩组,通过合理的制定混合实例策略,能够具有与普通成本优化伸缩组完全相同的行为。下面举例说明:

  1. 假设普通成本优化伸缩组创建的全为按量实例。

此时,你创建的成本优化混合实例伸缩组只需要指定OnDemandBaseCapacity=0, OnDemandPercentageAboveBaseCapacity=100,spotInstancePools=1,那么将拥有完全相同的行为。

  1. 假设普通成本优化伸缩组优先创建竞价实例。

此时,你创建的成本优化混合实例伸缩组只需要指定OnDemandBaseCapacity=0, OnDemandPercentageAboveBaseCapacity=0,spotInstancePools=1,那么将拥有完全相同的行为。

扩缩容策略

成本优化混合实例伸缩组拥有一套相对独立的扩缩容策略,您在大多数情况下不需要关注实例的选择过程,如果您需要对伸缩组行为具有更详细的了解,本节中对扩缩容过程进行了详细的描述。

扩容策略

当指定了伸缩组的实例混合策略之后,伸缩组并非仅对新创建出来的实例按照混合比例进行创建,而是保证伸缩组整体的实例配比趋近目标配比。

  • 按量实例扩容策略

按量实例部分,采用了 LowestPrice 的创建方式,多实例规格与多可用区按照优先级方式依此进行选择,该部分与普通成本优化伸缩组保持一致。

  • 竞价实例扩容策略

竞价实例部分,采用了 LowestPrice 的创建方式,当配置多实例规格时,将根据 SpotInstancePools 配置,在最低价的多个实例规格之间平均分配,针对每一种实例规格,当无法成功创建时,按照价格顺序依次选取下一规格继续进行创建,当竞价实例全部不可创建,将退回到创建对应的按量实例。多可用区则按照优先级的方式依次进行选择。

下面,我们通过示例来描述成本优化混合实例伸缩组的扩容行为:

假设伸缩组组内按量实例个数为3,竞价实例为1个ecs.n1.tiny规格实例,OnDemandBaseCapacity = 5,OnDemandPercentageAboveBaseCapacity = 40,SpotInstancePools = 2,伸缩组实例规格配置为:ecs.n1.tiny, ecs.n1.small,ecs.n1.medium(价格依此上升)。

扩容数量 按量实例分配情况 竞价实例分配情况
0 3 1(tiny)
1 4 1(tiny)
2 5 1(tiny)
3 6 1(tiny)
4 7 1(tiny)
5 7 1(tiny)1(small)
6 7 2(tiny)1(small)
7 8 2(tiny)1(small)
8 8 2(tiny)2(small)

缩容策略

成本优化混合实例伸缩组的释放策略不遵循伸缩组上指定的释放策略,为了保持实例伸缩组内实例的混合配比,将采用以下描述的实例释放策略。首先,将根据伸缩组实例混合策略,确定将要释放的按量实例与竞价实例的个数,我们将在保证足够数量的实例被释放的前提下,按照伸缩组整体趋近期望配比的方式确定释放按量实例和竞价实例的个数。当按量实例个数不足时,将释放更多的竞价实例;当竞价实例个数不足时,将改为释放按量实例。

  • 按量实例缩容策略

释放按量实例时,将按照以下条件选择可释放的实例:

  1. 优先释放价格高的实例;
  2. 价格相同时,按照伸缩组指定的释放策略选取合适数量的实例进行释放。
  • 竞价实例缩容策略

释放竞价实例时,将按照以下条件选择可释放的实例:

  1. 将首先释放不属于spotInstancePools中规格类型的实例,这部分实例的释放策略与上述按量实例的缩容策略相同;
  2. 如果还需要释放规格类型属于spotInstancePools的实例,将进一步选择释放所需要的实例,选择方式如下:

    1. 选择释放的实例将使得剩余实例的实例规格在spotInstancePools中趋于均衡分布;
    2. 相同规格的多个实例可供选择时,将按照伸缩组指定的释放策略选择释放的实例。

下面,同样我们通过简单的示例来描述成本优化混合实例伸缩组在缩容时的实例选择过程:

假设伸缩组组内按量实例个数为8,竞价实例为2个ecs.n1.tiny规格实例,2个ecs.n1.small规格实例,OnDemandBaseCapacity = 5,OnDemandPercentageAboveBaseCapacity = 40,SpotInstancePools = 2,伸缩组实例规格配置为:ecs.n1.tiny, ecs.n1.small,ecs.n1.medium(价格依此上升)。

缩容数量 按量实例分配情况 竞价实例分配情况
0 8 2(tiny)2(small)
1 8 2(tiny)1(small)
2 7 2(tiny)1(small)
3 7 1(tiny)1(small)
4 7 1(tiny)
5 6 1(tiny)
6 6 0
7 5 0
8 4 0

竞价实例补偿

竞价实例在系统回收之前五分钟左右将会发送系统回收消息,当您开启竞价实例主动替换功能之后,在系统发送竞价实例的回收消息之后,弹性伸缩将会为该竞价实例创建补偿任务,并在稍后通过创建新的竞价实例来替换即将释放的实例。我们将这一主动替换即将被回收的竞价实例的行为称为竞价实例补偿

竞价实例补偿是保障业务连续性的辅助保障机制,该补偿机制具有以下特点,你需要对这些特点有充分的认识,以便您配置合理的成本优化伸缩组。

  1. 竞价实例补偿的时间窗口。在收到竞价实例系统回收消息后,将为对应的实例生成补偿任务,大约五分钟时间后实例将被回收,当实例被回收后,伸缩组内的对应实例将被健康检查机制清除伸缩组(大约6分钟)。竞价实例补偿任务的有效期为:补偿任务生成到健康检查将实例移除伸缩组之间。一旦错过补偿时间窗口,对应的补偿任务将会失效和清理,意味着对应实例错过补偿期。
  2. 有限的补偿能力。一次竞价实例的补偿过程分为新实例启动和旧实例释放两个过程,补偿任务执行过程中,伸缩组将处于锁定状态。由于暂时伸缩组不支持并行伸缩活动处理,因此,在有限的补偿时间窗口内,能够进行的补偿任务次数和实例数是有限的。由于竞价实例回收通常是呈现批次状,因此,为了最大程度利用有限的补偿能力,我们将对补偿任务进行一定程度的聚合之后,按批次进行下发,最大程度的补偿更多的实例。

最佳实践

这里我们主要展示如何使用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>

创建混合实例的成本优化伸缩组:

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);

原文链接
本文为云栖社区原创内容,未经允许不得转载。

AutoScaling 成本优化模式升级--混合实例策略相关推荐

  1. oCPC实践录 | 成本优化策略之CVR门槛(2)

    在上篇文章oCPC实践录 | 成本优化策略之CVR门槛(1)中,设计CVR门槛由广告主控制的成本优化产品,通过这个产品,广告主可以根据自己的实际需求,调整CVR门槛,获取自己想要的那部分流量,媒体方仅 ...

  2. ckks方案优化最好的_果断收藏:SEO高级优化技能升级策略!

    有很多搜索引擎优化技术,严格来说,没有先进或基本的,这是最好的方式使用适当的搜索引擎优化技术,以优化网站在适当的时间."此外,基地的极端也可以被认为是先进的.有很多朋友想要提高SEO的技术优 ...

  3. 混合改进策略的黑猩猩优化算法

    文章目录 一.理论基础 1.黑猩猩优化算法 2.改进的黑猩猩优化算法 (1)Sobol序列初始化种群 (2)基于凸透镜成像的反向学习策略 (3)水波动态自适应因子 (4)SLWChOA实现步骤 二.仿 ...

  4. oCPC实践录 | 成本优化策略之CVR门槛(1)

    北京秋天的周末,刚下过一场小雨,外面凉飕飕的.我宅在家里,吃着脆甜的冬枣,剥着三红柚子,正想着要不要写一下文章. 突然电话响起,老板打电话过来说运营要测试一下广告的落地页,需要下调CVR门槛.原本以为 ...

  5. 腾讯开源云原生成本优化神器 - FinOps Crane

    Crane 是一个基于 FinOps 的云资源分析与成本优化平台,它的愿景是在保证客户应用运行质量的前提下实现极致的降本.Crane 已经在腾讯内部自研业务实现了大规模落地,部署数百个 K8s 集群. ...

  6. Crane: 腾讯开源一款基于 FinOps 超强大云资源分析与成本优化平台

    公众号关注 「奇妙的 Linux 世界」 设为「星标」,每天带你玩转 Linux ! Crane(https://gocrane.io/) 是一个基于 FinOps 的云资源分析与成本优化平台,它的愿 ...

  7. 研发团队资源成本优化实践

    背景 工程师主要面对的是技术挑战,更关注技术层面的目标.研发团队的管理者则会把实现项目成果和业务需求作为核心目标.实际项目中,研发团队所需资源(比如物理机器.内存.硬盘.网络带宽等)的成本,很容易被忽 ...

  8. 研发团队资源成本优化实践 1

    背景 工程师主要面对的是技术挑战,更关注技术层面的目标.研发团队的管理者则会把实现项目成果和业务需求作为核心目标.实际项目中,研发团队所需资源(比如物理机器.内存.硬盘.网络带宽等)的成本,很容易被忽 ...

  9. 企业完成云转型的成功之道:云成本优化管理

    近年来,各行各业的企业的云采用率迅速增加,预计向云的迁移将继续加速,以实现快速的敏捷性以及以最少的资本支出获得规模和弹性.即用即付定价带来的成本优势也是推动云采用的关键驱动因素之一. 然而,随着企业将 ...

最新文章

  1. 数据中台应用实战50篇(二)-中台解决方案本质在解决什么问题?
  2. OpenCV使用dnn重新着色灰度图像的实例(附完整代码)
  3. python中import os_python import osgeo.gdal出错
  4. Qt5.4中遇到找不到头文件QApplication等。
  5. DataParallel work on cpu
  6. Bootstrap tab页签刷新加载不显示,只有点击其他标签后第一个才显示
  7. Java:对于Borderlayout布局管理的理解
  8. 在电脑前,写点什么...
  9. FZU 1502 Letter Deletion
  10. WAP网站制作(WAP网站建设)全攻略教程二
  11. 企业大楼AI无感考勤解决方案
  12. 2012系分真题案例分析 软件项目管理 工期管理
  13. 一文带你吃透操作系统
  14. pytorch动态网络以及权重共享
  15. icpc/ccpc退役贴
  16. 山西大学计算机专业国内排名,山西这所大学曾是国内排名前五,如今排名下滑,有点走下坡路了...
  17. 自动驾驶行业观察之2023上海车展-----智驾供应链(1)
  18. 如何用matlab快速判断级数敛散性
  19. tuts4you上lena‘s40个crackme(1)
  20. 回顾篇:淘宝API web开发一 授权登录

热门文章

  1. Java中String相关类型的区别
  2. astar插件下载 就行_暗黑破坏神2地图插件常用的设置,做自己的私人订制游戏!...
  3. easyexcel导出百万级数据_百万级别数据Excel导出优化
  4. 【LeetCode笔记】78. 子集(Java、dfs)
  5. es6删除数组某一项_精学手撕系列——数组扁平化
  6. php改名下载,PHP如何给上传的文件改名
  7. es 怎么嵌入 算法模型_快速ES-RNN: ES-RNN算法的GPU实现
  8. 嵌入式编程要不要学数据结构_少儿编程要不要学?其实国家早就给出了答案……...
  9. python贪心算法求删数问题_贪心算法删数问题
  10. 字体垂直居中_海报设计技巧!垂直轴式