AWS 简化 Amazon EC2 Spot 实例的定价模式并降低运维复杂性

  • Steffen Opel
  • 大愚若智

2018 年 2 月 4 日

话题:AWSDevOps语言 & 开发

看新闻很累?看技术新闻更累?试试下载 InfoQ 手机客户端,每天上下班路上听新闻,有趣还有料!

Amazon Web Services (AWS)最近对 Amazon EC2 Spot 实例的申请和运维方式进行了大幅调整,此番举措将帮助用户显著降低成本。现在,用户无需指定竞价即可申请 Spot 实例,Spot 价格调整幅度更为细化,此外 Spot 实例还可停止或睡眠,稍后可恢复运行,借此进一步降低对工作负载的影响。

Amazon EC2 Spot 实例属于闲置的运算容量,相比按需实例的定价,AWS 以最高 90% 折扣的价格提供这种实例,但如果 EC2 需要重新用到这些容量,实例可能会被重新回收。此类实例非常适合用于运行可容错或可中断的工作负载,如测试开发环境、CI/CD 管道、无状态的 Web 服务、批处理作业、分析以及机器学习。

虽然 AWS 早已提出了 Spot 实例这一概念,但为了通过高弹性、高效率的方式充分利用这种低成本容量池,依然需要在工程方面通过各种措施应对突发的实例中断,并且要求用户对 Spot 实例市场的竞价策略有着深入的理解。取决于实例类型、每天的不同时段和具体地区等不同因素,此类实例的价格可能会有大幅波动(甚至可能增长至按需实例定价的十倍),因此 Spot 实例的运行会频繁中断,同时不可避免需要进行复杂的容量和成本计算。

AWS 现已转换为一种“根据供应和需求的长期趋势,更频繁调整价格”的定价模式。尤其是调整后的 Spot 实例价格将以按需实例的价格为上限,这也意味着如果不希望进一步限制实例的预算,很多用户甚至根本不需要指定竞价。这些收益也意味着 AWS 服务可以更自由地实用 Spot 实例提供运算容量,如用于AWS BatchAmazon ECSAmazon EMR

虽然此举对成本的平均降低幅度主要取决于实例类型和具体区域,但新的 Spot 定价模型已经可以大幅降低价格波动,让价格变化趋势变得更为平滑。与此同时,通过Spot Instance Advisor可以看到,大部分实例类型的中断频次都显示为“低”,Spot 实例的历史价格也清晰体现出了这些变化:

图片:Amazon EC2 Spot 定价变化:基于 eu-west-1 区域的 m4.2xlarge 实例

AWS 还通过run-instances API 提供了一种更为简单的 Spot 实例请求模型,该 API 可在容量可用时立即返回一个实例 ID,因此用户不再需要通过原本使用的request-spot-instances API 频繁地以异步 Spot 请求方式查询状态。请求 Spot 实例只需要额外增加一个参数,该参数可直接添加到现有脚本和服务中,随后即可通过 Spot 实例节约成本:

$ aws ec2 run-instances --instance-market-options '{"MarketType":"Spot"}' \
     --image-id ami-1a2b3c4d --count 1 --instance-type c3.large

此外,在被 EC2 中断后,Spot 实例不再被终止,而是可以灵活地停止睡眠,并且相同类型实例的容量可用后还可恢复继续运行。需要注意的是,这是一种服务层面上的自动优化,无法由用户手工停止并启动 Spot 实例。Jeff Barr(AWS 首席技术传道士)总结对这种全新用例进行了如下的总结:

当容量可用后,实例将启动并自动恢复运行,完全无需在应用程序配置、EBS 卷设置、数据下载、网络域加入等工作中额外花时间。

实例停止和睡眠两种状态的主要差异在于,后者可将 RAM 中的数据持久保存至 EBS 根卷,因此可以让工作负载“将更多状态数据存储在内存中”。Spot 实例的停止操作,除了具备根 EBS 卷外只有很少量其他要求。睡眠操作则要求在受支持的操作系统上安装代理程序,而截至目前仅适用于最常用的EC2 实例类型。此外 AWS 强烈建议对于睡眠实例“使用加密的 EBS 卷作为根卷”,以确保“内存(RAM)内容能够以加密的状态将数据存储在卷中”。

根据相关新闻报道,AWS 最近还提供了一个用户期待已久的功能:现在已经可以通过Amazon CloudWatch Events接收Spot 实例终止前两分钟预警通知(详见早前的报道)。用户可以根据新增的Spot 实例中断通知触发推送通知,并通过针对其他 AWS 资源变化执行应对措施的同一个事件总线和操作目标实现相关操作的自动化。

Google Cloud Platform(GCP)以及(最近更新后的)Microsoft Azure 也为适合的工作负载提供了价格更低的虚拟机,但 GCP 的抢占式虚拟机实例以及 Azure 的低优先级虚拟机在定价模型和运维限制方面均有较大差异。

在文档方面,Amazon EC2 提供了面向LinuxWindows实例的用户指南,其中包含了EC2 Spot 实例入门竞价型实例中断AWS CLI 参考以及API 参考等内容。Amazon EC2 Spot 实例定价页面列出了不同运行时间的最新价格,该价格并非源自中断实例本身,预留容量取决于基于常规用量的EBS 定价。Spot 实例的支持工作将通过Amazon EC2 论坛提供。

阅读英文原文AWS Streamlines Amazon EC2 Spot Instance Pricing Model and Operational Complexity

AWSDevOps语言 & 开发