为什么公共云的弹性能力很难被发挥出来?

作者|王小瑞  AutoMQ 联合创始人 & CEO

云计算通过资源池化实现单位资源成本更优,使企业能够将 IDC 建设、基础软件研发和运维等工作外包给云厂商,从而更专注于业务创新。资源池不仅包括服务器,还包括人才。云厂商集聚了优秀工程师,通过云服务为众多企业提供专业服务,让专业的事交给最专业的人。

云计算发展这么多年,弹性是云计算从业者最关注的技术能力之一,但是真正落实到具体的案例上,很少有客户能把弹性用好,弹性反而成为了一种口号,一种理想的架构,本文尝试讨论为什么现实和理想差距这么大,以及有哪些低投入高回报的弹性方案。

01 云厂商通过包年包月打折来留住客户,与弹性场景相悖

下表是一份典型的包年包月 EC2 价格与按量付费价格对比,总结出来的游戏规则:

ꔷ 包年包月相比按量付费大约有 50% 的成本节省

这也是为什么大多数企业选择包年包月方式来使用 EC2 资源。从云厂商的角度这么设计非常合理,因为云厂商是通过预测全网客户的使用量来确定一个 Region 要预留多少空闲水位,假设 On-Demand 和 Reserved 实例价格一致,将导致云厂商难以预测一个 Region 的水位,甚至会出现白天和晚上有巨大的差异,会直接影响供应链的采购决策。云厂商是典型的类零售商业模式,每个 Region 的空闲机器数量类比为库存,库存比例越高,会导致利润率越低。

ꔷ Spot 实例恰好做到既便宜又是按小时付费

这也要求应用能处理好 Spot 实例被强制回收带来的影响,对于无状态应用相对简单,Spot 实例在回收之前会通知应用,大部分云厂商会给到分钟级别的回收窗口,应用只要做到优雅下线,就能做到对业务无影响。海外专业基于 Spot 实例来管理计算资源的创业公司[1],有大量的产品化功能帮助用户用好 Spot 实例。AutoMQ 公司也积累了丰富的 Spot 实例使用经验[2]。但是对于有状态应用,Spot 实例使用起来的门槛变得非常高,实例被强制回收前,就需要做到将状态转移。比如 Kafka,Redis,MySQL 这类应用。针对这类数据型的基础软件通常不建议用户直接部署到 Spot 实例上。

这个游戏规则既有合理的地方也有值得优化的地方,笔者认为至少还可以在以下方面做的更好:

ꔷ Spot 回收机制提供 SLA

要能鼓励更多用户使用 Spot 实例,那么 Spot 的回收机制中的消息通知要能提供确定的 SLA,这样一些关键业务就能敢于大规模使用 Spot 实例。

ꔷ 创建新实例 API 提供 SLA

Spot 被回收后,应用的兜底方案是继续开通新的资源(如新的 Spot 实例,或新的 On-Demand 实例),这时开通新实例的 API 也要能有确定的 SLA,这个 SLA 会直接影响到应用的可用性。

ꔷ 卸载云盘提供 SLA

Detach EBS 也要能有确定的 SLA,因为一旦发生强制回收 Spot 实例,要能允许用户自动化处理好应用状态卸载。

AWS US EAST m6g.large

02 程序员很难做好资源回收这件事情

C/C++ 程序员大量的精力在和内存作斗争,但是仍然不能保证内存资源不泄露。原因是资源准确回收是一件极具挑战的事情,比如一个函数返回一个指针,那么这个对象是谁负责回收,C/C++ 是没有约定的,如果再涉及到多线程,则更加噩梦。为此 C++ 发明了智能指针,通过一个线程安全的引用计数来管理对象。Java 通过内置的 GC 机制,通过运行时来检测对象回收,彻底解决了对象回收问题,不过也带来了一定的运行时开销。最近特别火的 Rust 语言,本质上也是类 C++ 的智能指针回收方式,创新性的将内存回收检查机制做到了编译阶段,从而大幅提升了内存回收的效率,避免了 C/C++ 程序员常犯的内存问题,笔者认为 Rust 将是 C/C++ 的一个完美替代。

