抢占式实例存在多种出价模式,您可以根据实际情况进行选择。本文将对抢占式实例不同出价模式进行对比分析,并提供出价模式最佳实践。

背景信息

抢占式实例是一种按需实例,相对于按量付费实例价格有一定的折扣,旨在为您降低部分场景下使用ECS实例的成本。抢占式实例自身支持以下出价模式:
  • 设定您的最高价(SpotWithPriceLimit)
  • 使用自动出价(SpotAsPriceGo)

本教程还提供了使用自动出价(SpotAsPriceGo)结合运维编排服务OOS的ACS-ECS-AlarmWhenDiscountAndPriceExceedsThresholdInMultiZoneAndInstanceType公共模板的组合方案,为您提供成本保障的同时,降低抢占式实例的中断概率。

出价模式对比

  • 模式一:设定您的最高价(SpotWithPriceLimit)

    该模式下需要您设置一个价格上限,即您愿意为这个实例规格支付的最高价格。如果实例规格在价格波动时超出您设置的价格上限,则对应的ECS实例将会触发中断事件。

    对该模式的分析如下:
    • 优点:严格控制成本,能够保证实例规格的费用不会超出既定的成本。
    • 缺点:如果资源价格波动剧烈,则会提升触发实例中断事件的概率,降低实例的稳定性。
    • 适用场景:业务对ECS实例的预算以及价格要求极其严格,完全不允许超出预算。
  • 模式二:使用自动出价(SpotAsPriceGo)

    该模式为跟随当前市场价格的模式,即表示您始终接受实时的市场价格作为实例规格的计费价格。

    对该模式的分析如下:
    • 优点:即使资源价格波动剧烈,也仍能保证实例不会被中断,降低了实例中断的概率,增加了实例的稳定性。
    • 缺点:较难控制成本,当资源价格上升时也无法感知到该信息,可能导致成本超支。
    • 适用场景:业务成本要求不严格,要求在提升实例稳定性的同时,尽可能的节省成本。
  • 模式三:使用自动出价(SpotAsPriceGo)结合运维编排OOS

    抢占式实例的使用自动出价(SpotAsPriceGo)模式无法直接感知到资源价格的上升,当结合运维编排OOS的ACS-ECS-AlarmWhenDiscountAndPriceExceedsThresholdInMultiZoneAndInstanceType公共模板后,OOS可以根据您自行设置的资源价格阈值,在抢占式实例价格超过阈值时向您推送通知,以提示您进行资源管理。

    对该模式的分析如下:
    • 优点:同时具备了资源稳定性以及资源价格上升的感知能力。
    • 缺点:需要接入运维编排OOS,存在一定的接入成本。
    • 适用场景:业务要求在提升实例稳定性的同时,具备感知成本增加的能力。
三种模式的比较如下表所示:
模式 实例被中断概率 实例稳定性 成本优化程度 成本可控性
设定您的最高价(SpotWithPriceLimit)
使用自动出价(SpotAsPriceGo) 较高 较低
使用自动出价(SpotAsPriceGo)结合运维编排OOS 较高

出价模式最佳实践

抢占式实例自身直接支持以下两种模式,您可以根据业务实际需求选择:
  • 如果您需要严格控制预算,实例的稳定性要求不严格。可以选择设定您的最高价(SpotWithPriceLimit)的出价模式。
  • 如果您对实例稳定性有较高要求,成本要求不严格。可以选择使用自动出价(SpotAsPriceGo)的出价模式。

