你知道AWS的EC2竞价实例规模有多大了吗?

2016/04/06 - 上海 by 徐桂林

就在几天前,AWS微信公众号发布了回顾AWS过去十年(2006-03 ~ 2016-03)发展历程的一组数据。其中有一项数据让我非常吃惊,如下图:

EC2竞价实例规模

为什么会对此吃惊呢?如果对照上面的数据和个人了解到的其他方面信息,我得出了下面的结论:

目前,AWS仅竞价实例的计算能力大概和2015年底国内所有主流公有云平台(运营商除外)的云主机计算能力总量相当。

如果你理解竞价实例的含义,相信你也一定和我一样惊讶于上面的结论。当然,如果你还不了解竞价实例也没关系,等我下面解释完后相信你会理解我为什么会惊讶。

什么是EC2竞价实例?

EC2实例按购买模式分为“按需实例(On-demand Instance)”、“保留实例(Reserved Instance)”和“竞价实例(Spot Instance)”。相比较于按需实例和保留实例,竞价实例非常不一样.该实例的价格随着供需关系的调整在不断更新。用户可以为获取该实例出一个自己接受的最高价格,如果当前市场的价格低于用户的出价,则用户获得(或者保留)实例资源进行计算。一旦市场价格高出用户的出价,则该计算资源会被亚马逊直接收回(注意:直到2015年亚马逊才会提前两分钟通知用户需要收回竞价实例,之前都是直接收回实例)。通过上面描述,可看出EC2竞价实例有两个特征:

目前的EC2竞价实例到达多大规模?

如前所述,EC2的竞价实例很难满足通常我们对于一个云服务的定义。很多时候,大家都把它作为AWS售卖自己闲置资源的一种手段而已(它最开始确实也是这个目的),所以自然就不会认为其会达到多大规模。但是根据前面AWS公布的数据,这个量确又是非常惊人。为什么这么说呢?前图提到其平均计算能力已经超过了2012年所有EC2实例计算能力的总和。那我们就首先估计一下AWS在2012年的时候所有EC2实例规模。