回到云操作系统这个领域,程序员可以通过一个 API 就能创建一台 ECS,一个 Kafka 实例,一个 S3 Object,这个 API 背后带来的是账单的变化。创建容易,回收则变得非常困难。创建时候通常会指定最大规格,比如创建一个 Kafka 实例,先来 20 台机器,因为未来扩容缩容都很困难,不如一次到位。
虽然云计算提供了弹性,但程序员难以有效地按需管理资源,导致资源回收困难。这促使企业在云上资源创建时设立繁琐的审批流程,类似于传统 IDC 的资源管理方式。最终导致的结果即程序员在云上使用资源的方式与 IDC 趋同,即需要通过 CMDB 进行资源管理,并依赖人工审批流程来避免资源浪费。

我们也看到了一些优秀的弹性实践案例。例如某大型企业在使用 EC2 时,每个 EC2 的 Instance ID 存活周期不超过 1 个月,一旦超过, 就会被列为“爷爷辈的 EC2”,要上团队的黑榜单。这是一个非常棒的不可变基础设施实践方法,能有效避免工程师在服务器上保留状态,如配置,数据等,从而让应用走向弹性架构变得可行。

当前云计算的阶段还处在 C/C++ 阶段,还没有出现优秀的资源回收解决方案,所以企业还在大量使用流程审批机制,实质上导致了企业无法发挥云的最大优势:弹性。这也是导致企业云支出较高的主要原因之一。

相信只要有问题,一定会有更优秀的解法,解决云资源回收的类 Java/Rust 方案一定会在不久的将来问世。

03 从基础软件到应用层,还没有为弹性做好准备

笔者曾在 2018 年开始为淘宝天猫的数千个应用设计弹性方案[3],当时淘宝天猫的应用已经做到了离线和在线混部来提升部署密度,但是在线应用仍然为预留模式,无法做到按需弹性。根本问题还是应用在扩缩时,可能会产生非预期的行为,即使运行在 Kubernetes 之上,仍然不能彻底解决,如应用会调用各种中间件的 SDK(数据库、缓存、MQ、业务缓存等),应用本身启动也消耗时间较长,看似无状态的应用,实则也包含了各种状态,如包括单元标签,灰度标签等,让整个应用需要大量的人工操作,人工观察才能有效扩缩容。

为了让 Java 应用从分钟级的冷启动提升到毫秒级,当时为 Docker 开发了 Snapshot 能力[3],这项能力的生产应用足足比 AWS 领先了 4 年(AWS 于 2022 年 Re:invent 会议上发布了 Lambda SnapStart 特性[4][5])。通过 Snapshot 方式启动应用可以数百毫秒就能增加一台可以立刻工作的计算节点,这项能力让应用不需要改造成 Lambda 函数方式就能做到像 Lambda 一样,根据流量来增减计算资源,也就是我们看到的 Lambda 提供的 pay-as-you-go 能力。

应用层做弹性已经如此复杂,到了基础软件做弹性挑战更大,如数据库、缓存、MQ、大数据等产品。分布式高可用高可靠的要求决定了这些产品都需要将数据存储多副本。一旦数据量大,弹性将变得非常困难,迁移数据会影响业务的可用性。为此,要在云环境解决这个问题,就要用云原生的方式,我们在设计 AutoMQ(赋能 Kafka 的云原生方案)时,将弹性作为最高优先级,核心挑战是要将存储卸载到云服务,例如按量付费的 S3,而不是自建存储系统。下图是 AutoMQ 线上的流量和节点变化图,会看到 AutoMQ 是根据流量全自动增减机器,如果这些机器采用 Spot 实例,将为企业节省大量的成本,真正做到 pay-as-you-go。

AWS US EAST m6g.large

04 企业如何使用好弹性能力来降本增效

Google 在 2018 年推出了 Cloud Run[6]全托管式计算平台,基于 HTTP 通信的应用仅需提供监听端口和容器镜像给 Cloud Run,所有基础设施的管理将全自动由 Cloud Run 来执行。这种方式相比 AWS Lambda 方式最大优势是无需绑定到单个云厂商,未来可以更好的迁移到其他计算平台。很快 AWS 和 Azure 跟进推出了类似的产品,Azure Container Apps[7]和 AWS App Runner[8]。

专业的事情交给专业的人做,弹性是一个非常有挑战的工作,推荐云上的应用可以尽可能依赖这些无代码绑定托管框架,如 Cloud Run,做到应用消耗的计算资源可以按照请求来付费。

基础软件如数据库、缓存、大数据、MQ 等,很难用一个统一的托管框架来解决,这类应用的演进趋势是每个品类都在向弹性架构演进,如 Amazon Aurora Serverless,Mongodb Serverless[9],从云厂商到第三方开源软件商都有共识要能走到彻底的弹性架构。
企业在选择类似开源基础软件时,要尽可能选择具备弹性能力的产品,判断的标准是是否能运行在 Spot 实例上,是否能极具性价比。同时也要关注这类产品是否能更好的在多个云上运行,这决定了企业在未来走向多云架构,甚至混合云架构时,是否具备移植性。

