阿里云ECS云服务器资源购买决策

 阿里云ECS云服务器资源购买决策


作者:季奔牛 2019-1-31


摘要

 

        利用公有云服务可以节省企业在计算资源上的开支这一点已经得到实践证明,越来越多的企业正在从私有数据中心往公有云迁移。然而面对公有云产品众多的规格和多种付费方式,企业往往容易陷入选择困境。在本文中,作者以阿里云[1]的ECS产品[2]为例,尝试通过建立纯整数规划模型,来使得满足企业业务需求情况下的计算资源费用最小化。

 

关键词: 公有云、阿里云ECS、线性规划


一.背景介绍

 

        随着云计算技术的发展以及以阿里云为代表的一批国内云计算企业提供的公有云业务的成熟,越来越多的企业将自身的信息系统及服务的技术栈和核心基础架构迁移至公有云服务上。尤其是对于初创企业而言,公有云服务提供的按需购买,按量付费的使用模式可以显著的节约成本,省去了昂贵的私有数据中心机房建设或租赁,服务器、存储设备的购买和搭建,以及大量的基础设施运维开支。传统的私有数据中心,因为建设、租赁、服务器的采购,部署、配置,都需要一个比较长的周期,通常需要按月计,所以往往需要比实际业务需求提前很久开始实施,同时需要计划足够多的资源预留。而这些预留资源会带来短期内的费用远远高于当前实际业务所需的资源开支。这也是为什么很多企业往公有云上迁移,一方面省去的高昂的基础设施建设成本,另一方面,利用云计算服务扩容便捷的优点,可以缩短提前购置计算资源的时间,根据业务发展的情况,灵活的扩张或降低资源使用。


       但是在使用公有云的过程中,企业的CIO或IT负责人通常会面临很多决策,例如:

        1. 该选择何种规格的产品?

        2. 应该选择哪种类型的付费方式,按小时计费,还是包月,包年?

        3. 如何知道企业的业务需要多少计算资源,这些计算资源通过购买怎样的产品组合可以满足,并且最省钱?


       以作者自身为例,购买决策的过程通常是“三拍”,第一次拍脑袋,决定需要什么规格的服务器,第二次拍脑袋,决定需要买多少台,第三次拍脑袋,决定买多久。显然,这样的购买决策存在很严重的问题,首先不知道规格是否合适,其次不知道是否够用及够用多久,最后,预估的量往往比较激进,会预留较多的余量导致费用远超实际所需。


        在国外公有云市场上,亚马逊公司的AWS公有云平台[3]占据着市场第一的份额,该公司有“Cost Explorer[4]”这款产品,可以帮助用户分析使用数据,提供调整产品组合的建议,从而帮助客户做出合理的决策来缩减或扩大使用规模。遗憾的是,在国内市场上,还没有类似的产品出现。国内公有云市场的龙头阿里云,目前也只是推出了一款还在公测阶段的产品:“智能顾问[5]”,该产品仅提供简单的分析功能,并向用户推荐是否有ECS实例适合从按需付费改为按年付费。但是该产品目前还处于非常早期阶段,无法帮助用户根据业务需求来做出使得费用最小化的购买决策。


        下面,本文将以阿里云ECS产品为例,分几部分描述如何根据实际业务量来优化ECS的产品组合。

 

        首先,作者将简要分析阿里云ECS产品的产品规格以及不同的付费方式。之后将对优化问题做初步的分析,通过分析来试图简化问题,以方便数据收集和模型的建立。接着,作者将详细描述为了解决问题需要哪些数据,以及如何从阿里云采集这些数据,数据需要如何整理。最后,作者将使用Excel工具建立一个纯整数线性规划模型,求出满足作者所在公司当前业务需求情况下的分时段ECS产品组合和付费模式组合。

 

二. 阿里云ECS产品分析

 

        云服务器Elastic Compute Service(ECS)是阿里云提供的一种基础云计算服务。本质上它是一种基于虚拟化技术产生的服务器产品,使用ECS无需提前采购硬件设备,而是根据业务需要,随时创建所需数量的云服务器ECS实例。在使用过程中,随着业务的扩展,可以随时扩容。如果不再需要云服务器,也能随时释放资源,节省费用。通常,在购买ECS服务器的时候,主要的考虑指标为vCPU核数和内存容量。

 

2.1 ECS 产品分类

 

