阿里云代理商-阿里云服务器-阿里云数据库-重庆典名科技

阿里云服务器ECS的购买方式抢占式实例

发布时间: 2020-10-23 10:30:35文章作者: 网站编辑阅读量: 272
  阿里云服务器ECS的购买方式抢占式实例,典名科技介绍到抢占式实例是一种按需实例,相对于按量付费实例价格有一定的折扣,最终结果是在为您降低部分场景下使用ECS实例的成本。

  下面的表格是介绍关于抢占式实例的特点

特点说明
出价模式抢占式实例的市场价格会随供需变化而浮动,您需要在创建抢占式实例时指定出价模式,当指定实例规格的实时市场价格低于出价且库存充足时,就能成功创建抢占式实例。

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

保护期抢占式实例默认有1小时的保护期,支持在调用OpenAPI创建抢占式实例时设置为无保护期。
  • 如果抢占式实例有保护期,在保护期内即使市场价格浮动超过了出价,抢占式实例也不会被释放,您可以在该抢占式实例上正常运行业务。
  • 如果抢占式实例设置为无保护期,会始终比有保护期优惠,在有保护期实例价格的基础上再优惠10%左右。
仅支持在调用OpenAPI创建抢占式实例时设置保护期
回收机制超过保护期后,每5分钟检测一次实例规格的实时市场价格和库存,如果某一时刻的市场价格高于出价或实例规格库存不足,抢占式实例会被释放。
注意 实例释放后数据无法恢复,建议您提前创建快照备份数据。

您可以在售卖页查看具体实例规格的释放率,同时适用于有保护期实例和无保护期实例。释放率主要由实例规格供需关系和竞价策略决定,释放率越低表明抢占式实例被回收的可能性越小。

  举一个例子,以华北2(北京)可用区H、ecs.g5.8xlarge为例,假设:当前按量付费实例原价为14.17元/时。那么就有1小时保护期的抢占式实例价格当前折扣力度为1折,即1.417元/时。如果创建抢占式实例时设置为无保护期,则价格在1折基础上再优惠10%左右,即1.417*0.9=1.276元/时。按量付费实例原价和抢占式实例折扣力度可能变化,此处仅为示例。
阿里云服务器ECS的购买方式抢占式实例4
  抢占式实例的生命周期   假设抢占式实例有1小时的保护期,则生命周期示例如下图所示。
