抢占式实例开放无保护期新模式

今天来为大家介绍下抢占式实例开放的新特性, 即"无保护期模式"。主要与当前抢占式实例的区别是: 不承诺最低1小时的保护期,但最大的优势是,在释放概率无明显差异情况下,整体价格比当前1小时保护期的实例还要再低10%,举个例子:

以可用区:北京H、规格:ecs.g5.8xlarge 为例,当前按量原价是: 14.17元/时;当前1小时保护期抢占式实例价格为1折, 即1.417元/时, 而无保护期实例在该基础上再下调10%,即为1.417*0.9=1.276元/时,无保护期相比1小时保护期,节省0.141元/时。

抢占式实例开放无保护期新模式

接入步骤

前提条件

由于当前无保护期特性只在OpenAPI开放,我们默认您已经接入了过Aliyun的OpenAPI。如果之前没有对接,可以参见:SDK概述 进行SDK的接入。推荐SDK版本>=4.19.12 如下:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-ecs</artifactId>
    <version>4.19.12</version>
</dependency>

第一步:查看市场价格 DescribeSpotPriceHistory

使用OpenAPI DescribeSpotPriceHistory 来查询历史市场价格。相比原始查看抢占式实例历史价格的接口,只需多一行代码,即可查看无保护期价格:

// request.setSpotDuration(0); // 如果SDK版本>=4.19.12,可以用该方法
request.putQueryParameter("SpotDuration", 0);// 如果SDK版本<4.19.12, 可以用该方法

完整示例代码如下:

// 无保护期价格查询
request = new DescribeSpotPriceHistoryRequest();
request.setRegionId(beijingRegionId);
request.setInstanceType("ecs.g5.8xlarge");
request.setIoOptimized("optimized");
request.setZoneId("cn-beijing-h");
request.setStartTime("2020-09-22T00:00:00Z");
// request.setSpotDuration(0);  // 如果SDK版本>=4.19.12, 可以用该方法
request.putQueryParameter("SpotDuration", 0);  // 如果SDK版本<4.19.12, 可以用该方法
request.setNetworkType("vpc");
request.setAcceptFormat(FormatType.JSON);
client.getAcsResponse(request);

第二步:创建实例 RunInstances

使用OpenAPI RunInstances 来创建实例。相比创建普通的抢占式实例,无保护期实例只需多如下一行代码即可:

// request.setSpotDuration(0);  // 如果SDK版本>=4.19.12, 可以用该方法
request.putQueryParameter("SpotDuration", 0); // 如果SDK版本<4.19.12, 可以用该方法

完整示例代码如下:

RunInstancesRequest request = new RunInstancesRequest();
request.setVSwitchId(profile.get("vswId"));
request.setInstanceName(profile.get("vmName"));
request.setImageId(profile.get("imageId"));
request.setSecurityGroupId(profile.get("securityGroupId"));
request.setSystemDiskCategory(profile.get("systemDiskCategory"));
request.setSystemDiskSize(profile.get("systemDiskSize"));
request.setInstanceType(profile.get("vmType"));
request.setAcceptFormat(FormatType.JSON);
request.setInstanceChargeType("PostPaid");
request.setSpotStrategy("SpotAsPriceGo");
// request.setSpotDuration(0); // 如果SDK版本>=4.19.12, 可以用该方法
request.putQueryParameter("SpotDuration", 0);  // 如果SDK版本<4.19.12, 可以用该方法
client.getAcsResponse(request);

第三步: 查看实例保护期情况 DescribeInstances

使用OpenAPI DescribeInstances 来查看实例详情,根据返回结果里的"spotDuration==0"来判断是否为无保护期模式。

SDK版本需要>=4.19.12才能查到该"spotDuration"属性。

String regionId = hangzhouRegionId;
List<String> instanceIds = Lists.newArrayList(instanceId);
DescribeInstancesRequest request = new DescribeInstancesRequest();
request.setRegionId(regionId);
request.setInstanceIds(JSON.toJSONString(instanceIds));
request.setAcceptFormat(FormatType.JSON);
DescribeInstancesResponse response = client.getAcsResponse(request);
if(null != response.getInstances() && response.getInstances().size() > 0 ) {
Integer spotDuration = response.getInstances().get(0).getSpotDuration();
}

第四步:查看实例当前价格 DescribeSpotPriceHistory

根据 第一步:查看市场价格,获取到的价格列表,默认是按时间升序排列,取最后一个价格即为当前最新价格,也就是当前实例的计费价格。

// 无保护期价格查询
request = new DescribeSpotPriceHistoryRequest();
request.setRegionId(beijingRegionId);
request.setInstanceType("ecs.g5.8xlarge");
request.setIoOptimized("optimized");
request.setZoneId("cn-beijing-h");
request.setStartTime("2020-09-22T00:00:00Z");
// request.setSpotDuration(0);   // 如果SDK版本>=4.19.12, 可以用该方法
request.putQueryParameter("SpotDuration", 0);  // 如果SDK版本<4.19.12, 可以用该方法
request.setNetworkType("vpc");
request.setAcceptFormat(FormatType.JSON);
DescribeSpotPriceHistoryResponse response = client.getAcsResponse(request);
List<SpotPriceType> spotPrices = response.getSpotPrices();
if(spotPrices == null || spotPrices.isEmpty()) {
  return;
}
SpotPriceType spotPriceType = spotPrices.get(spotPrices.size() - 1);
Float spotPrice = spotPriceType.getSpotPrice();

Coming soon

相信通过上述步骤,各位已经可以玩转无保护期特性。如果觉得代码片段无法直接运行,比较繁琐,请看示例代码:创建与管理无保护期抢占式实例,直接可以在线运行。另外,无保护期特性也会在近期在售卖页开放,敬请期待!

常见Q&A:

Q:价格上,无保护期是否始终会比1小时保护期优惠,优惠幅度怎样?
A:我们会视需求与供给情况,适当扩大或者缩小优惠比例,当前整体保持在10%,为了保障您的利益,无保护期是会比对应的1小时保护期优惠。

Q:释放率上,无保护期是否会比有保护期的高?
A:不会。从释放概率上来说,无保护期与1小时保护期无太大差异。关于您担心的释放率情况,可以在售卖页看到我们整体的释放情况,基本都是维持在3%以下的,所以您可以安心使用。

Q,实例中断优先级上,无保护期是否会与有保护期的有所差异?
A:不会。

Q:开放了无保护期之后,以后售卖页新建的抢占式实例是否都会变成无保护期的?
A:不会。为了保障用户的体验的一致性,除非您显式指定需要创建无保护期,否则仍然跟以往保持一致,即1小时保护期。

Q:无保护期实例是否仍然保留提前5分钟的中断通知?
A:仍然保留。为了给您足够的中断处理时间,5分钟通知仍然会保留。

Q:资源量上,无保护期是否会比1小时保护期资源要少或者要多?
A:两者不会有明显差异。

Q:1小时保护期与无保护期模式支持互相切换么?
A:不支持. 即实例创建时指定的保护期信息,一旦确定,后续是不能变更的。

上一篇:详解节省计划,一文了解最云原生的成本优化方式


下一篇:阿里云居然在偷偷发福利!