地域及可用区[6]

        阿里云的公有云业务分布在全球的各个地域,一个地域可以理解为由一个或若干个物理数据中心组成的大数据中心。目前总共有19个地域,其中国内分7个地域,国外有12个地域。每个地域会包含若干个可用区,可用区可以理解为一个物理上的数据中心。图1列出了中国大陆地区的地域划分和可用区的数量。

85c5501dc115db2378e0f61a6d211f0dae2938b2

图 1 阿里云在中国大陆的地域及可用区

    

       ECS产品在各个地域之间会有价格差异,但在同一个地域的不同可用区内价格相同。此外,在不同的地域,可以选择的ECS产品规格可能存在差异。


ECS产品族群及规格[7]

        ECS产品可以根据种类划分出多个层次。如图2所示,ECS在第一层级可以划分为多个族群,每个族群可以再划分为多个规格族。最后,每个规格族又可以在根据产品vCPU核数和内存容量不同划分为不同的规格产品。

018eff5c2a2e58364fd92d51a337d58cfec3ea4d

图 2产品规格层次划分


        以X86计算规格族群下的通用型实例规格族为例,该规格族可以细分为8个产品规格。

f8271713b184d4eaf71b8e0f5103c9ebfa442588

图 3通用型实例产品规格


2.2 ECS 产品定价[8]

 

        ECS资源的主要计费方式分为两种,1是预付费(包括包年包月和按周付费),2是按量付费。不同的实例规格(vCPU核数和内存容量)价格不同。

 

预付费模式

 在购买ECS资源时,采用预付费模式是指购买时一次性支付该使用期的费用,无论是否使用实例,阿里云将在该使用期内预留实例资源。预付费模式会根据购买期限的不同有不同的折扣。常见的预付费主要分为一下几类:

        1. 包1周
        2. 包1/2/3个月
        3. 包1/2/3/4/5年

 

按量付费

        按量付费是一种先使用后付费方式。使用这种方式的特点是按需取用资源,随时开启和释放资源,无需提前购买资源。按量付费的计费是以秒为单位,购买资源后开始计费,释放资源后结束计费,根据使用时间乘以每小时单价计算费用。

        完整的产品规格列表及对应的预付费和按量付费价格可查阅附录1《阿里云ECS产品规格及价格列表》

 

三.问题分析

 

3.1 企业ECS云服务器使用现状

 

        目前作者所在企业正在使用的ECS实例超过30台,分别属于5种产品规格,所有实例位于同一地域。所有ECS实例总计的vCPU为149核,内存为378G。根据收集的数据统计,平均CPU利用率为29.75%,峰值为74%。平均内存利用率为34.29%,峰值为68%。


        根据运维经验,CPU利用率在20%-80%这个区间,内存的利用率在60-80%这个区间是比较理想的情况。如果CPU和内存的利用率过高,说明系统存在资源短缺的情况,需要通过增加ECS实例来扩大集群规模。如果CPU和内存的利用率过低,说明系统存在资源过剩的情况,可以缩小ECS集群规模来节省成本。


        从当前的实际CPU利用率和内存利用率来看,平均值都在合理区间的下限或者低于下限。峰值接近上限。目前所用的ECS实例都采用了包年付费的方式。无论CPU,内存的使用率如何变化,所付的费用是固定的。

 

3.2 现状的优化方向

 

1)优化vCPU与内存比。

        现购买的实例vCPU核数与内存总量之比为: 

 d170ceaa686b68bce8e3b1b142812c29059d43cd

        而平均vCPU使用量与平均内存使用量之比为:

3880742dd2754ef9572094efa0857080699375c2

        由此可见,当前购买的实例规格(vCPU和内存比例)和实际应用有差距。当前业务对内存资源的使用高于预期。从这个角度考虑,可以通过优化ECS的产品规格组合来接近实际的CPU、内存应用比例。

 

2)优化支付方式

        如图4所示,经过对1天24小时内的CPU使用率分析,最小使用率为0.04,最高使用率为0.74,方差为0.04,标准差为0.2。

d1c56114ae42b0a107a4f7fdf0da71550979d17a211cc3ff7a80d9780b5983d843c612020634d57f

图 4 CPU使用率描述统计

 

        如图5所示,经过对1天24小时内的内存使用率分析,最小使用率为0.09,最高使用率为0.68,方差为0.037,标准差为0.183。


