AutoMQ 云上十倍成本节约的奥秘: SPOT 实例

本文涉及的产品
函数计算FC,每月15万CU 3个月
简介: AutoMQ Kafka 优化设计,充分利用云基础设施,尤其是成本低廉的Spot实例,实现公有云成本节约。尽管Spot实例的不确定性可能导致服务中断,AutoMQ通过Broker无状态化、快速弹性扩展和Serverless支持,以及应对Spot实例回收的优雅停机和容灾机制,确保了可靠的Kafka服务。混合使用按需实例以保证关键服务稳定,同时在面临Spot实例库存不足时,具备回退到按需实例的能力。AutoMQ Kafka通过创新技术在稳定性与成本之间找到了平衡,为用户提供灵活且经济高效的解决方案。

近年来,无论是海外还是国内,虽然受疫情影响,公有云的市场规模增速有所放缓,但是云的市场总规模仍然是持续增长的。公有云作为一个各个国家重点布局的战略方向和其本身万亿级市场的定位[1],我们学习用好云是非常有必要的。
AutoMQ Kafka 充分认识到“云优先”的重要性,围绕公有云具备规模化效益和技术红利的云基础设施重新设计了 Kafka。在保证 100% 兼容 Apache Kafka 的基础上带来了极致的云成本优势和弹性能力,云上综合有 10 倍以上的成本节约[2]。今天就和大家分享下 AutoMQ Kafka 云上成本节约的利器之一,Spot 实例。

01

Spot 实例应用的挑战

Spot 实例本质上是一种实例购买类型。Spot 实例是云计算实例规模化成本红利的产物,通过机器的分时复用来提升利用率,从而推出更加廉价的实例购买类型。这本身也是云厂商相比私有 IDC 自建机房固定资源预留带来的规模化优势。Spot实例本身的硬件能力和正价的按需实例别无二致,但是其价格可以低至按需实例的价格的1折。用好Spot实例将使得软件系统在云上获得极大的成本节约。
使用Spot实例本质就是薅云厂商的羊毛。Spot实例诱人的价格令人心动,但是其存在的一个最大的问题就是——不确定性。云厂商不会对Spot实例的可用性提供SLA,根据云厂商的规则,在必要的时候云厂商会直接发起Spot实例的回收流程,终止Spot实例。对于AutoMQ来说,如何以一种确定性的方式来使用Spot实例,为用户提供有SLA、可靠的Kafka服务,是我们面临的主要挑战。AutoMQ Kafka 通过大量应用 Spot 实例来降低总体计算成本[3]。在经过诸多实践后,我们得出一些在 Spot 实例上提供可靠 Kafka 服务的方法。

02

在不可靠的 Spot 实例上提供可靠的服务

Broker 无状态化由于 Spot 本身随时会中断的特性, 云厂商的 Spot 实例最佳实践基本[4]都会强调 Spot 实例适用于无状态的应用。因此一个软件系统“无状态”完成得越彻底, 则 Spot 实例则会被利用得更彻底。
有状态引用最大的问题在于其状态数据的迁移、恢复。以 Apache Kafka 为例,即使在 3.6.0 版本以后支持了分级存储(非 GA)的特性[5],其 broker 仍然是有状态的设计,对于每个 broker 上的分区数据要求最后一个 logsegment 必须在一级存储上。当这个 logsegment 非常大时,占用的一级存储空间将会非常大,当其关联的 broker 下线时,这些状态数据迁移是非常耗时的。如果不采用分级存储,这种迁移花费数小时甚至数天[6]都是很常见的。
AutoMQ Kafka 虽然在架构上除了依赖对象存储以外还依赖 EBS 块存储,但是其本质上是采用了一个无状态的架构,一级存储是松耦合的,充当一个缓冲区的角色。下图可以揭示 Apache Kafka 的多级存储和 AutoMQ 存储架构的区别。AutoMQ Kafka 使用的 EBS 写入缓冲区默认值为固定的 3GB,在扩缩容场景可以完成秒级甚至毫秒级下线(取决于具体采用的机型)。

