云端俭省之道 — 竞价实例篇

云端构建大规模系统的挑战

云计算平台“按需获取”的特性使得用户可以随时获取所需计算资源,实现计算资源与业务规模的动态匹配。云计算时代计算资源已不再是构建大规模系统的瓶颈,多数情况下成本成为了企业在构建大规模应用时的最大挑战。

 

如何降低云端系统的成本

降低云端系统的成本,最核心的就是要充分利用云计算的特点,尤其是“按需获取”和“按使用付费”。例如,根据业务量变化来及时伸缩计算资源就是常见的降低成本的方式。在架构上以微服务架构替代单体架构,使系统获得更细的伸缩粒度,从而利用更合适,更便宜的计算资源。

关于降低成本一个容易被忽视的与构建传统非云端系统不同的地方是系统的实现也要充分考虑云计算的定价模式,例如,云端的消息服务通常是按请求次数来计费的,所以在一次调用中发送多条消息就可以将成本降至原来的几分之一。

实例即云端虚拟主机(instance)是最基本的计算资源,当前在大多数的云上系统中,实例成本在总成本中都占有很高的比重(目前多数云端系统都是直接从本地系统迁移过来的,较少采用Serverless等架构),所以,关注实例的收费模式,对于降低系统成本是非常重要的。

以下是3种基本的实例定价模式:

  • 按需:随用随启,根据运行的实例以按小时或按秒的方式计算容量并付费。
  • 预留:有一定的使用承诺(如:1年,3年的使用承诺),与按需实例的定价相比,预留实例可提供大幅折扣(通常为按需实例的60%)。
  • 竞价:是一种由云商推出的极端弹性和廉价的计算资源。它的价格根据供需关系变化,与按量付费实例的相比具有非常明显的价格优势(通常为按需实例的10%-20%)。同时,竞价实例中存在系统中断机制,系统将根据价格和资源池的存量等情况综合考虑,决定中断运行实例。

由以上可见竞价实例是最具有价格优势的计算资源,有效的利用好竞价实例将可以大幅节省计算资源的成本。

 

关于竞价实例

收费模式

为了获得某一种竞价实例资源,用户需要设置一个最高价,当设置的最高价高于当前该种实例的市场价格时用户就可以获得实例。这里要注意的是用户根据使用量支付的费用是基于市场价格的,而不是用户的出价。

实例池

整个竞价实例市场按地区(region), 机型,可用区(Availbility Zone)维度切分成了很多不同的实例池,如下图。每个池都单独评估自己的供求关系,这意味着每个池都有自己的容量和市场价格。也就是说当某个池的供需关系导致价格发生变化或者实例被中断回收时并不会影响其他的池。

中断

竞价实例的中断发生在以下两种情况:

  1. 为某个实例池设置的最高竞价小于当前该池的市场价格
  2. 实例池出现供需关系紧张,资源短缺

在实例被终止回收前的数分钟,云平台会发出中断告警。

 

 

应用竞价实例

由于竞价实例存在被中断的可能性往往吓退了不少的用户,而实际上竞价实例规模巨大(AWS 曾披露:2016年一周的竞价实例的计算能力大于2012一年所有的计算实例),在合理利用的情况下是可以保证集群中实例容量的稳定性的。云商也会提供竞价实例的历史价格及回收率查询(如:AWS的相关数据可以在这里查到 https://aws.amazon.com/ec2/spot/instance-advisor/)。

 

典型适用场景

1 时间灵活性

目前,竞价实例被较多的使用在大数据计算,机器学习模型训练等后台批量任务中,这类任务的通常的特点是与线上系统不同,不要实时的对线上请求给以响应,我们称之为时间灵活性。所以,可以利用重试机制实现对中断进行容错。目前,如果你使用云平台提供的大数据服务或机器学习服务(如:AWS的EMR和SageMaker),云平台通常都对使用竞价实例提供了内置的支持(可以自动完成任务的重试)。

 

2 实例灵活性

当在线服务的请求不需要由某个特定实例来进行处理,这样的服务就具有实例灵活性。如果能够使线上服务具有良好的弹性,并且有效地处理好中断的影响,竞价实例同样可以被使用于线上服务集群。

提升线上系统的弹性通常可以遵循面向失效和面向恢复的设计原则。详细内容可以参考我在Qcon2019 北京上的演讲“超大规模高可用性云端系统构建之禅” (https://www.infoq.cn/article/k4aTYPotBB-5IcoAkUVq)。

 

本篇中将重点介绍竞价实例集群的一些管理实践,它们可以非常有效的提高集群容量的稳定性,从而帮助我们减少竞价实例回收带来的对服务可用性的影响。

 

  1. 混搭构建集群
  • 多种价格模式的混搭

可以考虑通过预留实例来保证服务基本的SLA,利用Auto Scaling和竞价实例来应付流量变化。

- 不同池的竞价实例混搭

如上面提及的不同池的价格变化和中断回收是独立的,所以我们在机器中混合来自不同池的主机就可以有效的避免某个池内机器发生短缺而导致中断引起的集群大规模容量损失。

 

  1. 主动管理中断

云计算平台都会在终止竞价实例的数分钟前发出中断警告(中断警告可以通过查询实例的元数据或者监听事件管理器来获得)。有效的利用这段时间,不仅可以实现被中断实例的完美终止(graceful termination),还能通过服务及状态迁移大大提高集群容量的稳定性从而保证可用性和服务能力。

对于最为简单的场景通常包括以下步骤:

对于更为复杂的情况,

  1. 有状态的情况:需要处理数据和状态的迁移
  2. 使用其他服务发现机制:需要调用其他服务发现机制来管理服务实例的添加和移除。目前,consul是最常见的服务发现软件
  3. 容器化环境:如Kubernetes,这时需要配合kubernetes来完成中断节点上Pod的迁移及替代node的预先开启。

 

在实践中,我们可以借助SpotMax的MaxGroup来完成这些复杂的主动中断管理工作。

 

  1. 下载MaxGroup Lite版本 http://spotmax.mobvista.com/pricing
  2. 获取免费license:http://spotmax.mobvista.com/user/service
  3. 快速使用文档:https://docs.spotmaxtech.com/maxgroup-shuo-ming-wen-dang/kuai-su-ru-men
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值