ec9192e3e9fb8ae364d8031c48fa41186d5d5dd52955dc2bb34cea03132cf5bc8c4c1787a01e9912

图 5 内存使用率描述统计


        通过上面两个分析,可以得出CPU使用率和内存的使用率,存在明显的不均衡,这是由于业务特点造成的。图6是公司业务量的日均工作时间分布。服务的使用高峰是在9点至11点,14点至16点,之后缓慢下降。服务高峰期间,云端服务的访问量增加,导致CPU和内存的使用量增加。由于不同时间段的业务特点不同,对CPU和内存的资源使用情况不同,有些业务是计算敏感型,导致CPU利用率上升,有些业务是内存敏感型,导致内存利用率上升。所以CPU和内存的分布不会完全一致,也不会与业务量的工作时间分布完全一致,但大致趋势是近似的。


be9c5879512d89e7bc7e34055643876f1a1c9bde

图 6 日均业务量时间分布


        从图4和图5比较来看,CPU的使用高峰发生在上午9-10点,而内存的使用高峰发生在下午的14-15点。


CPU和内存在24小时内使用的波动也给我们带来了优化空间,通过一定数量的预付费实例满足大部分时间的使用需求,再通过高峰期增加按需实例,来满足高峰期的计算资源的请求。


此外,CPU高峰和内存高峰的不同,也可以通过在不同时间段购买不同规格的按需实例来得到优化。

 

3.3 问题简化


        通过上面的分析,我们就可以建立一个纯整数规划模型来确定购买哪些规格的实例,买多少个,什么时间段买,选择什么付费方式买的问题。

        但在实际操作过程中会发现,问题过于复杂(实际情况是太多的决策变量导致无法使用EXCEL工具来进行求解)。于是,必须想办法简化问题,通过尽可能减少决策变量的方法来使得计算过程更简单。

 

3.3.1 确定一个地域

        由于不同的地域会导致相同实例规格的价格不同,因此实例单价这个系数会成倍增加。考虑到公司服务主要部署在阿里云杭州的数据中心,所以选择杭州为本次问题求解的固定地域。如果是多个地域,可以考虑不同地域分别应用模型,修改实例价格系数,分别求解。

        在本文中,我们将19个地域,缩减成1个。

 

3.3.2 确定规格列表

        在文章的第二部分,我们已经知道即使是同一个规格族,也有多个不同规格的产品。如图3,通用型实例就有8个规格产品。但是通过观察可以发现,相同的规格族,其CPU和内存的比例是固定的,其价格也是成正比的。差别只在于不同实例间CPU和内存的大小不同。因此,可以考虑选择各个规格族的若干个规格的产品,即可以代表整体。前提是试用了资源池化的技术。公司购买的所有实例都会通过Docker容器化[9]和Kubernetes容器编排框架[10],将实例资源进行汇总,形成一个大的资源池,依赖容器编排框架来将业务应用均匀分布在不同的实例上,同时业务请求也会根据负载均衡产品来将请求分发到不同的实例上。因此,我们可以简单假设这个资源池内的所有实例的CPU内存利用率是一致的。而通过资源池化的技术,添加2个2核vCPU 4G内存的ECS服务器,和添加1个4核vCPU 8G内存的ECS服务器带来的效果是一致的。所以,为了简化问题,我们可以选择从各个规格族中使用2种规格的产品来进行问题的求解。

        这样,就把同一个地域中总计510种产品规格缩减到如图7所示的8种规格中。后面的模型将从这8种规格中选取合适的规格和数量。


实例类型

实例规格

vCPU

内存

按量(小时)

优惠月价

年付月价

密集计算型

ecs.ic5.xlarge

4

4

1.18

340

289

密集计算型

ecs.ic5.2xlarge

8

8

2.36

680

578

计算型

ecs.c5.xlarge

4

8

1.24

358

394.3

计算型

ecs.c5.2xlarge

8

16

2.49

716

608.6

通用型

ecs.g5.xlarge

4

16

1.77

484.5

382.5

通用型

ecs.g5.2xlarge

8

32

3.54

969

765

内存型

ecs.r5.xlarge

4

32

2.26

619.4

489

内存型

ecs.r5.2xlarge

8

64

4.53

1238.8

978

图 7 规格与价格列表