05 关注 AutoMQ,探讨如何让 Kafka 利用云的弹性能力

4 月 20 日,AutoMQ 联合 StarRocks 和 KubeBlocks 将在北京举办《企业如何构建云原生现代化数据栈》Meetup。会议将探讨云原生现代化数据栈在不同场景下的实际应用案例。其中,京东 Kafka 云原生架构师钟厚会分享 AutoMQ 部署在 Kubernetes 上的经验,同时,AutoMQ 首席产品经理陈仲良为大家介绍 AutoMQ 的弹性能力和适用场景。

引用文章

[1] https://spot.io/

[2] https://www.automq.com/zh/blog/how-automq-achieves-10x-cost-efficiency-spot-instance

[3] https://mp.weixin.qq.com/s/Gj_qPPTn6KN065qUu6e-mw

[4] https://docs.aws.amazon.com/lambda/latest/dg/snapstart.html

[5] https://aws.amazon.com/cn/blogs/aws/new-accelerate-your-lambda-functions-with-lambda-snapstart/

[6] https://cloud.google.com/run?hl=zh_cn

[7] https://azure.microsoft.com/en-us/products/container-apps

[8] https://aws.amazon.com/cn/apprunner/

[9] https://www.mongodb.com/products/capabilities/serverless

关于我们

我们是来自 Apache RocketMQ 和 Linux LVS 项目的核心团队,曾经见证并应对过消息队列基础设施在大型互联网公司和云计算公司的挑战。现在我们基于对象存储优先、存算分离、多云原生等技术理念,重新设计并实现了 Apache Kafka 和 Apache RocketMQ,带来高达 10 倍的成本优势和百倍的弹性效率提升。

🌟 GitHub 地址:https://github.com/AutoMQ/automq

💻 官网:https://www.automq.com

👀 B站:AutoMQ官方账号

🔍 视频号:AutoMQ

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/549117.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java链式编程

一:链式编程 可以简化编程。代码简洁。 定义: 链式编程:顾名思义,链子嘛。它是一种编程范式,它允许将多个函数或操作连接在一起,形成一个链条,以执行复杂的操作。 优点: 编程性…

酒店水电智能化管理解决方案

在酒店行业中,水电能源的高效管理是实现可持续发展与降低运营成本的关键。酒店水电智能化管理解决方案通过运用先进技术,实现了对酒店水电资源的高效、智能监控与管理。本文将从解决方案的背景、核心技术以及带来的效益三个方面全面介绍该解决方案。 解…

快速掌握乡村振兴展厅设计要点,打造令人瞩目的展示效果!

基于数字多媒体技术研发的多媒体互动装置,给展览展示行业带来了巨大的创新和改变,这种将现代科技与传统展厅相融合的展示形式,做到了一馆多用的功能建设,而这一特性也为乡村文化和历史传承提供了更好的平台。那么,下面…

keil创建单片机工程

一、创建工程 打开Keil uVision4,依次选择 Project—>New uVision4 Project,选择工程保存路径及填写工程名称,如下图 然后点“保存”。在Select a CPU Data Base File中选择"STC MCU Database",点 "OK"&am…

【muzzik 分享】关于 MKFramework 的设计想法

MKFramework是我个人维护持续了几年的项目(虽然公开只有一年左右),最开始由于自己从事QP类游戏开发,我很喜欢MVVM,于是想把他做成 MVVM 框架,在论坛第一个 MVVM 框架出来的时候,我的框架已经快完…

拉普拉斯金字塔的频谱分析

