当前位置:

首页 > 系统应用 > 阿里云在应用扩缩容下遇到的挑战与选型思考

阿里云在应用扩缩容下遇到的挑战与选型思考

本文目录

    导读:在云原生技术栈逐渐普及之后,如何能够以效率更高、用户更容易接纳的方式落地 Kubernetes 技术体系,让云原生的发挥出真正的价值,正在迅速成为大家津津乐道的一个话题和全新的挑战。而伴随着大家对云原技术的关注点从“怎么用”逐渐上升到“怎么用的更好’上来,CNCF 应用交付领域小组(CNCF

    导读:在云原生技术栈逐渐普及之后,如何能够以效率更高、用户更容易接纳的方式落地 Kubernetes 技术体系,让云原生的发挥出真正的价值,正在迅速成为大家津津乐道的一个话题和全新的挑战。而伴随着大家对云原技术的关注点从“怎么用”逐渐上升到“怎么用的更好’上来,CNCF 应用交付领域小组(CNCF SIG App Delivery)联合阿里巴巴云原生应用平台团队推出了《从 0 到 1:打造现代云原生应用管理平台》系列文章,旨在帮助读者更好的落地和实践云原生核心技术,打造出属于自己的、“以应用为中心”的 Kubernetes 平台。

    背景与场景

    阿里云企业级分布式应用服务EDAS(Enterprise Distributed Application Service),是一款功能强大的应用全生命周期管理和监控的一站式PaaS平台,同时,它也是Open Application Model (OAM)模型在公有云上的首个互联网级商用平台层实现。如今,EDAS的应用管理层内核已完全基于KubeVela开源项目构建于原生的Kubernetes集群之上,为成千上万的云上应用开发者提供了高效、稳定、智能且可扩展的服务。在本文中,我们将以EDAS的底层技术实现为具体案例,深入剖析阿里云在生产环境中设计与落地智能化应用扩缩容策略时所遭遇的挑战、解决方案,以及构建云原生应用平台过程中的宝贵最佳实践。

    阿里云进行应用扩缩容遇到的挑战与选型思考

    作为阿里云面向应用管理与交付领域的核心产品,EDAS 较早就已经完成了从自研虚拟机架构到 Kubernetes 容器集群的架构整体迁移。当然,同大多数基于 Kubernetes 的 PaaS 类似,在这个阶段,EDAS 在应用自动弹性伸缩功能上,是完全基于 Kubernetes 原生 HPA(Horizontal Pod Autoscaler)提供的 CPU 和 Memory 两个基础指标的。但是,随着用户量的增加和需求的日渐多样化,原生基于 HPA 的应用扩缩容策略逐渐暴露出了很多不足之处:

    • 第一,对基于细粒度的应用级负载指标(比如:RT 或者 QPS)进行自动扩缩支持不佳。

    作为一个“ The Platform for Platform”项目,Kubernetes 提供的内置能力主要是围绕着容器级别的管理和编排来展开的,但是对于以应用和用户为核心关注点的产品来说,像 CPU 和 Memory 这样粒度的扩缩容指标就显得太粗粒度了。但是一个“尴尬”的局面是,尽管 HPA 提供了一定程度的自定义指标功能,但它的可扩展性整体上还是不够灵活,自定义指标的可插拔性也不是很好,尤其是当我们希望把指标细化到应用甚至源码层面的时候,经常会碰到需要修改 HPA 代码的情况(而 HPA 代码又是 Kubernetes 代码的一部分)。这就迫切的需要我们在思考如何通过一个扩展性更强的、外部框架来进行细粒度的应用扩缩容策略。

    • 第二,无法支持对应用 Scale To Zero的需求。

    我们知道,在 Serverless/FaaS 场景中 Scale To Zero 是一个比较典型的自动伸缩场景,可以有效的帮助用户节省闲置资源、降低平台的使用成本。实际上, 现代微服务应用中,很多用户托管在云上的微服务,也都具备 Serverless 应用的一些特征,比如无状态、主要根据流量进行响应等等,对于它们来说,Scale To Zero 也是一个非常重要的诉求。但是,Kubernetes 内置的 HPA 并不关注这个场景,是不会提供出这个能力的。而 EDAS 作为一个全功能通用 PaaS 产品,对 Scale To Zero 的诉求是独立的、无平台锁定的原子性能力,不可能通过引入 OpenFaaS 或者 Knative 这样的 Serverless 专属方案来解决所有用户场景下的问题。

    • 第三,无法支持定时扩缩容的需求。

    除了 Scale To Zero 之外,定时扩缩容也是 EDAS 的企业级用户非常迫切需要的一个能力。同样的,对于这个应用运维能力的诉求,也必须是独立的原子性能力,而不能为了一个需求引入一整套其它的平台级方案进来。

    基于上述问题,阿里云团队开始规划 EDAS 产品自动弹性伸缩能力的新版本。而与此同时,EDAS 产品底层架构自 2020 年初也开始了基于 Open Application Model (OAM)的一系列演进升级,旨在通过引入一个标准化、可插拔的应用定义模型替代 EDAS 原有的 Application CRD,从而既为使用者提供一个以“应用为中心”的上层抽象而不是强制用户学习 Kubernetes 中的底层概念,又利用模型的可扩展性确保 EDAS 能够将云原生生态中的各种能力一键“插入”到产品当中。所以,这个新版自动弹性伸缩组件的设计与实现,也自然而然的同 EDAS 的 OAM 化架构结合在了一起。

    在这个新的架构中,一个应用的“自动弹性伸缩”策略,是作为这个应用的“特征”(Trait)存在的。当然,这里提到的“应用”这个概念,是 EDAS 在 Kubernetes 之上借助 OAM 为用户暴露出来的一个上层抽象,并且完全通过用户侧的原语进行描述。所以,这里的问题就出现了,在 Kubernetes 具体的实现层,这种用户定义的、面向应用的弹性伸缩策略,又该如何实现或者选型呢?

    结合前面提到的三个具体的挑战,以及新版 EDAS 基于 OAM 的 Kubernetes 原生化设计,阿里云团队决定直接从开源社区中来引入一个水平扩缩容组件来解决上述问题,并且针对 EDAS 的场景提炼出了三点主要的选型诉求:

    1. 这个水平扩缩容组件提供的应该是简单稳定的原子化能力,而不能跟某个具体的场景化方案(比如 Serverless)绑定。这同时也是 OAM 模型对“应用特征”的基本规范和要求;
    2. 这个水平扩缩容组件的扩容指标应该是插件式的,这样阿里云团队才能够方便得扩展出基于定时、消息队列堆积消息数、应用监控指标甚至 AI 预测结果的“以应用为中心”的弹性策略;
    3. 原生支持 Scale To Zero,并且满足第一条的要求。

    而经过在社区中的评估和选型,最后阿里云团队选择了微软开源 KEDA 项目,它目前已经移交给 CNCF 托管。KEDA 项目可以原生支持 Scale To Zero,更重要的是,它针对应用级水平扩缩容,解耦了被伸缩对象和伸缩指标,并分别提出了对应的抽象接口( Scaler + Metrics Adapter 机制),从而即提供了强大的插件机制,又能够为所有扩缩策略提供一层统一的定义方式。此外,KEDA 的设计和架构比较简,没有很复杂的黑科技存在,内置的很多 Scaler 可以直接使用,非常符合 EDAS 产品的整体诉求。

    EDAS 基于 OAM 和KEDA 的云原生PaaS 架构

    在技术架构上,阿里云 EDAS 产品内核是基于 OAM 社区的KubeVela 开源项目构建的。正是借助了 OAM 提供的 Kubernetes 原生的扩展机制,在上线像 KEDA 这样来自云原生开源社区的能力时,EDAS 产品研发团队并不需要像传统 PaaS 团队那样进行大量的二次开发甚至修改用户侧 API,而只需要将 KEDA 的 CRD 按照 OAM 规范“注册”成为 EDAS 的一个 Autoscale Trait,完成监控数据对接,用户即可使用到这个新增的水平扩容能力。整体架构可以用如下所示的示意图表示清楚:

    在具体实现中,EDAS 主要借助阿里云的 ARMS 服务提供的细粒度的应用级监控数据,来驱动 KEDA 对工作负载进行快速的水平扩容。而除了在 KEDA 中增加了 ARMS Scaler 外,EDAS 对 KEDA v1 Release 中存在的问题也进行了很多修复或者增强,包括:

    • 多个同类型的 Trigger 的指标值会被相加而不是独立计算导致容量值计算有误;
    • KEDA 在创建 HPA 时,名字如果超长则会被简单地 Trim 到 63 字符,没有检查是否符合 DNS 规则,导致有时报错;
    • Trigger 不能被禁用,这在生产环境下会有稳定性风险;

    上述修复,EDAS 团队已经提交或者正在提交至 KEDA 上游中,其中有一部分已经在 KEDA v2 Release 中得到了修复。

    此外,Kubernetes 中还有一个困扰了大家很久的问题就是自动扩容和灰度发布在很多时候会发生冲突。针对这个问题, EDAS 借助 OAM 的模型层语义对这两个能力进行了互斥处理。

    当前工作与未来计划

    在目前工作的基础上,EDAS 正在与开源社区合作,为基于 KEDA 的 Autoscaler Trait 增加很多新的能力,这包括:

    • Trigger 支持禁用功能;
    • 提供 Decider 抽象,能够以扩展的方式,在扩容的过程中加入更多的决策逻辑;
    • 支持 Dry Run 功能;
    • 支持容量变更的灰度,回滚,观测功能;
    • 支持 Webhook 通知;

    而在未来,EDAS 的主要工作重点会专注于如何在当前的架构上同 EDAS 的 AIOps 能力结合,从而为整个平台引入更加智能的弹性体验,这包括:

    1. 更智能的决策机制

    • 结合上下游应用状态综合决策
    • 结合自适应限流综合决策
    • 结合专家系统,根据封网期,大促态的规则综合决策
    • 结合历史数据分析综合决策
    • 提供容量诊断并自动推荐扩缩策略

    2. 更可控的扩缩容过程

    • 提供 webhook 在扩缩变更时发送通知
    • 提供交互在人工确认后才进行扩缩变更操作
    • 提供扩缩变更过程的灰度,回滚,观测功能
    • 提供 Dry Run 功能

    3. 更丰富的触发器体系

    • 应用 QoS 触发器
    • 数据库指标触发器
    • 消息队列指标触发

    在接下来的发布中,这些基于 KEDA 的创新与增强,很快就能够为 EDAS 的用户带来更加强大、智能、稳定的应用自动弹性能力与更加友好的使用体验。

    总结

    这篇文章主要从EDAS的智能弹性伸缩能力出发,阐述了阿里云企业级应用平台在经典PaaS场景下,以OAM和KubeVela项目为基础,支持KEDA水平扩缩容组件时所遭遇的挑战以及相应的解决办法。未来,这套基于KEDA的应用特征将集成更广泛的扩缩容指标以及更智能的决策机制。

    而在同云原生生态共同演进的同时,阿里云 EDAS 服务在云原生应用管理领域的大规模实践,也为 OAM 社区带来了应用版本化、依赖管理、运维特征交互与批量下发机制等大量生产级增强,以及丰富的最佳实践和经验教训。也正是得益于标准与开放的产品架构,阿里云 EDAS 服务才能够迅速的同 KEDA 等云原生社区“新势力”打成一片,以标准化、可扩展的方式,快速的为用户上线强大的、源自开源社区的各种应用管理能力,真正做到了“以用户为中心”来做技术创新与演进,正式迈向云原生应用 PaaS 的下一个时代。

    本文内容来源于网友投稿,如有侵权请联系删除。
    作者最新文章
    系统应用
    相关文章 更多
    win10升级新版本后取消开机密码失效怎么修复
    win10升级新版本后取消开机密码失效怎么修复

    Windows 10更新后开机突然要求输入密码?本文解析自动登录失效的真实原因,提供通过netplwiz重新保存凭据、关闭Windows Hello干扰及排查账户策略的完整步骤,助你恢复免密进入桌面。

    win10更新没下载完反复重试该怎么停止任务
    win10更新没下载完反复重试该怎么停止任务

    Windows 10更新下载失败反复重试怎么办?不要直接停用服务。本文教你通过设置页面暂停更新、启用按流量计费连接以及调整活动时间,安全地暂时停止下载任务并避免意外重启。

    win10怎么取消系统准备强制升级新版本
    win10怎么取消系统准备强制升级新版本

    面对Win10强制升级新版本的提示,本文解析家庭版与专业版的应对差异。介绍如何通过暂停更新、设置活动时间临时避让,以及利用组策略控制功能版本。强调Windows 10支持终止后的安全风险,避免使用高风险的禁用服务手段。

    win10组策略找不到更新选项该怎么处理
    win10组策略找不到更新选项该怎么处理

    Win10组策略编辑器中找不到Windows Update选项怎么办?本文分析家庭版与专业版的权限差异,厘清本地策略与域策略的区别,提供设置页替代方案及企业环境排查思路,避免盲目修改注册表或安装非官方补丁。

    win10取消开机密码会影响电脑里的文件安全吗?
    win10取消开机密码会影响电脑里的文件安全吗?

    很多人为了便捷选择取消 Win10 开机密码,这会导致文件丢失吗?本文详解取消密码后文件访问权限的变化、BitLocker 加密的有效性以及更安全的替代方案,帮助用户在便利与数据安全之间做出正确选择。

    win10弹出立即重启更新怎么延后这个操作
    win10弹出立即重启更新怎么延后这个操作

    Win10弹出立即重启更新会打断工作?本文介绍如何通过Windows Update页面安排重启时间、设置活动时段以及暂停后续更新,有效延后重启操作,保护未保存的工作成果。

    win10自动更新在夜间偷偷运行怎么限制
    win10自动更新在夜间偷偷运行怎么限制

    Win10晚上自动下载或重启怎么办?不要直接禁用服务。本文教你通过设置活动时间、安排指定重启时间及短期暂停更新,精准控制Windows Update行为,避免夜间网络占用和意外重启,同时保留系统安全性。

    win10本地账户取消开机密码有哪些简单方法
    win10本地账户取消开机密码有哪些简单方法

    想跳过Win10开机输入密码?本文详解本地账户清空密码、netplwiz自动登录及PIN设置的步骤与区别,同时提醒Microsoft账户和域策略下的限制与风险。

    win10更新重启倒计时怎么取消不让电脑重启
    win10更新重启倒计时怎么取消不让电脑重启

    面对Win10更新重启倒计时,如何通过设置界面取消或延后?本文详解活动时间、安排重启及暂停更新的位置与作用,帮助你在不影响工作的前提下管理系统重启。

    win10取消开机密码重启后还要输密码怎么办?
    win10取消开机密码重启后还要输密码怎么办?

    Win10设置取消密码后重启依然要求输入?这通常不是系统故障,而是自动登录配置错误或睡眠唤醒验证未关闭。本文教你区分本地账户与微软账户,正确设置netplwiz自动登录,并检查锁屏策略,彻底解决开机免密问题。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    macOS软件
    macOS软件

    正软商城macOS软件专区,精选适用于Mac电脑的办公、设计、影音、效率、开发和系统工具,提供软件功能介绍、macOS兼容版本、正版授权及购买下载服务。

    Mac软件 更多
    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。

    灵活计算器
    灵活计算器
    macOS/iOS/Android

    灵活计算器是一款笔记式算数应用,支持实时计算、动态关联和云端同步功能。记录、整理和输出之间的过渡会更自然,适合长期写作、做笔记或持续沉淀个人内容。

    WINDOWS 更多
    3dmax(3ds max)
    3dmax(3ds max)
    Windows

    Autodesk 3ds Max 是一款专业的三维建模、动画与渲染软件,广泛应用于建筑可视化、游戏开发、影视动画、广告设计和产品展示等领域。

    photoshop
    photoshop
    Windows、macOS 、 iPad

    Photoshop 2026 是 Adobe 推出的专业图像处理与视觉设计软件,支持 Windows、macOS 和 iPad 等平台,广泛应用于摄影修图、电商设计、平面海报、数字绘画及视觉合成等创作场景。

    Blender
    Blender
    Windows、macOS 和 Linux

    Blender 是一款免费开源、跨平台的专业 3D 创作软件,集建模、动画、渲染、视频编辑与视觉合成等功能于一体,广泛应用于影视动画、游戏设计和建筑可视化等领域。软件支持 Cycles 物理渲染器与 Eevee 实时渲染引擎,并提供多边形建模、骨骼绑定、物理模拟等专业工具。Blender 兼容 Windows、macOS 和 Linux 系统,安装包轻巧、运行流畅,依托活跃的全球开发者社区持续更新,是从初学者到专业创作者都值得选择的正版 3D 创作工具。