3.3.2 确定付费模式列表

        1)考虑到运维的复杂度和可操作性,以及业务的持续性,我们可以忽略掉包周这种付费模式,因为包周与按量付费的价格相比并没有优惠。

        2)考虑到云计算技术仍然在持续快速发展中,公有云的成本也在下降,根据经验,每年阿里云都会下调ECS的单价,结合考虑到货币的时间成本,包2年,3年,4年,5年这几种模式也不在我们的考虑中。

        因此,单个规格产品的付费模式可以缩减为图7所示的3种付费模式,即按小时,包月和包年。

   

        通过以上三个角度的分析,我们可以在不明显影响模型结果的情况下,极大的缩减规模,从而可以使我们通过简单的EXCEL工具进行求解。

 

四.数据资料收集与整理

 

在建立模型求解问题之前,我们首先需要做的是数据收集。数据主要分三个部分,第一部分是公开数据,这些数据可以从阿里云上直接找到。筛选和整理出我们需要使用的部分即可。第二部分是经验数据,一台服务器健康运行状态下的CPU和内存负载有一个范围存在,这个范围虽然没有标准,但是经验丰富的运维人员可以根据自己企业的业务特点来估算一个合理范围。第三部分是业务数据,这个需要从企业运营数据中获得。本文中需要用到的非公开业务数据有ECS实例信息,CPU和内存数目,节点的资源使用率等信息。(因公司保密政策原因,本文中的所有非公开数据均进行过加工处理,非原始业务数据,但不会影响模型的建立和应用

 

4.1阿里云实例规格和价格清单

 

阿里云的所有地域、产品规格和价格清单均可以直接从阿里云官网获得。

本文选取的部分实例规格和价格清单如图7所示。

 

4.2 CPU和内存使用率的经验值

 

        根据运维经验,CPU利用率在20%-80%这个区间,内存的利用率在60-80%这个区间是比较健康的。内存短时间内超过80%也不会有太大问题。因此,在下面的模型中,我们将选择80%作为系数,确定CPU和内存利用率的最高阈值。

 

4.3 业务数据

 

        需要获得的业务数据有: 

  • 现有的ECS实例列表
  • 最近一个月,每天24小时,每个小时的CPU和内存使用量。

 

4.3.1 获取ECS实例列表

 

        如果实例数量不多,可以从阿里云ECS服务的管理界面上手工获取各个实例信息。但如果实例数量过多,这种方法耗时耗力。因此在本文中,作者采用阿里云提供的公开的API接口及配套的SDK来通过编程的方式获取实例信息。

        图8 是获取实例信息的代码片段。

        该程序的作用是通过阿里云企业账户的授权,调用阿里云SDK,获取指定区域内的所有实例信息,返回的结果将进一步使用程序进行加工处理,最后形成如图9所示的规格列表。

24092f35e6b8c500d7e2262c806b57a74d37e405

图 8获取实例信息的代码示例


091c8a5d269375a49ccfba6c4371b690a5768ea2

图 9 阿里云现有实例列表

4.3.2 获取单日每小时CPU和内存使用情况信息

 

        阿里云自有的ECS监控服务会统计并存储CPU和内存使用情况。我们仍然可以通过阿里云提供的相关API和SDK来获取这些信息。

        尽管阿里云会以秒为单位检测CPU和内存信息,但在存储时会做聚合,我们也无需了解每一秒的使用信息。利用阿里云的API和SDK,我们可以直接以3600秒为时间间隔,获取单日各个时间段内的CPU和内存的聚合后的信息,主要包括,该时间段内的均值,最高值和最低值。图10 是获取指定ECS实例单日每小时CPU和内存使用情况的代码示例。

fd7a20486b7063923ee293f0048121c72327d274

图 10获取指定实例单日资源使用情况代码示例


805a9a55ba837047e849779b0c70b45ba5efcf63

图 11 单日CPU使用情况


        图11所示为该程序获得的CPU单日使用情况的数据,该数据为JSON结构,数据点包含了1-24小时各个小时时间段内的CPU使用最高值,最低值和平均值。

   

        该程序获取的是指定节点的单日的小时数据。在第三部分中已经解释过,在资源池化技术的支持下,集群内各个节点的负载是均衡的,因此我们可以只采集单个节点的数据。但是业务量在不同日期可能会有不同,因此,作者进一步采用程序化的方式,通过循环调用metrics_collect脚本,来获取连续31天的数据,对每个时间段求平均值。最后得到如图12所示的单节点分时段CPU和内存使用率。


0a52908f258cc82f20afe678bb8d0d7021298e61

图 12分时段CPU和内存使用率均值


        通过现有的实例列表的规格,我们可以计算出当前购买的ECS的总vCPU数和总内存容量。结合收集得到的不同时段的CPU和内存利用率均值,我们就可以计算出,当前业务规模下,各个时间段实际需要的CPU和内存数量。再除以CPU和内存使用的最高比率,就可以得到各个时间段最合理的CPU和内存数。

 

五.模型的建立与计算

 

通过以上部分的数据收集,我们就可以得到足够的数据去建立模型,然后取出最合理的产品组合和付费方式。

 

5.1数学模型:

 

目标函数:

07001d34f9dcb15da2b7a999a1a26c56b657bec9

 

        目标函数由两部分组成:

        第一部分是包年费用

6744df3e0b5f113966936a23917f3bc3d511a4c2

  • Xn代表的是ECS规格n产品按年付费购买数量。
  • Pyn代表的是ECS规格n产品的按年付费的月价格。
  • 两者乘积求和再乘以12个月即是按年付费的价格。

     

第二部分是按需付费价格


826450d3726cdf646db46a7e5a93c7a95ecad5c1

  • Znm代表的是ECS规格n产品在m时段内按需购买数量。
  •  Phn代表的是ECS规格n产品按需付费的小时价格。
  • 两者成绩求和再乘以365天即是按需付费的年化价格。

 

线性约束条件:

a.  CPU约束

 cc734a43613e9f3759fcfbdcc0534f1e63bc7495

  • Xn代表的是ECS规格n产品按年付费购买数量。
  •  Znm代表的是ECS规格n产品在m时段内按需购买数量。
  • Cpun代表的是ECS规格n产品的vCPU核数。
  • TCm代表的是在m时间段业务实际所需的vCPU核数。

 

b.  内存约束

 8dbad8767630ce9e3d2cceccccfc44e31a9e558d

  • Xn代表的是ECS规格n产品按年付费购买数量。
  • Znm代表的是ECS规格n产品在m时段内按需购买数量。
  • Memn代表的是ECS规格n产品的内存数量。
  • TMm代表的是在m时间段业务实际所需的内存数量。

 

非负整数约束条件:

 12e4c5eac24eba99c4c4c908648e099b09871504

 

5.2 Excel模型:


 a4b4eced2e969e7d2b265a5b0ff09c2f97a59eb0

图 13阿里云ECS费用优化问题模型


图13展示使用EXCEL建立该纯整数规划模型的部分截图    

该图中,黄色代表决策变量,蓝色代表系数,我们需要求出的是各个规格的实例使用按年付费模式需要买多少个。同时,按需付费模式下,在不同的时间段,分别需要购买多少个。约束条件是各个时段所拥有的CPU和内存不超过阈值,并且实例个数为整数。目标是求出所有包年实例费用总和加上各个时段按需实例的费用总和,并使之在满足约束条件的情况下总和最小。


e7d6aa4b9792fb0a587b7dc1c1a1e8695db662e9a6a1f9298d30284df21022d018dd2b26c4b732c1

图 14问题求解


        通过EXCEL的Solver来进行求解,如图14所示,目标为总费用最小。约束条件总共有4个,分别限制内存和使用率的最高值,及必须是整数解。

        实际操作过程中发现,尽管已经做了很多优化,减少了非常多的决策变量,该模型在4核16G内存的电脑上用EXCEL进行求解时仍然运行了1个多小时都无法得到结果。最后只能通过上图所示,通过降低约束精度来加快运行速度。

 

六.结果分析和收益

 

    通过该模型的计算,我们可以得到以下结果:

bcefc6fdbc3960de6d8196cb31ebdab220cb7dfb

图 15年付费实例



        图15为得到最优解后,各个规格按年付费方式所需购买的实例数。

        需要包年购买:

        1) Ecs.ic5.xlarge实例 1台
        2) Ecs.c5.2xlarge 实例7台
        3) Ecs.r5.xlarge 实例3台

    

        按年付费总计费用为72194.4元/年

 99010bb1058cbaccfca67ddc7594048a15f1ceda