大量应用 Spot 实例,会存在集群中计算实例的频繁上下线,如果采用 Apache Kafka,不仅需要人为介入处理 Spot 实例的替换,同时这种频繁的上下线、分区数据移动将会造成系统明显抖动,对数据的生产、消费产明显的影响。而 AutoMQ Kafka 由于其无状态的设计,很好的规避了这种问题,即使使用大量的 Spot 实例,也可以将这种实例替换带来的系统抖动降低到最小,以业务无感的方式完成 Spot 实例的替换。
极速的弹性与 Serverless
AutoMQ Kafka 是天然支持 serverless 的。系统本身的弹性速度和质量决定过了其所能提供的 Serverless 服务质量。Spot 实例的大量应用,由于不可预期的回收行为,会导致整个系统使用的计算实例经常性地被置换。在这个过程中,AutoMQ Kafka 所在计算实例接受实例终止信号到新的 Spot 实例被替换后启动 AutoMQ Kafka 并且重新接受流量整个冷启动过程的耗时长短决定着 AutoMQ Kafka 弹性的效率。
以 Apache Kafka 为例,如果使用 Spot 实例并且产生了实例的置换,其整个冷启动的过程如下。从图上我们可以非常清晰的看到,当数据规模较大时(TB 级)或者存在分区热点时,Apache Kafka 整个冷启动时间中执行手动完成分区迁移、数据拷贝、流量重新均衡的过程耗时十分长,可达小时甚至是天级别[6],而采用 AutoMQ Kafka 由于其采用可靠性和可用性分离的设计,单副本即高可靠,整个分区移动过程无任何数据拷贝[7]。下图可以清晰看到,如果采用 Apche Kafka 在数据规模较大的场景下是完全没法应用 Spot 实例并且提供 serverless 能力的,因为在冷启动的整个时间轴上,Apache Kafka 在分区移动和流量重平衡两个过程的耗时占据着总耗时绝对的比重。不将这两块耗时降低到与其他冷启动阶段相同数量级下,spot 实例的应用和 serverless 也无从谈起。

与之相反的是,AutoMQ Kafka 凭借其秒级分区迁移[9]和持续流量重平衡[8]等杀手锏特性,不仅将高危的、重运维的分区移动和重平衡的耗时降低到秒级,同时整个过程还是自动化的,相比 Apache Kafka 而言,有了跨时代的进步。当软件系统本身有较短的冷启动时间以后,围绕冷启动的其他阶段进行优化才有意义。在 AutoMQ 内核不再成为冷启动瓶颈的情况下,AutoMQ 也将不断探索利用容器技术、GraalVM AOT 编译等手段提升整个端到端冷启动的效率,给大家带来更快、更好的弹性能力。

充分利用云 Spot 实例的终止信号Spot 实例回收的一般流程遵循如下流程,先发送终止信号,然后等待若干秒后再强制终止机器。不同云厂商的 Spot 实例的终止流程基本是如下流程的变种,核心路径基本相同。AutoMQ Kafka 的架构上使用了一块非常小(默认 3GB)的云盘 SSD (AWS 上即 EBS,下文皆以 EBS 表示云盘 SSD)来充当缓冲区的角色,以保证 AutoMQ Kafka 追尾读的低延迟。得益于 AutoMQ Kafka 无状态的 Broker 设计,EBS 上只会残留约几百 MB 左右的少量缓存数据,只要保证 Spot 实例在接收到终止信号的等待期间将这部分数据刷到对象存储上,即可完成优雅停机。
AutoMQ 充分利用了这个实例终止信号,通过感知这个实例终止信号,然后在实例接收到终止信号的这段等待时间内提前执行刷出 EBS 缓存数据的操作来完成优雅停机。不同云厂商开放给用户去感知这个终止信号的方式会有差异,但是基本都会预留至少 10 秒以上的等待时间来让应用执行优雅下线,而这预留的时间对于 AutoMQ 来说是完全足够的。