如果您希望保障实例稳定性的同时,兼顾业务成本。可以参考以下操作步骤,使用SpotAsPriceGo+OOS的组合模式,即通过使用自动出价(SpotAsPriceGo)的出价模式提升实例的稳定性;通过运维编排OOS的ACS-ECS-AlarmWhenDiscountAndPriceExceedsThresholdInMultiZoneAndInstanceType公共模板监控抢占式实例的价格,当价格超过设置的阈值时,系统会向您发送提示消息。

  1. 准备工作。
    1. 可选:创建出价模式为使用自动出价(SpotAsPriceGo)的抢占式实例。
      具体操作,请参见创建抢占式实例。如果您已经创建了抢占式实例,请跳过本步骤。
    2. 查看抢占式实例的信息。
      具体操作,请参见查看实例信息。本教程中创建了两台抢占式实例,信息如下表所示,后续步骤将会基于实例的信息设置价格监控的运维脚本。
      实例名称 地域和可用区 实例规格
      抢占式实例1 华东1(杭州)可用区I ecs.c5.xlarge
      抢占式实例2 华东1(杭州)可用区K ecs.r6.xlarge
    3. 基于RAM访问控制创建OOS所需的OOSServiceRole角色。
      具体操作,请参见为OOS服务设置RAM权限。您需要注意,在选择权限时仅授予AliyunECSReadOnlyAccess权限即可。选择权限
    4. 接入钉钉自定义机器人。
      您需要注意在接入机器人时,安全设置选择自定义关键词,并设置监控关键词。后续步骤中,OOS将通过钉钉自定义机器人的Webhook地址发送消息。
  2. 登录运维编排管理控制台
  3. 在左侧导航栏,单击定时运维
  4. 定时运维页面,单击创建
  5. 创建定时运维页面,完成以下配置,然后单击立即执行
    配置项 说明
    定时设置 选择周期性重复执行,然后进行以下配置:
    • 重复频率:保持默认配置,即1小时执行一次。
      说明 抢占式实例短时间内价格变化不频繁,建议您以1小时为周期进行价格监控即可。
    • 重复频率的时区:根据您所在的地区时区自行设置。本教程中保持默认配置。
    • 规则结束时间:根据您实际的业务需求自行设置。本教程中保持默认配置。
    选择模板 通过搜索框搜索并选中ACS-ECS-AlarmWhenDiscountAndPriceExceedsThresholdInMultiZoneAndInstanceType公共模板。
    设置参数 本步骤的参数设置需要参照已获取的抢占式实例信息进行设置。参数说明如下:
    • region:华东1(杭州)。
    • zoneId:cn-hangzhou-i、cn-hangzhou-k。
    • instanceType:ecs.c5.xlarge、ecs.r6.xlarge。
    • taskType:您可以根据自身需求选择监控类型。具体说明如下:
      • Discount:基于实时折扣的监控。例如,某实例规格对应的按量付费价格为0.400,抢占式实例价格为0.080,则抢占式实例的折扣为2折。如果您期望抢占式实例在折扣大于2.5折时收到消息通知,则可以设置Discount,并设置threshold参数(阈值)为25(25表示2.5折)。
      • Price:基于实时价格的监控。例如,某实例规格对应的按量付费价格为0.400,抢占式实例价格为0.080。如果您期望抢占式实例价格大于0.090时收到消息通知,则可以设置Price,并设置threshold参数(阈值)为0.090。
    • threshold:设置阈值。需要结合taskType使用。
    • webhook:设置钉钉自定义机器人的Webhook地址。
    • rateControl:保持默认配置。
    • 执行使用到的权限的来源:选择已创建的OOSServiceRole角色。
    高级选项 保持默认配置。您可以根据实际情况自行配置。
    执行定时任务后,您可以在定时运维页面查看定时任务执行的状态。定时运维信息
  6. 等待定时任务执行或者测试定时任务。
    • 成功执行定时任务后,系统会实时监控抢占式实例的出价情况,如果超过您设置的阈值,则会通过钉钉自定义机器人发送提示消息。
    • 实际场景下,抢占式实例价格波动不频繁,不易验证定时任务的触发结果。您可以新建一个定时任务,并将阈值设置为必定触发的值。例如,抢占式实例每小时价格平均为0.080,阈值可以设置为0.040。因为抢占式实例价格始终高于阈值,所以后续定时任务执行时必定会触发报警并通过钉钉自定义机器人发送提示消息。