图 16按需付费实例


        图16为得到最优解后,各个时间段,按量付费方式所需购买的各规格的实例数。

        1) 8-9点时间段需要购买ecs.r5.xlarge实例1台。
        2) 9-10点时间段需要购买ecs.ic5.2xlarge 实例8台。
        3) 10-11点时间段需要购买ecs.ic5.xlarge 实例7台, ecs.g5.xlarge实例1台。
        4) 11-12点时间段需要购买ecs.ic5.xlarge实例5台,ecs.ic5.2xlarge实例1台。
        5) 13-14点时间段需要购买ecs.c5.xlarge实例4台。
        6) 14-15点时间段需要购买ecs.c5.xlarge实例1台,ecs.g5.2xlarge实例1台,ecs.r5.2xlarge实例1台。
        7) 15-16点时间段需要够买ecs.ic5.xlarge实例6台。
        8) 16-17点时间段需要够买ecs.ic5.2xlarge实例1台,ecs.c5.xlarge实例1台。

    

        折算成年费用后按需付费总计费用为23498.7元/年


        总费用 = 年付费费用+按需付费费用 = 72194.4元/年 + 23498.7 元/年= 95693.1元/年


80dfb39a17522bfec7c71557a15238dd7aab5726

图 17费用最小化后按年付费与按需付费分配


        图17展示了vCPU和内存在优化后的分配情况。

        vCPU的分配图中,橙色部分为年付费所获得的vCPU资源,黄色部分为按需付费获得的vCPU资源。内存的分配图中,蓝色部分为年付费所获得的内存资源,橙色部分为按需付费获得的内存资源。


        经过计算,在优化前,原本的ECS实例均为包年模式,总费用为154046.1元/年。经过模型优化后,采用包年结合按需付费的模式,总费用为95693.1元/年。费用降低了37.88%。


        该计算结果为根据处理过的业务数据计算得出的结果,实际节省的费用要远高于该数字。

 