Spot 实例友好的容灾机制前面小节提到了 AutoMQ Kafka 利用 Spot 实例终止信号后的一小段等待时间来完成优雅停机,这时候一定会有聪明的小伙伴提出质疑:我们应该考虑面向失败的设计,最坏情况下例如网络异常、系统负载异常卡顿导致 AutoMQ 来不及将数据在终止信号后的这段等待时间及时刷出怎么办呢?其实,这种情况 AutoMQ 也已经考虑到了,因此专门设计了 Spot 实例友好的容灾机制[10]。
下图是整个容灾机制的简单示意图,总体上概括起来就是:

  1. AutoMQ 通过探测及时发现由于 Spot 实例回收而遗留的游离数据卷,通过云盘管理的 API 将其挂载到一台合适的新的计算实例上

  2. 将游离数据卷残留的少量数据刷出到对象存储

  3. 删除已经为空的数据卷

通过这种容灾机制,即使在最坏情况下,AutoMQ Kafka 仍然可以完成自动化的容灾,整个过程业务无感。

按需实例与 Spot 实例混部AutoMQ Kafka 虽然大量应用了 Spot 实例来降低成本,但是仍然在两个纬度上保留了少量按需实例的使用,从而确保 AutoMQ 可以给用户提供可靠的 Kafka 服务。
KRaft 节点使用 on-demand 实例:

AutoMQ 的核心能力依赖的重要元数据依靠 KRaft,为了保证元数据的可靠性,参与 Raft 选举和保障元数据一致性的节点仍然使用的是 on-demand 实例,确保他们保持稳定。
Broker 集群支持 on-demand 和 Spot 实例混布:
以 AWS Spot 实例的实际使用情况来看,一个 30 台机器的 AutoMQ Kafka 集群,一天内会有若干次实例置换,这种零碎时刻的实例置换,在 AutoMQ 这种无状态和极致弹性的设计下对业务基本是无感的。Spot 实例的置换仅仅会导致部分分区数据的读写有秒级的 RT 抖动,这可以满足绝大部分 Kafka 的应用场景。即使如此,AutoMQ 也充分考虑到一部分对成本不敏感,但是对 RT 抖动要求非常苛刻的用户的诉求,允许用户调节 Broker 集群中 on-demand 实例的比例,权衡成本与延迟抖动频率。

回退按需实例Spot 实例除了存在会中断的问题,还存在容易库存不足的问题。对于云厂商而言,按需实例是有 SLA 的并且要最高优先级保障库存余量充足。如果一个地域某个可用区下的计算实例库存不足,则会优先用于满足按需实例的供给。在这种规则下,一些冷门地域或者可用区的 Spot 实例库存容量容易产生不足,当需要发生实例替换时,会存在无法购买到竞价实例的情况。

AutoMQ Kafka 为了应对可能出现的 Spot 实例库存不足的情况,提供了回退按需实例(后文简称该特性为 fallback)的能力。Fallback 本质就是探测并识别 Spot 实例库存不足的情况,然后在这种情况下重新购买按需实例来补充容量。并且 fallback 支持当 Spot 实例可以重新购买时,自动将集群中的按需实例重新替换成按需实例。该功能的总体实现主要是利用了弹性伸缩组本身容量管理的特性来达到的,因篇幅原因,后续会专门出一篇文章来介绍 fallback 能力的实现。

03

稳定性与成本之间的权衡

Spot 实例本身不可预期的中断、库存问题使得很多系统设计与开发者对其应用望而却步,持有过度的偏见。其实这种疑虑本质上源于不了解。正如世间没有绝对的安全一样,也不存在绝对的稳定性。稳定性的定义因应用场景而异,因为不同场景对于“稳定”的标准各不相同。在软件系统设计中,关键在于做出恰当的权衡。
以 AutoMQ 提供的 Kafka 为例,如果你可以容忍因 Spot 实例替换带来的某些时刻部分分区上秒级的 RT 抖动,那么你可以放心的使用较大比例的 Spot 实例从而获取巨大的成本节约;但是如果你是一个对 RT 抖动极度敏感的用户,那你也仍然可以全部采用按需实例,仅仅享受 AutoMQ 带来的极致弹性能力。简单而言,适合自己的才是最好的,也欢迎大家真正来体验 AutoMQ ,看看我们到底几斤几两。AutoMQ Kafka 核心代码均已在 GitHub 开源,欢迎来社区一起交流。