阿里云服务器ECS的购买方式抢占式实例3
  创建抢占式实例后,您可以随时主动释放实例,具体操作请参见释放实例。因为市场价格变化或实例规格库存不足而自动释放抢占式实例时,抢占式实例会进入待回收状态,约5分钟后再自动释放。您可以通过实例元数据或者DescribeInstances接口返回的OperationLocks信息查看实例是否进入待回收状态。
  虽然抢占式实例支持查看是否进入了待回收状态,您可以在等待回收的时间里保存少量数据。但仍然建议您优化应用设计,保证在抢占式实例被回收的情况下应用也可以正常工作。您可以尝试主动释放抢占式实例,检测在抢占式实例被回收的情况下应用工作是否正常。
  一般情况下,系统会从出价最低的抢占式实例开始释放。如果多个抢占式实例的出价相同,则随机确定实例的释放顺序。
  抢占式实例使用限制
  抢占式实例不支持转换为包年包月实例。
  抢占式实例不支持变更实例规格。
  抢占式实例配额请参见使用限制。
  抢占式实例应用场景
  抢占式实例适用于无状态的应用场景,例如可弹性伸缩的Web站点服务、图像渲染、大数据分析和大规模并行计算等。应用程序的分布度、可扩展性和容错能力越高,越适合使用抢占式实例节省成本和提升吞吐量。
  您可以在抢占式实例上部署以下业务:实时分析业务、大数据业务、地理空间勘测分析业务、图像和媒体编码业务、科学计算业务、可弹性伸缩的业务站点、网络爬虫业务、测试业务
  有状态应用不宜使用抢占式实例,例如数据库。因为竞价失败等原因导致抢占式实例被释放时,应用状态难以保存。
  抢占式实例价格和计费
  价格
  抢占式实例的价格是指实例规格(包括vCPU和内存)的价格,不包括系统盘、数据盘、网络带宽等资源的价格。
  系统盘、数据盘的计费遵循按量付费规则,详细信息请参见按量付费。
  网络带宽的计费遵循按量付费实例的带宽计费规则,详细信息请参见公网带宽计费。
  市场价格
  抢占式实例的市场价格会随市场对某一种实例规格的供需变化而浮动。创建抢占式实例时,如果指定实例规格的实时市场价格低于出价且库存充足,就能成功创建抢占式实例。
  如果抢占式实例有保护期,在保护期内实例规格会按成交时的市场价格计费,超过保护期后按照实时的市场价格计费。
  您可以充分利用抢占式实例的价格浮动特性,在适当的时间购买抢占式实例,降低计算成本,并在整体成本下降的前提下,提升业务在该时间周期内的吞吐量。
  抢占式实例计费方式
  抢占式实例按秒计费。成功创建实例时的市场价格为小时价,将小时价除以3600即可得到每秒的价格。
  从成功创建到释放抢占式实例的费用精确到小数点后两位。累计费用不足0.01元的部分不收取。
  抢占式实例计费时长
  抢占式实例按实际使用时长计费。实际使用时长是指从成功创建到释放抢占式实例的时长,抢占式实例释放后才停止计费。如果您只是在ECS管理控制台上或者调用StopInstance接口停止实例,实例会继续计费。如果您暂时不需要使用抢占式实例,建议创建快照备份数据和环境,然后释放实例,在需要使用抢占式实例时再重新购买。
  抢占式实例常见问题
  1、抢占式实例的价格折扣包括了哪些资源?
  仅实例规格的价格有折扣。云盘、网络带宽等其他资源的价格没有折扣,与按量付费实例的价格保持一致。
  2、抢占式实例被释放时会有通知吗?
  有通知。因市场价格变化或供需调整需要释放抢占式实例时,实例会先进入待回收状态,约5分钟后再自动释放。
  3、抢占式实例支持变更实例规格吗?
  不支持。
  4、价格上,无保护期抢占式实例与有保护期抢占式实例,哪一类更优惠?
  为了保障您的利益,无保护期会始终比有保护期优惠,在有保护期价格的基础上再优惠10%左右。
  5、支持切换有保护期和无保护期吗?
  不支持。抢占式实例默认有1小时的保护期,您只能在使用OpenAPI创建抢占式实例时设置保护期,创建完成后不能切换保护期设置。
  6、释放率上,无保护期抢占式实例是否比有保护期抢占式实例的高?
  您可以在售卖页查看具体实例规格的释放率,同时适用于有保护期实例和无保护期实例。释放率主要由实例规格供需关系和竞价策略决定。
阿里云服务器ECS的购买方式抢占式实例1
  如何在ECS控制台上创建抢占式实例?
  抢占式实例背景

  在使用抢占式实例时,您需要考虑以下内容:
  选择合理的出价:出价要充分考虑到市场价格的波动,合理的出价可以提升抢占式实例创建成功的概率,而且创建后才不容易因为价格因素被释放。另外,出价还必须符合您根据自身业务评估后的预期。
  说明 如果您暂时不能决定出价,建议使用自动出价,即接受实时的市场价格作为实例规格的计费价格 。
  使用的镜像必须包含所需软件的配置,确保实例在创建完成后可以随时启动。您还能使用实例自定义数据在启动时运行命令。详情请参见生成实例自定义数据。
  建议您使用不受抢占式实例释放影响的存储介质来保存您的重要数据。例如,您可以使用独立创建的云盘(不能设置为随实例一起释放)、OSS、RDS等存储数据。
  将工作拆分为小的任务(使用网格、Hadoop或基于队列的架构)或者使用检查点,便于您经常保存计算结果。
  使用抢占式实例释放通知来监控抢占式实例的状态。您可以通过实例元数据每分钟获取一次实例的状态,阿里云ECS释放抢占式实例时,会提前5分钟更新元数据信息。详情请参见实例元数据概述。
  测试您的应用程序,确保它能很好地处理意外释放的实例。您可以使用按量付费实例来运行该应用程序,然后自行释放这台实例,从而确认应用程序是否能处理自动释放的实例。
  您可以通过阿里云CLI、OpenAPI Explorer和阿里云SDK等开发者工具调用RunInstances创建抢占式实例。
  说明 如果需要跟随当前市场实际价格,将SpotStrategy参数设为SpotAsPriceGo。如果需要设置能接受的最高价,将 SpotStrategy参数设为SpotWithPriceLimit。
  主要介绍抢占式实例相关的配置,更多实例配置说明请参见使用向导创建实例。
  抢占式实例操作步骤
  登录ECS管理控制台。
  在左侧导航栏,单击实例与镜像 > 实例。
  在实例列表页面,单击创建实例。
  选择付费模式为抢占式实例。
  在设置单台实例规格上限价输入框,设置价格。
  当您的出价高于当前市场成交价,而且库存充足时,您就能按照市场成交价创建实例。抢占式实例支持一次性竞价请求,包括以下2种出价模式:
  使用自动出价:选择跟随当前市场价格的模式,即表示始终接受实时的市场价格作为实例规格的计费价格 。
  设定您的最高价:您必须为指定的实例规格设置一个价格上限,即您愿意为这个实例规格支付的最高价格 。
  ?您能看到一个价格区间,最高价格与同规格按量付费实例相同。您可以结合自身业务,同时考虑可能的价格波动,在价格区间内设置一个合理的价格。如果您的出价充分考虑了可能的价格波动,可以较长时间持有抢占式实例,否则在超过保护期后实例随时可能被释放。
  选择或者输入您要购买的台数。配置其余参数。确认订单信息后,单击创建实例。
  抢占式实例执行结果
  抢占式实例创建成功后,您可以在实例列表中查看该实例信息。抢占式实例会被标记为按量-抢占式实例。进入实例详情页后,在付费信息部分可查看创建实例时设置的出价策略。
  如何查看抢占式实例的账单?
  抢占式实例的账单背景:
与按量付费实例的收费金额不同,抢占式实例的收费金额是实际成交价格。
  抢占式实例账单的操作步骤
  登录ECS管理控制台。
  单击费用 > 用户中心。
  单击全部菜单项 > 费用账单 > 费用账单。
  单击账单明细。
  输入实例名称或实例ID,然后单击搜索。
  您可以切换统计项和统计周期,从不同维度查看抢占式实例的账单。
阿里云服务器ECS的购买方式抢占式实例
  如何查询抢占式实例中断事件?
  本文介绍如何查询抢占式实例中断事件,您可以针对实例回收状态自动化处理实例的退出逻辑。抢占式实例可能会因为价格因素或者市场供需变化而被强制回收,此时会触发抢占式实例的中断。回收前,抢占式实例会进入锁定状态,提示实例将会被自动回收。

通过云监控SDK查询抢占式实例中断事件

以云监控Java SDK为例,介绍如何查询抢占式实例中断事件。

  1. 接入云监控SDK,具体操作请参见Java SDK使用手册
  2. 通过SDK查询系统事件。
    import com.aliyuncs.DefaultAcsClient;
    import com.aliyuncs.IAcsClient;
    import com.aliyuncs.exceptions.ClientException;
    import com.aliyuncs.exceptions.ServerException;
    import com.aliyuncs.profile.DefaultProfile;
    import com.google.gson.Gson;
    import java.util.*;
    import com.aliyuncs.cms.model.v20190101.*;
    
    public class DescribeSystemEventAttribute {
        public static void main(String[] args) {
    
            DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
            IAcsClient client = new DefaultAcsClient(profile);
    
            DescribeSystemEventAttributeRequest request = new DescribeSystemEventAttributeRequest();
            request.setRegionId("cn-hangzhou");
            request.setProduct("ECS");
            request.setEventType("StatusNotification");
            request.setName("Instance:PreemptibleInstanceInterruption");
            try {
                DescribeSystemEventAttributeResponse response = client.getAcsResponse(request);
                System.out.println(new Gson().toJson(response));
            } catch (ServerException e) {
                e.printStackTrace();
            } catch (ClientException e) {
                System.out.println("ErrCode:" + e.getErrCode());
                System.out.println("ErrMsg:" + e.getErrMsg());
                System.out.println("RequestId:" + e.getRequestId());
            }
        }
    }
  3. 根据返回结果判断抢占式实例中断事件。

    事件通知的JSON格式如下所示。

    {
      "ver": "1.0",
      "id": "2256A988-0B26-4E2B-820A-8A********E5",
      "product": "ECS",
      "resourceId": "acs:ecs:cn-hangzhou:169070********30:instance/i-bp1ecr********5go2go",
      "level": "INFO",
      "name": "Instance:PreemptibleInstanceInterruption",
      "userId": "169070********30",
      "eventTime": "20190409T121826.922+0800",
      "regionId": "cn-hangzhou",
      "content": {
        "instanceId": "i-bp1ecr********5go2go",  
        "action": "delete"                       
      }
    }
    content字段解释如下表所示。
    字段说明示例值
    instanceId抢占式实例ID。i-bp1ecr********5go2go
    action抢占式实例的操作事件。取值delete表示抢占式实例中断,将被强制回收。delete

