抢占式实例是一种按需实例,旨在降低您部分场景下使用ECS的成本。创建抢占式实例时,您必须为指定的实例规格设置一个价格上限(即您愿意为这个实例规格支付的最高价格),当指定的实例规格当前市场价格低于您的出价时,您就能成功创建抢占式实例,并按当前市场价格计费。您能稳定持有实例一小时。之后,当市场价格高于您的出价或者资源供需关系变化时,实例会被自动释放。抢占式实例的生命周期如下图所示。



应用场景

抢占式实例适用于无状态的应用场景,比如可弹性伸缩的Web站点服务、图像渲染、大数据分析和大规模并行计算等。您的应用程序的分布度、可扩展性和容错能力越高,使用抢占式实例越能节省成本和提升吞吐量。

您可以在抢占式实例上部署以下常见业务:

  • 实时分析业务
  • 大数据业务
  • 地理空间勘测分析业务
  • 图像和媒体编码业务
  • 科学计算业务
  • 可弹性伸缩的业务站点、网络爬虫业务
  • 图像和媒体编码业务
  • 测试业务

有状态应用,比如数据库,不宜使用抢占式实例,因为竞价失败等因素导致实例被释放时,应用状态难以保存。

出价模式

抢占式实例支持一次性竞价请求。一次性竞价请求包括以下2种出价模式:

用户设置能接受的最高价(SpotWithPriceLimit)

在这种模式下,您必须为指定的实例规格设置一个价格上限,即您愿意为这个实例规格支付的最高价格。通过 RunInstances 接口或 ECS购买页面 创建抢占式实例时,您能按这种模式出价。

目前,抢占式实例的最高价格与同规格按量付费实例相同。创建抢占式实例时,您能看到一个价格区间,您可以结合自身业务,同时考虑可能的价格波动,在这个价格区间内设置一个合理的价格。当当前市场价格不高于您设置的价格,而且库存充足时,您就能创建实例。如果您的出价充分考虑了可能的价格波动,一小时 保护周期 后,您仍能较长时间持有抢占式实例。否则,一小时后,实例随时可能被释放。

跟随当前市场实际价格(SpotAsPriceGo)

使用 RunInstances 接口创建抢占式实例时,将 SpotStrategy 参数设为 SpotAsPriceGo,选择跟随当前市场价格的模式,即表示始终接受实时的市场价格作为实例规格的计费价格。

目前,在 ECS购买页面 上创建抢占式实例时,不能选择这种出价模式。

保护周期

抢占式实例一旦创建就拥有一小时保护期,即在创建后第一个小时内,我们不会因为市场供需关系而释放您的实例,您可以在该抢占式实例上正常运行业务。超过保护周期,即一小时后,我们每5分钟检测一次实例规格当前市场价格和库存,如果某一时刻的市场价格高于您的出价或资源库存不足,我们将释放您的抢占式实例。

价格和计费

抢占式实例的价格和计费有以下特点:

  • 价格

    抢占式实例的价格是指实例规格(包括vCPU和内存)的价格,不包括系统盘、数据盘、网络带宽的价格。系统盘、数据盘按 按量付费 规则计费。网络带宽按按量付费实例的带宽计费规则计费,详细信息,请参见 公网带宽计费

  • 计费周期

    抢占式实例计费周期为小时。不足一小时按一小时计费。

  • 计费时长

    按实际使用时长计费。实际使用时长是指抢占式实例创建到释放。释放后,抢占式实例才停止计费。如果您使用 StopInstance 接口或者 在ECS管理控制台上 停止实例,实例会继续计费。

  • 市场价格

    创建抢占式实例时,如果出价高于当前市场价格而且资源库存充足,您的实例就会运行。最终实例规格会按照市场价格计费。

抢占式实例的市场价格会因为市场对某一种实例规格的供需变化而浮动。因此,您可以充分利用抢占式实例的价格浮动特性,在适当的时间购买抢占式实例,降低计算成本,并在整体成本下降的前提下,提升业务在该时间周期内的吞吐量。