目录
相关文章
|
2月前
|
弹性计算 编解码 大数据
小鹏汽车核心业务迁移至阿里云倚天实例,节省20%算力成本
9月20日,在2024云栖大会上,小鹏汽车宣布车联网、官网、商城、大数据等核心业务已迁移至阿里云倚天实例,节省了超过20%的算力成本。
121 14
|
3月前
|
存储 运维 Serverless
Serverless 支撑赛事转播问题之利用函数计算实现图片处理的实时性和成本节约如何解决
Serverless 支撑赛事转播问题之利用函数计算实现图片处理的实时性和成本节约如何解决
|
6月前
|
安全 Serverless API
Serverless架构在图像处理中展现出高成本效益,按需付费降低费用,动态调整资源避免浪费
【5月更文挑战第16天】Serverless架构在图像处理中展现出高成本效益,按需付费降低费用,动态调整资源避免浪费。其出色的并发处理能力和自动扩展确保高并发场景的顺利执行。简化开发流程,让开发者专注业务逻辑,同时提供丰富API和集成服务。安全方面,Serverless通过云服务商管理基础架构和多种安全机制保障任务安全。因此,Serverless是处理高并发、动态需求的理想选择,尤其适合图像处理领域。随着技术发展,其应用前景广阔。
69 4
|
6月前
|
弹性计算 NoSQL 关系型数据库
还得是阿里云,在2024如此艰难的一年,百款产品直降,技术更优,规模更大,节省更多
还得是阿里云,在2024如此艰难的一年,百款产品直降,技术更优,规模更大,节省更多
|
6月前
|
Kubernetes Serverless 开发者
阿里云 SAE 2.0 正式商用,极简易用、百毫秒弹性效率,降本 40%
本文主要介绍阿里云 Serverless 应用引擎如何帮助企业跨越技术鸿沟,从传统应用架构无感升级到 Serverless 架构,以更高效、更经济的方式进行转型,快速进入云原生快车道,让 2 人的研发团队享受 2000 人技术团队的红利。
|
6月前
|
弹性计算 Kubernetes 测试技术
一文掌握弹性与成本的完美平衡 选择正确上云“姿势”,正确实例选型,平滑应对流量高峰
2023云栖大会,阿里云弹性计算弹性计算产品专家王曦、阿里云弹性计算高级技术专家王渊平、阿里云弹性计算高级技术专家田政雄3位嘉宾出席分享,云上付费方式、各规格实例比较应用、ECS如何保障客户满足流量峰值弹性需求等话题。
|
Serverless 云计算
带你读《浅谈阿里云通用产品线Serverless的小小演化史》二、成本之下的成本---按量付费(1)
带你读《浅谈阿里云通用产品线Serverless的小小演化史》二、成本之下的成本---按量付费(1)
862 0
带你读《浅谈阿里云通用产品线Serverless的小小演化史》二、成本之下的成本---按量付费(1)
|
Serverless
带你读《浅谈阿里云通用产品线Serverless的小小演化史》二、成本之下的成本---按量付费(2)
带你读《浅谈阿里云通用产品线Serverless的小小演化史》二、成本之下的成本---按量付费(2)
549 0
|
存储 弹性计算 运维
CPU 利用率从 10% 提升至 60%:中型企业云原生成本优化实战指南
在互联网早期迅速发展时,相关领域企业更多注重于扩展业务,为了迅速占领市场,往往会投入较高的成本。然而,随着互联网人口红利逐渐消退,以及近几年的疫情影响,越来越多企业开始重视成本管理,从“粗放式经营”转变为“精细化运营”模式,成本优化成为企业重点关注事项。
611 0
CPU 利用率从 10% 提升至 60%:中型企业云原生成本优化实战指南
|
Cloud Native 前端开发 Serverless
《2023云原生实战案例集》——04 互联网——Wolai 使用函数计算相比传统架构节省了一半以上的费用和人力
《2023云原生实战案例集》——04 互联网——Wolai 使用函数计算相比传统架构节省了一半以上的费用和人力