1. 基本分析 拉普拉斯金字塔分解,主要由以下步骤组成: 对输入图像 L0 进行低通滤波,其中常采用高斯滤波;对低通滤波后的图像进行 1/2 倍率的下采样,这里的下采样通常是指直接取偶行且偶列(以 0 开始计&am…

惯用Python的5个技巧(循环)

在这篇文章中,你将看到5种方法可以使你的python循环更习惯,运行得更快,内存效率更高。 在我看来,Python是计算机科学中最简单、最通用的语言之一。如果你正确地编写python代码,很难区分python代码和伪代码。但有时&…

免单优选电商模式:激发购买欲望的创新销售策略

免单优选电商模式,作为一种创新的销售策略,其核心在于通过价格优惠、渐进式激励和社交网络结合,有效刺激消费者的购买行为,进而推动销售业绩的快速增长。 一、合法合规,规避多层次奖励风险 该模式坚持合法合规的运营原…

【从浅学到熟知Linux】进程控制下篇=>进程程序替换与简易Shell实现(含替换原理、execve、execvp等接口详解)

🏠关于专栏:Linux的浅学到熟知专栏用于记录Linux系统编程、网络编程等内容。 🎯每天努力一点点,技术变化看得见 文章目录 进程程序替换什么是程序替换及其原理替换函数execlexeclpexecleexecvexecvpexecvpeexecve 替换函数总结实现…

3D视觉引导麻袋拆垛破包 | 某大型化工厂

客户需求 此项目为大型化工厂,客户现场每日有大量麻袋拆垛破包需求,麻袋软包由于自身易变形、码放垛型不规则、运输后松散等情况,无法依靠机器人示教位置完成拆垛。客户遂引入3D视觉进行自动化改造。 工作流程: 3D视觉对紧密贴合…

公司文件加密软件有监视功能吗?

公司文件加密软件不仅提供了强大的文件加密能力,还具备了监视功能,确保文件在使用过程中的安全性。华企盾DSC数据防泄密系统中的监控功能体现在以下几个方面: 加密文件操作日志:记录所有加密文件的申请、审批、扫描加解密、自动备…

数据分析

数据分析流程 数据分析开发流程一般分为下面5个阶段,主要包含:数据采集、数据处理、数据建模、数据分析、数据可视化 数据采集: 数据通常来自于企业内部或外部,企业内部数据可以直接从系统获得,外部数据则需要购买&a…

【面试经典 150 | 链表】删除链表的倒数第 N 个结点

文章目录 写在前面Tag题目来源解题思路方法一:统计节点个数方法二:双指针 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法,两到三天更新一篇文章,欢迎催更…… 专栏内容以分析题目为主,并附带一些对于本…

Python 爬虫:如何用 BeautifulSoup 爬取网页数据

在网络时代,数据是最宝贵的资源之一。而爬虫技术就是一种获取数据的重要手段。Python 作为一门高效、易学、易用的编程语言,自然成为了爬虫技术的首选语言之一。而 BeautifulSoup 则是 Python 中最常用的爬虫库之一,它能够帮助我们快速、简单…

【Java探索之旅】数组使用 初探JVM内存布局

🎥 屿小夏 : 个人主页 🔥个人专栏 : Java编程秘籍 🌄 莫道桑榆晚,为霞尚满天! 文章目录 📑前言一、数组的使用1.1 元素访问1.2 数组遍历 二、JVM的内存布局🌤️全篇总结 …

Java面试题目和答案【终极篇】

Java面向对象有哪些特征,如何应用 ​ 面向对象编程是利用类和对象编程的一种思想。万物可归类,类是对于世界事物的高度抽象 ,不同的事物之间有不同的关系 ,一个类自身与外界的封装关系,一个父类和子类的继承关系, 一个类和多个类的多态关系。万物皆对象,对象是具体的世…

Linux 删除文件或文件夹命令(新手)

一、删除文件夹 rm -rf 路径/目录名 1 强制删除文件夹及其子文件。 二、删除文件/文件夹:rm 命令 rm 删除命令,它可以永久删除文件系统中指定的文件或目录。 rm [选项] 文件或目录 选项: -f:强制删除(force&am…

我们试用了6款最佳Appium替代工具,有些甚至比Appium更好

Appium是一款知名的自动化测试工具,用于在iOS、Android和Windows等移动平台上运行测试。就开源移动测试自动化工具而言,虽然替代品有限,但它们确实存在。我们找到了一些优秀的Appium替代品,它们也可以满足自动化测试要求&#xff…

聚道云软件连接器助力医疗器械有限公司打通金蝶云星辰与飞书

摘要 聚道云软件连接器成功将金蝶云星辰与飞书实现无缝对接,为某医疗器械有限公司解决采购订单、付款单同步、审批结果回传、报错推送等难题,实现数字化转型升级。 客户介绍 某医疗器械有限公司是一家集研发、生产、销售为一体的综合性医疗器械企业。…

BackTrader 中文文档(一)

原文:www.backtrader.com/ 主页 欢迎来到 backtrader! 原文:www.backtrader.com/ 一个功能丰富的 Python 框架,用于回测和交易 backtrader允许您专注于编写可重复使用的交易策略、指标和分析器,而不必花时间构建基础…