通过实例元数据获取查询抢占式实例中断事件

  1. 远程连接ECS实例。连接方式请参见连接方式概述
  2. 执行以下命令查询实例元数据。
    curl 'http://100.100.100.200/latest/meta-data/instance/spot/termination-time'
    • 如果返回为空,说明实例可持续使用。
    • 如果返回类似2015-01-05T18:02:00Z格式的信息(UTC时间),说明实例将于这个时间回收。

通过API查询抢占式实例中断事件

使用DescribeInstances,根据返回的OperationLocks判断实例是否进入待回收状态。

代码示例(DescribeInstancesSample.java)如下所示。
public class DescribeInstancesSample {
  public static void main(String[] args) throws InterruptedException {
      OpenApiCaller caller = new OpenApiCaller();
      JSONArray allInstances = new JSONArray();
      allInstances.addAll(Arrays.asList("i-bp18hgfai8ekoqwo0***", "i-bp1ecbyds24ij63w1***"));
      while (!allInstances.isEmpty()) {
          DescribeInstancesRequest request = new DescribeInstancesRequest();
          request.setRegionId("cn-hangzhou");
          request.setInstanceIds(allInstances.toJSONString());//指定实例ID,效率最高
          DescribeInstancesResponse response = caller.doAction(request);
          List instanceList = response.getInstances();
          if (instanceList != null && !instanceList.isEmpty()) {
              for (DescribeInstancesResponse.Instance instance : instanceList) {
                  System.out.println("result:instance:" + instance.getInstanceId() + ",az:" + instance.getZoneId());
                  if (instance.getOperationLocks() != null) {
                      for (DescribeInstancesResponse.Instance.LockReason lockReason : instance.getOperationLocks()) {
                          System.out.println("instance:" + instance.getInstanceId() + "-->lockReason:" + lockReason.getLockReason() + ",vmStatus:" + instance.getStatus());
                          if ("Recycling".equals(lockReason.getLockReason())) {
                              //do your action
                              System.out.println("spot instance will be recycled immediately, instance id:" + instance.getInstanceId());
                              allInstances.remove(instance.getInstanceId());
                          }
                      }
                  }
              }
              System.out.print("try describeInstances again later ...");
              Thread.sleep(2 * 60 * 1000);
          } else {
              break;
          }
      }
  }
}
触发回收时输出结果如下:
instance:i-bp1ecbyds24ij63w****-->lockReason:Recycling,vmStatus:Stopped
spot instance will be recycled immediately, instance id:i-bp1ecbyds24ij63w****

  如何停止抢占式实例?典名科技为您介绍不同情况下停止后再启动的效果。
  如何停止抢占式实例操作步骤
  1、登录ECS管理控制台。
  2、在左侧导航栏,单击实例与镜像 > 实例。
  3、在实例列表页面中,在待停止抢占式实例的操作列下,选择更多 > 实例状态 > 停止。
  4、在停止实例对话框中,单击确定。
  仅VPC类型的抢占式实例支持按量付费实例停机不收费功能,详情请参见按量付费实例停机不收费。根据抢占式实例的网络类型和出价模式不同,实例停止后再启动会有不同的表现,如下表所示。
网络类型出价模式停止模式停止后再启动效果
经典网络SpotWithPriceLimit保留并收费在保护周期内能正常启动。过了保护周期:
  • 如果您设置的价格不低于市场价格并且资源库存充足,能正常启动。
  • 如果您设置的价格低于市场价,或者资源库存不足,不能启动。
SpotAsPriceGo保留并收费在保护周期内能正常启动。过了保护周期:
  • 如果资源库存充足,能正常启动。
  • 如果资源库存不足,不能启动。
VPCSpotWithPriceLimit保留并收费在保护周期内能正常启动。过了保护周期:
  • 如果您设置的价格不低于市场价格并且资源库存充足,能正常启动。
  • 如果您设置的价格低于市场价,或者资源库存不足,不能启动。
停机不收费在保护周期内,只要资源充足就能正常启动。过了保护周期:
  • 如果您设置的价格不低于市场价格并且资源库存充足,能正常启动。
  • 如果您设置的价格低于市场价,或者资源库存不足,不能启动。
SpotAsPriceGo保留并收费在保护周期内能正常启动。过了保护周期:
  • 如果资源库存充足,能正常启动。
  • 如果资源库存不足,不能启动。
停机不收费在保护周期内,只要资源充足就能正常启动。过了保护周期:
  • 如果资源库存充足,能正常启动。
  • 如果资源库存不足,不能启动。

联系客服免费领取更多阿里云产品新购、续费升级折扣,叠加官网活动折上折更优惠