七.该模型使用的限制条件

 

        该模型能够帮助企业决策者,根据自身的业务量,来做出购买何种类型ECS实例,何时购买,按什么付费方式购买的问题。但是,使用此模型仍有一定的限制条件。

 

7.1 业务稳定

 

        该模型是基于业务稳定的前提下建立的。在计算单日CPU和内存的使用率时,采取了获取31天信息,取平均值的方法。如果业务是不稳定的,波动过大,则会对模型的准确性造成影响。例如,如果业务是在上升过程中,则该模型计算出来的结果将无法满足未来的实际业务需求的计算资源。如果业务是在萎缩过程中,则该模型计算出来的结果将超过实际业务需求的计算资源。

        由于公司业务处于稳定期,因此,该模型适用于作者所在公司。如果业务处于上升期或萎缩期,可以考虑采用回归的方式求出业务量的函数,通过预测下一阶段业务量,修改模型中的约束条件,再求最优解。

 

7.2 产品规格限制

 

        由于公司只用到了单一规格族的ECS产品,因此,该模型只添加了x86系列ECS产品。如果实际业务中,需要其他规格族,则需修改已知条件和系数。同时决策变量也会增多,可能导致无法使用EXCEL工具求解。

 

7.3 资源池化

 

        该模型中,一个重要的要求就是资源池化。购买的实例必须投入资源池中,通过分布式框架,将业务负载均匀分布在不同节点上。如果技术上无法采用这样的架构,要求特定业务必须跑在特定规格的服务器上,则无法应用该模型。此时会增加数据采样的复杂度,模型也会增加更多的决策变量和约束条件。

 

7.4 其他费用优惠

 

        该模型只考虑了阿里云正常价格下的情况。未考虑阿里云可能会采取的各种优惠措施,如大客户优惠,双十一促销,常规降价等情况。如果优惠情况发生,需要修改系数,重新计算最优解。

 

7.5 实施

 

        通过该模型得到最优解后,真正的实施过程会面临2大挑战。

  • 每小时都要变更ECS的产品组合,对运维是个巨大的挑战。需要运维工程师能够自动化的去购买和释放ECS实例,因为交易涉及到公司的现金支出,除了合规性的要求,还需要防范程序错误可能带来的风险。
  • 模型在获取每小时CPU和内存使用率时采用的聚合间隔为1小时,用于计算时所使用的是平均值。因此,可能实际的CPU和内存使用情况要高于预计情况。与此同时,根据经验,业务在实际过程中可能出现“毛刺现象”,即短时间内资源利用率突然拉高,后又立即恢复。为了应对这样的突发情况,需要有一套监控和报警机制,当实际资源利用率高于阈值时,能自动化的进行临时扩容,必要时需采取熔断措施[11]

 

