快速玩转阿里云竞价实例
什么是竞价实例
竞价实例是一种按照供需关系变化价格波动的一种后付费类型实例,相对于按量付费实例价格有较低的折扣。
竞价型实例使您可以对 ECS 实例出价,这可以大幅降低您的 ECS 成本。阿里云会对每个可用区中的每种实例类型设置基础价格,竞价型实例会根据市场供需关系在基础价格上进行一定的上下浮动(目前价格波动是按量付费价格的1~10折),如果您的出价高于当前实际的成交价,则可正常创建出实例,否则出价失败,不进行生产。
当然低价的ECS服务也存在一定的风险,当市场成交价格高于您的出价时,或市场供需关系严重不均衡时,阿里云有权终止您的ECS实例,当然在终止前5分钟,阿里云会进行meta信息的通知,您可以订阅阿里云metasdata的信息以在ECS终止前进行数据的保存和清理工作,以避免数据的丢失。
竞价型实例和按需实例的主要差别在于:竞价型实例每小时价格会根据需求变动,并且阿里云可以根据竞价型实例每小时价格或可用情况的变化终止单个竞价型实例。
合理的使用阿里云ECS竞价实例,最高可以为您降低50%
–90%
的运营成本(相比按量付费的实例),可以用相同的预算,将计算容量提升 2
–10
倍。
什么样的业务适合使用竞价型实例
竞价实例非常适合于各种工作负载,如可弹性伸缩的Web站点服务、图像渲染、大数据分析和大规模并行计算等,您的应用程序的分布度、可扩展性和容错能力越高,就越能节省成本和提升吞吐量。
目前我们得出能在竞价实例上执行最佳实践的业务如下所示:
- 实时分析业务
- 大数据业务
- 地理空间勘测分析业务
- 图像和媒体编码业务
- 科学计算业务
- 可弹性伸缩的业务站点、网络爬虫业务
- 图像和媒体编码业务
- 基因计算业务
- 体验测试业务:新一代ECS产品家族的规格意味着更加强大的计算处理能力,推广初期您可以使用低至1折的价格进行SPOT做产品适用度测试,以便您后续选择更有性价比的产品
玩法解密
出价模式
目前阿里云主要提供一次性竞价请求,后续会推出持久性竞价请求和连续时间段竞价请求,当前主要在售的为一次性竞价请求。
一次性竞价请求主要有2种出价模式:
-
用户出能接受的最高价(SpotWithPriceLimit)
用户可以在控制台看到指定可用区指定规格的历史价格,以推算自己应该的出价,还有一个重要指标,目前竞价实例的最高价为按量付费的价格,用户在控制台购买时可以看到一个价格选项区间,如下图所示,您在对应的区间直接出一个价格即可。当然,最好是出一个合理的价格,否则您的实例可能会很快被释放哦。
需要说明的是这里的出价是指实例规格的出价,不包含磁盘、带宽,只有计算部分有竞价优惠哦。
-
不出价,随低价波动,使用低价(SpotAsPriceGo)
目前open api可采用不出价,指定SpotStrategy为SpotAsPriceGo(API文档地址:https://help.aliyun.com/document_detail/25499.html?spm=5176.doc25484.6.798.eAtJoe)则表示使用随低价波动
快速购买
目前和阿里云ECS其他付费方式一样,可以通过控制台
和openAPI
两种方式购买
-
控制台购买
-
openAPI购买
- openAPI对应文档地址:https://help.aliyun.com/document_detail/25499.html?spm=5176.doc25484.6.798.eAtJoe
- openAPI购买竞价实例重要参数:
- InstanceChargeType 需要选择:PostPaid,默认值:PostPaid
- SpotStrategy 需要选择
SpotWithPriceLimit:设置上限价格
或SpotAsPriceGo:系统自动出价,最高按量付费价格
其中一种。 - SpotPriceLimit,只有SpotStrategy选择为SpotWithPriceLimit才生效,支持最大3 位小数。
- 哪些集群能买到竞价实例呢?可使用openAPI接口
DescribeZones
查询,对应文档地址:https://help.aliyun.com/document_detail/25610.html?spm=5176.doc25484.6.880.Lx2li9
处理中断
对竞价型实例的需求在不同时间可能有显著的差异,竞价型实例的可用性也会因为未使用 ECS 实例的数量而差别巨大。此外,不论您的出价有多高,您的竞价型实例仍有可能会中断。因此,必须确保应用程序针对竞价型实例中断做好准备。我们强烈建议您不要为不能中断的应用程序使用竞价型实例,您可以使用云盘作为存储介质,以便收到通知后存储相关数据到云盘,后续可通过挂载云盘继续之前的任务。
下面列出了阿里云终止您的竞价型实例的可能原因:
- 价格 – 现货价格高于您的出价。
- 容量 – 如果没有足够的未用 ECS 实例来满足对竞价型实例的需求,阿里云将从出价最低的实例开始终止竞价型实例。如果多个竞价型实例的出价相同,则随机确定实例的终止顺序。
下面提供了在您使用竞价型实例时可以遵循的最佳实践:
- 选择一个合理的出价。您的出价应该足够高,这样您的请求才有机会完成,但又不能高于您愿意支付的价格。这非常重要,因为在长时间供应不足的情况下,现货价格可能会在这段时间内居高不下,因为此时价格依据的是最高出价。我们强烈建议您的出价高于按需实例的价格。
- 使用包含所需软件配置的镜像,确保您的实例在请求完成时随时可以启动。您还可以使用用户数据在启动时运行命令。
- 使用不会受竞价实例终止影响的位置作为介质来存储您的重要数据。例如,您可以使用 独立云盘 、OSS、RDS等作为数据存储节点。
- 将工作拆分为小的任务 (使用网格、Hadoop 或基于队列的架构) 或者使用检查点,以便您经常保存工作。
-
使用竞价型实例释放通知监控您的竞价实例的状态。您可以通过metadata接口1分钟获取一次实例的状态,阿里云ECS会在终止前5分钟通知metadata,最坏情况下你有4分钟的时间处理善后。
注:metadata查询URL:http://100.100.100.200/latest/meta-data/instance/spot/termination-time,返回格式示例:2015-01-05T18:02:00Z,时间为UTC时间,如果返回为空,说明可持续使用
-
测试您的应用程序,确保它很好地处理了意外终止的实例。您可以使用按量付费实例来运行应用程序,然后自行终止该按需实例,以便确认这一点。
收费策略
目前竞价实例
已经升级为秒级计费,每个小时整点出一次账单,对应账单周期的价格为该小时起始时间的价格(首个小时按照购买时的成交价格) 按照秒级进行计费,如下是一些实际使用的场景::
-
由于阿里云价格或市场供需关系导致的释放,最少保证用户使用1小时,超过1小时最后一个账单周期按照秒级进行计费
- 出价太低1小时内实际成交价就高于用户出价的,至少保证实际使用1小时,收1小时费用,费用单价为购买时的实时成交价
- 实际使用超过1小时的按照账单周期(整点出账单)计费,最后一个账单周期按照实际使用时间秒级计费,不足1分钱收1分钱,首个账单周期为用户购买时的实时成交价,后续每个账单周期为对应账单周期的起始实时成交价
- 示例2:如下图所示,用户小B在8:40出价0.020元/小时购买了某实例,受价格波动影响,10:20时实时成交价0.028元/小时高于用户的出价0.020元/小时,由于小B实际使用时长已经超过1小时,因此直接标记释放,用户共存在3个账单周期内,8:00~9:00、9:00~10:00、10:00~11:00,收费详情为:8:40~9:00 20分钟,收费0.003元,9:00~10:00 1小时 0.016元,10:00~10:20 20分钟 0.012元,合计 0.031元 实际使用时长1小时40分钟
- 示例3:如下图所示,用户小C在8:40出价0.025元/小时购买某实例规格,受价格波动影响,在10:50时实际成交价格0.031元/小时高于用户的出价0.025元/小时,由于小C实际使用时长超过1小时,因此标记释放,用户共存在3个账单周期内,8:00~9:00、9:00~10:00、10:00~11:00,实际用户的账单周期为:8:40~9:00 20分钟 0.003元,9:00~10:00 1小时 0.016元,10:00~10:50 50分钟 0.013元,合计 0.032元 实际使用时长2小时10分钟
- 示例2:如下图所示,用户小B在8:40出价0.020元/小时购买了某实例,受价格波动影响,10:20时实时成交价0.028元/小时高于用户的出价0.020元/小时,由于小B实际使用时长已经超过1小时,因此直接标记释放,用户共存在3个账单周期内,8:00~9:00、9:00~10:00、10:00~11:00,收费详情为:8:40~9:00 20分钟,收费0.003元,9:00~10:00 1小时 0.016元,10:00~10:20 20分钟 0.012元,合计 0.031元 实际使用时长1小时40分钟
-
用户自行释放,按照实际账单周期收费,秒级计费,最少收费1厘钱,不满1厘钱按照1厘钱收取
- 用户短时间内创建释放,按照实际使用时间秒级计费,不足1厘钱收1厘钱
-
用户实际使用时间超过1小时,按照实际账单周期秒级计费。
- 示例6:用户小F在8:40出价0.035元/小时购买了某规格ECS,在10:50进行了释放操作,用户共占用3个账单周期8:00~9:00、9:00~10:00、10:00~11:00,实际使用小时3小时(2小时10分钟,不足1小时按1小时计算),账单周期=实际小时数,最后一个账单周期计费,实际计费如下:
- 8:40~9:00 单价 0.010元 20分钟 0.003元
- 9:00~10:00 单价 0.016元 1小时 0.016元
- 10:00~10:50 单价 0.015元 50分钟 0.012元 合计0.031元
- 示例6:用户小F在8:40出价0.035元/小时购买了某规格ECS,在10:50进行了释放操作,用户共占用3个账单周期8:00~9:00、9:00~10:00、10:00~11:00,实际使用小时3小时(2小时10分钟,不足1小时按1小时计算),账单周期=实际小时数,最后一个账单周期计费,实际计费如下:
使用小技巧
- 尽量避免整点开始购买,以避免库存急剧下降,引发价格飙升,导致实际账单计费较高
- 选择一个合理的出价。您的出价应该足够高,这样您的请求才有机会完成,但又不能高于您愿意支付的价格。对于不想关注价格趋势变化,又希望使用较低的价格时,可使用SpotAsPriceGo按照系统低价计费。