本文作者:徐桂林,FIT2CLOUD(飞致云)首席布道师、东区总经理。
就在几天前,AWS微信公众号发布了回顾AWS过去十年(2006-03 ~ 2016-03)发展历程的一组数据。其中有一项数据让我非常吃惊,如下图:
为什么会对此吃惊呢?如果对照上面的数据和个人了解到的其他方面信息,我得出了下面的结论:
目前,AWS仅竞价实例的计算能力大概和2015年底国内所有主流公有云平台(运营商除外)的云主机计算能力总量相当。
如果你理解竞价实例的含义,相信你也一定和我一样惊讶于上面的结论。当然,如果你还不了解竞价实例也没关系,等我下面解释完后相信你会理解我为什么会惊讶。
什么是EC2竞价实例?
EC2实例按购买模式分为“按需实例(On-demand Instance)”、“保留实例(Reserved Instance)”和“竞价实例(Spot Instance)”。相比较于按需实例和保留实例,竞价实例非常不一样.该实例的价格随着供需关系的调整在不断更新。用户可以为获取该实例出一个自己接受的最高价格,如果当前市场的价格低于用户的出价,则用户获得(或者保留)实例资源进行计算。一旦市场价格高出用户的出价,则该计算资源会被亚马逊直接收回(注意:直到2015年亚马逊才会提前两分钟通知用户需要收回竞价实例,之前都是直接收回实例)。通过上面描述,可看出EC2竞价实例有两个特征:
- 该实例的价格随供需随时变化;
- 该实例是会被AWS随时收回(如果你的出价不够高);
目前的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全球数据中心的机柜数目做了个估算(如下图):
从上图可以看出,在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操作系统)竞价实例过去一周的价格走势图:
从上图可以看出该类型竞价实例过去一周价格一直在$0.02/小时上下波动。对比另外两种购买方式,竞价实例的价格优势非常巨大(如下表)。
注意:除了如上价格波动和随时会被收回这两特征外,竞价实例和其他两种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的每次竞价请求需要用户提供的参数包括如下:
- 需要的计算资源量(如CPU总核数、Memory和Disk的总容量)
- 可以承受的最高单价
- 该申请的有效期
- 启动实例的初始化配置(如镜像ID、UserData等)
下图就是AWS Spot Fleet操作的界面:
有了大量第三方公司及AWS自身的努力,竞价实例的使用门槛在不断下降,让越来越多的用户都有可能使用好竞价实例并从中收益。
竞价实例在国内有可能落地吗?
既然竞价实例在AWS全球市场的发展势头这么好,它在国内能够落地吗?具体可以如下分析:
- 首先,本人还没有在国内云市场上发现一家提供竞争实例类型的供应商。即使是AWS在国内也未提供该服务(估计最大的挑战还是国内数据中心规模不够大,希望其宁夏数据中心对外开放后能够提供该类型实例)。
- 其次,很多人担心国内用户是否能够接受竞价实例。这个担心也非常合理,毕竟国内主要的云主机使用方式仍然是包年包月模式,按需付费的实例类型都还未普及。所以,用户对此接受确实需要一段时间。但是,用户不同业务对不同模式计算资源的需求是会长期真实存在的。一旦市场上有这种类型实例出现,我相信一定会有用户去尝试,毕竟这可以大大降低用户某些业务的计算成本,增强市场竞争力。
- 再次,国内云供应商有没有主动推进竞价实例落地。短期看,以包月模式为主的国内云供应商对竞价实例的推进意愿不会太强,他们更可能是通过降价促销的方式来消化库存。但是,我相信随着云主机规模的扩展(如国内云主机规模到达1000万台时),公有云供应商在库存上的压力会快速提升。这时候如何以最合理的市场价格消化库存会是一个重要课题,尤其是那些以按需服务为主要实例类型的供应商,其弹性负载导致的库存剧烈变化一定会需要一种比降价促销更高级的去库存方式。这时候竞价实例的推出就会自然而然得到来。
如上所述,竞价实例在国内的落地仍然需要一个较长的时间。在这个过程中,无论公有云供应商还是云上用户都需要做出改变和努力。
- 首先,如我之前翻译的那边文章「为什么说一个EC2实例并不是一台服务器」所言。用户要逐步改变把云主机仅仅当成传统服务器的替代品使用的观念,逐步能让云主机成为部分业务的一个building block。这时候,竞价实例就能给你的业务带来最大的价值。
- 其次,作为公有云供应商。为了避免产品同质化竞争和亏本的降价促销,希望能够积极考虑竞价实例(以及按需实例),从而形成自身的差异化竞争点。其实,个人一直觉得不用特别担心用户会不会使用好竞价实例,给用户提供足够好的基础组件,然后让用户去玩出各种花样也未尝不是一个很好的技术路径选择。其实,这也是AWS产品设计的一个重要原则:提供基元组件而不是框架服务。
附录材料
- 下图是AWS EC2实例购买方式演化历程。注意,为满足用户需要使用竞价实例不中断完成一段时间负载的要求,AWS在2015年还开始提供Spot Block Instance。这种竞价实例有固定预留时间(1个小时或者6个小时),在预留时间内不会被AWS主动收回,但是其申请时候的价格仍然是不断变化的(比标准的竞价实例稍微贵一点),关于Spot Block Instance的具体细节请参考AWS博客文章(https://aws.amazon.com/blogs/aws/new-ec2-spot-blocks-for-defined-duration-workloads/)。
- Google于2015年推出可中断实例类型(preemptible VM)。和AWS竞价实例类似,它可以随时被抢占。但非常有趣的是Google对此类实例提供的是一个固定折扣价格(70%折扣)。具体可见Google云平台官方网站(https://cloudplatform.googleblog.com/2015/05/Introducing-Preemptible-VMs-a-new-class-of-compute-available-at-70-off-standard-pricing.html)。