创建抢占式实例

您能通过 RunInstances 接口或 ECS购买页面 创建抢占式实例。

抢占式实例创建成功后,操作与按量付费实例相同,您也可以将它与其他云产品(如云盘、EIP地址等)组合使用。

停止抢占式实例

您可以使用 StopInstance 接口或者 在ECS管理控制台上 停止抢占式实例。VPC类型的抢占式实例支持 按量付费实例停机不收费 功能。

根据抢占式实例的网络类型和出价模式不同,实例停止后再启动会有不同的表现,如下表所示。

网络类型 + 出价模式 停止模式 停止后再启动时
VPC + SpotWithPriceLimit 保留并收费 在保护周期内能正常启动。过了保护周期:
  • 如果您设置的价格不低于市场价格并且资源库存充足,能正常启动。
  • 如果您设置的价格低于市场价,或者资源库存不足,不能启动。
经典网络 + SpotWithPriceLimit N/A
VPC + SpotAsPriceGo 保留并收费 在保护周期内能正常启动。过了保护周期:
  • 如果资源库存充足,能正常启动。
  • 如果资源库存不足,不能启动。
经典网络 + SpotAsPriceGo N/A
VPC + SpotWithPriceLimit 停机不收费 在保护周期内,只要资源充足就能正常启动。过了保护周期:
  • 如果您设置的价格不低于市场价格并且资源库存充足,能正常启动。
  • 如果您设置的价格低于市场价,或者资源库存不足,不能启动。
VPC + SpotAsPriceGo 停机不收费 在保护周期内,只要资源充足就能正常启动。过了保护周期:
  • 如果资源库存充足,能正常启动。
  • 如果资源库存不足,不能启动。

释放抢占式实例

过了保护周期后,我们会因为市场价格变化或资源库存调整等因素自动释放您的抢占式实例。实例创建之后,您能 主动释放抢占式实例

因为市场价格变化或资源库存调整而被动释放时,抢占式实例会进入 待回收 状态,约5分钟后实例自动释放。您可以通过 实例元数据 或者 DescribeInstances 接口返回的 OperationLocks 信息查看实例是否进入 待回收 状态。

说明
虽然通过API可以知道抢占式实例是否进入 待回收 状态,并在回收等待的时间里保存少量数据,但是我们仍然建议您将应用设计成在抢占式实例立即回收的情况下也可以正常恢复工作。您可以通过主动释放实例检测在抢占式实例立即回收的情况下应用是否正常工作。

一般,我们会从出价最低的实例开始终止抢占式实例。如果多个抢占式实例的出价相同,则随机确定实例的终止顺序。

最佳实践

在使用抢占式实例时,您需要考虑以下内容:

  • 选择一个合理的出价:您的出价应该足够高,而且要充分考虑到市场价格的波动。这样,您的抢占请求才会被接受处理,而且创建后才不会因为价格因素被释放。另外,出价还必须符合您根据自身业务评估后的预期。

  • 使用的镜像必须包含所需软件的配置,确保实例在创建完成后可以随时启动。您还能使用 实例自定义数据 在启动时运行命令。

  • 建议您使用不受抢占式实例释放影响的存储介质来保存您的重要数据。例如,您可以使用独立创建的云盘(不能设置为随实例一起释放)、OSS、RDS 等存储数据。

  • 将工作拆分为小的任务(使用网格、Hadoop或基于队列的架构)或者使用检查点,便于您经常保存计算结果。

  • 使用抢占式实例释放通知来监控抢占式实例的状态。您可以通过 实例元数据 每分钟获取一次实例的状态,阿里云ECS释放抢占式实例时,会提前5分钟更新元数据信息。

  • 测试您的应用程序,确保它能很好地处理意外释放的实例。您可以使用按量付费实例来运行该应用程序,然后自行释放这台实例,从而确认应用程序是否能处理自动释放的实例。

关于抢占式实例的更多问题,请参见 抢占式实例FAQ

关于使用API创建抢占式实例的操作,请参见 使用API管理抢占式实例