八.继续优化的方向

 

8.1业务量变化与资源使用率的关系

 

        虽然现阶段,公司的业务比较稳定,但是随着公司的发展,业务量不可能是一成不变的。幸运的是,我们公司云端请求的业务量的变化是可以提前预知的,不用采用回归的方式去预测。因为公司的云端服务服务对象主要是智能家居和机器人设备,我们可以根据销售量,准确的知道数天后(通常延后的时间是物流时间)业务量的变化情况。我们需要去统计的是,公司的不同品类的产品增加量与CPU和内存使用量的关系,从而根据不同品类的销售量,来计算出未来一段时间,CPU和内存的使用需求。

 

8.2 结合抢占式实例

 

        该模型只考虑了包年和按需付费这两种购买模式,当作者在写这篇文章的时候,发现阿里云近期新推出了一种模式,即抢占式实例。抢占式实例也是一种按需实例,与普通的按需实例不同的是,抢占式实例的每小时价格不是一成不变的,而是会根据供需关系的变化,改变单价。通常,抢占式实例的价格要低于按需实例。在购买抢占式实例时,必须为指定的实例规格设置一个价格上限(即愿意为这个实例规格支付的最高价格),当指定的实例规格当前市场价格低于出价时,就能成功创建抢占式实例,并按当前市场价格计费。当供需关系发生变化导致市场价格高于出价时,实例会被自动释放。

    抢占式实例适用于非实时性的,非关键型的应用。通过抢占式实例可以显著降低价格。通过获取抢占式实例不同规格的价格曲线,预测市场价格,并在模型中加入应用类型的分类,增加约束条件,可以进一步优化费用。

 

8.3 增加阿里云其他产品的计算

 

        在这篇文章中,作者只考虑了阿里云ECS的费用最小化。但是在实际业务中,除了ECS产品,我们通常都需要应用其他一些阿里云产品,如RDS[12],MQ[13],OSS[14]等等。对这些产品,与ECS类似,也有多种规格,和不同的付费方式,我们可以给每种产品分别建立线性规划模型,得出最优解,然后计算出阿里云使用总成本的最优解。当然,多个产品可能带来一些额外的复杂度,比如,不同产品之间是会有依赖关系,因此需要考虑模型计算的顺序,前一个模型计算出来的结果,可能会成为后一个模型计算的约束条件。

 

九.总结

 

        以上是作者关于优化阿里云ECS产品资源购买决策做成一些尝试,提出来供大家一起探讨,有任何建议或意见也欢迎联系作者。

        最后希望阿里云智能顾问产品越做越好,能早日帮助企业决策者分析产品使用情况,合理优化组合,降低使用费用,实现共赢。

 





参考资料:

[1] 阿里云 https://www.aliyun.com/

[2] 阿里云ECS https://www.aliyun.com/product/ecs

[3] AWS公有云 https://aws.amazon.com

[4] Cost Explorer https://aws.amazon.com/aws-cost-management/aws-cost-explorer

[5] 阿里云智能顾问 https://www.aliyun.com/product/advisor

[6] 阿里云地域及可用区 https://help.aliyun.com/knowledge_detail/40654.html

[7] 阿里云ECS产品规格 https://help.aliyun.com/document_detail/25378.html

[8] 阿里云ECS产品价格 https://help.aliyun.com/document_detail/25398.html

[9] Docker容器 https://www.docker.com/

[10] Kubernetes 容器编排框架 https://kubernetes.io/

[11] 微服务架构下的熔断 https://yq.aliyun.com/articles/7443

[12] 阿里云RDS https://www.aliyun.com/product/rds/mysql

[13] 阿里云MQ https://www.aliyun.com/product/ons

[14] 阿里云OSS https://www.aliyun.com/product/oss

[15] 商务与经济统计 原书第 13 版 戴维 R. 安德森 机械工业出版社

[16] 数据、模型与决策 原书第 5 版 弗雷德里克 S.希利尔 机械工业出版社

猜你喜欢

转载自yq.aliyun.com/articles/689605
今日推荐