尽管AWS从来不发布其虚机实例的具体数量,但是还是有很多第三方机构和合作伙伴会有相关推测。其中大家比较认同的一组数据来自这篇文章(https://huanliu.wordpress.com/2014/02/26/amazon-ec2-grows-62-in-2-years/)。在这篇文章中,作者对AWS全球数据中心的机柜数目做了个估算(如下图):

EC2的Rack数字

从上图可以看出,在2012年三月份EC2的全球机柜数目至少到了7100个,按照文章中提到的当时机柜服务器平均密度(120台/rack),可以得出当时EC2虚机数下限为:

7100 x 120 = 85.2万(台)

如上数字还是只是2012年年初的数字,按照同篇文章的数据,到2013年十二月份EC2虚机数目已经到达297万台。由此可以推测即使在2012年年中的时候AWS活跃EC2台数也已经达到100~120万台的规模。而这个规模意味着什么呢?按照我个人的判断,国内现在所有主流公有云厂商(不包括运营商)在2015年底的规模总和大概也就在这个规模。所以,可想而知EC2的竞价实例的规模已经有多大了。就是这种价格随时变化、可以被AWS随时收回的实例,其规模都已经赶上全国各种云主机的总量。这种为“去库存”而引入,本以为会是小众需求的实例类型,现在却已经是AWS用户中的一种常态。所以,我们在对此感到吃惊的同时也值得好好反思其背后的原因。

注:由于Spot Instance会随时被AWS收回,所以用台数描述Spot Instance的规模不太合适。更严格的方式应该是计算能力(CPU/Memory量)。这里为简单起见,我用虚机台数做一个大概对比,可能不太严谨,但对整个结论应该没有实质性影响。

为什么竞价实例这么受欢迎?

如果初看竞价实例上面的两个特征,很多人会可能困惑为什么这种实例这么受欢迎。但是,如果深入思考,我们会发现这种实例其实是一种对于AWS和用户双赢的产品形态。

竞价实例是AWS售卖自身闲置资源的很好方式

对于公有云厂商来说,为最大保障其云上弹性负载和未来发展需要,必然需要投资大量的IT基础设施,就不可避免存在相对可观的闲置资源。但是IT基础设施质保期非常短且更新淘汰速度非常快。所以必须要及时处理掉这些可能的闲置资源,但同时又不能影响其他业务开展。可以随时收回的实例最符合这种需求,但是挑战在于如何给这种实例定价。一种可能的办法直接降价促销,但AWS选择了另外一种更符合自身利益的方式,即竞价机制,由市场来发现真正的价格,从而达到尽可能以最合理的价格卖出最多闲置资源的目标。所以,竞价实例这种产品形态也就由此而生。

在竞价实例的发展过程中,AWS还发现了它的另外一个非常好的用途,就是甩卖上一代EC2实例。由于CPU/Memory/Disk的快速迭代,为保证市场竞争力,AWS虚机类型迭代周期非常短,过去一段时间基本是一年更新一代(最新虚机类型已经是第四代)。由于价格差距不大,客户在购买按需实例和预留实例时倾向于最新代的虚机类型(性价比最高)。由于机器质保期会比更新周期长几倍(一般为三年),所以较老类型的虚机闲置比例就会偏搞。通过竞价实例为这些老型号闲置虚机提供了一个“去库存”的途径。如果仔细观察竞价实例的价格,你会发现老一代的实例类型其竞价实例价格最便宜,而且波动还很小。所以,充分发展竞价实例是AWS在保障自身虚机类型快速迭代的同时避免老型号虚机过度限制的有效途径。

综上来说,你可以看到竞价实例对于像AWS这样大规模的公有云供应商来说是一个非常有益产品形态,所以AWS自生也有足够愿意促进其发展。

竞价实例为用户的部分业务提供了非常廉价的计算资源

对于云平台上的用户来说,其业务形态非常多样化。既有那些对于连续运行和实时响应要求非常高的在线业务,又有大量离线业务和实时性要求不敏感的业务,还有常见的高性能计算(HPC)场景。甚至,用户端还存在部分对于成本非常敏感的业务(当处理成本高于某个阀值后该业务的商业价值就不存在,如某些日志处理业务)。在过去,无论用户的业务类型是哪种,他能获得的资源都是为在线业务所准备的。竞价实例的出现为非在线业务或者成本敏感业务提供了一种全新的计算资源类型。

由于竞价实例会有可能被随时收回,其市场价格比按需实例和预留实例便宜非常多,否则用户就会转向购买另外两种实例。例如,下图就是AWS新加坡区域m4.large类型(Linux操作系统)竞价实例过去一周的价格走势图:

EC2竞价实例架构历史

从上图可以看出该类型竞价实例过去一周价格一直在$0.02/小时上下波动。对比另外两种购买方式,竞价实例的价格优势非常巨大(如下表)。

按需实例 预留实例 竞价实例
$0.178/h $0.1042/h (41%) $0.02/h(11%)
注意:除了如上价格波动和随时会被收回这两特征外,竞价实例和其他两种EC2实例没有任何使用上的区别

根据AWS官方博客(https://aws.amazon.com/blogs/aws/new-ec2-spot-instance-termination-notices/),已经有不少大型企业(如本田汽车)成功使用AWS的竞价实例把部分业务的计算成本下降高达70%。

竞价实例的使用门槛在不断下降

由于竞价实例在价格和回收上的不确定性,导致竞价实例的使用门槛比其他类型实例要高不少。除了对于业务自生的要求外(如可中断、对完成时间不敏感等),如何定义竞价策略,选择最佳组合方式等也都有不低门槛。非常幸运的是,如同AWS其他服务一样,AWS为竞价实例的各种操作(出价、查询历史价格等)提供了全部API,这也让自动化购买竞价实例成为可能。得益于此,各种围绕竞价实例的第三方公司纷纷出现。它们主要是帮助客户制定竞价策略,根据历史竞价记录实时调整出价,从而帮助用户用最少的钱最快完成任务。当然,AWS也在不断改进竞价实例的用户使用体验。去年,AWS为竞价实例推出了全新的Spot Fleet API。简单来说,通过这个API,用户不再需要关注每个竞价实例的具体竞价策略,转向关注自己业务需要的计算量、完成时间以及成本,而具体竞价实例的组合搭配则由AWS在后台根据当前竞价实例价格智能帮助用户选择。Spot Fleet API的每次竞价请求需要用户提供的参数包括如下:

下图就是AWS Spot Fleet操作的界面:

EC2竞价实例架构历史

有了大量第三方公司及AWS自身的努力,竞价实例的使用门槛在不断下降,让越来越多的用户都有可能使用好竞价实例并从中收益。

竞价实例在国内有可能落地吗?

既然竞价实例在AWS全球市场的发展势头这么好,它在国内能够落地吗?个人分析如下:

如上所述,竞价实例在国内的落地仍然需要一个较长的时间。在这个过程中,无论公有云供应商还是云上用户都需要做出改变和努力。

附录材料

EC2购买方式演化图