Gartner 从两个维度定义了云服务的弹性能力:
从云服务器提供商的角度,云服务的弹性意味着“云服务具备根据需要自动增 加或减少系统容量的能力(比如 CPU、内存、磁盘和网络带宽),这会给用户 带来一种无限算力的感知”。
从客户的角度,云服务的弹性指的是云服务具备自动跟随需求的波动变化增加 或减少特定服务容量的能力。
弹性能力主要解决在某个具体业务场景下如何实现资源与业务负载波动匹配的能力。 当然还有一种更为广义的弹性描述,即云资源支持按需取用,需要时可快速获得, 不需要时可随时释放资源的能力,这种能力目前已经成为公有云的能力标配,本文 不做更多相关阐述。
弹性能力指的是平台具备根据业务负载变化,及时且独立地增加或减少基础设施资 源的能力。其中,资源可以是 CPU 核数、内存、网络带宽,磁盘,也可以是 ECS 实 例。弹性能力是公有云典型优势之一,根据添加或减少资源的粒度,弹性能力可以 细分为以下两类:
垂直弹性(vertical elasticity):主要指的是增加或减少计算资源的某个组件, 比如 CPU 核数、内存大小、网络带宽大小、磁盘空间大小等。
水平弹性(Horizonal elasticity):主要指的是增加或减少相同计算资源的数 量。
与弹性能力有关的一个概念是可扩展性(scalability),它通常指的是在不中断服务 的前提下,系统具备通过增加当前的硬件资源(向上扩容)或增加额外的硬件资源 (横向扩容)的方式应对更高业务负载的能力。与弹性能力总是试图提供与当前业 务负载匹配的动态能力相比,可扩展性是一个静态属性,即以增量方式通过提供更 多资源来满足负载增加的场景。
当业务负载下降时,弹性能力会动态释放不需要的资源,而可扩展性不会。所以,可扩展性只能满足部分弹性场景的需求,可以看做是弹性能力的一个子集。
对于具有周期性峰谷波动,或者面临偶发临时流量激增的业务而言,如何快速响应 避免流量高峰期业务不可用,客户侧的常见需求如下:
资源交付的速度:指的是获得资源的周期,包含从发起资源请求到资源交付的 周期。
资源数量的保障:指的是获得所需资源的成功率,成功率也会影响业务是否受 损,比如单次资源扩容需要 1000 台算力,但因为资源不足导致只能交付 500 台。
资源的交付效率:主要指的是资源从获得到可用的时间周期,交付效率最终会 影响业务是否受损;如果资源已经交付,但业务初始化配置的周期较长,则会 延长最终上线时间。
资源的使用成本:指满足业务计算诉求时的获取成本,当然也包括当资源不再 需要时,用户可以释放并且不再收费。
公有云的弹性能力能为业务带来的价值包括:
敏捷性:当业务出现激增需求时,在传统模式下,用户需要经过采购、安装、配 置等长周期的流程,无法快速响应业务的变化;而云上的弹性能力能帮助企业 快速满足计划外的需求,而无需考虑季节性波动。
高可用性:对于周期性波动的业务负载,通过自动化的水平扩缩容能力,可以 实现跟随业务负载的波动自动创建或释放资源,提升业务的连续性。对于突发 的激增流量,云上快速的弹性能力也能在分钟级完成所需资源的交付,大大提 升业务的高可用性。
节省成本:在传统模式下,所有资源的成本在采购之初就已支出,不管资源是 否被使用。而云上资源按量付费的模式允许客户仅需为使用的资源付费,不需要的资源可随时释放。同时,还允许用户跟随波动的实时业务负载需要调整资源的大小,实现成本最优。
高效:自动化弹性可以实现根据用户指定的策略或者自适应策略,自动调整资 源的数量,完全无需人工参与,不仅能更快地响应业务的变化,而且释放运维 人员的维护。
在衡量弹性能力之前,可以先看看几个典型的弹性业务场景,包括:
电商平台:年度大促或周期性促销需要大量的临时资源来保障促销活动的流量 洪峰,比如国内的双 11 大促销、黑五活动,每日秒杀等。
社交媒体:类似微博等媒体平台,当出现艺人八卦引发社交用户热议等类似场 景时,需要紧急快速扩容,避免服务不可用。
在线旅游平台:在长假前一段时间会出现机票酒店查询与订购的请求高峰,比 如国庆假长假,春节假期等。
在线视频/游戏平台:每天晚上放学或下班后到半夜期间是休闲娱乐的高峰期, 平台的访问流量是白天的几倍或几十倍。
临时的开发测试:需要快速完成测试资源的交付,并在开发测试结束后释放对 应资源。
在评估弹性能力之前,首先需要明确不同业务场景在做弹性化改造过程中面临的一 些挑战,具体如下:
弹性速度:尽管云上计算资源是按需取用,但资源的交付速度(从资源购买到 资源可用的延迟)至关重要。当某个流量洪峰突然出现时,留给资源响应的时 间通常不会太长,如果资源无法快速交付,则会直接影响业务的正常访问。
弹性成功率:公有云上资源规模庞大,对单个用户而言可以认为是提供无限算 力,但不同云厂商在不同地域的资源池规模大小不一。当某个可用区的资源规 模有限时,用户可能会遇到因资源不足导致弹性算力无法满足的情况,弹性成 功率将直接影响业务的连续性和可用性。
弹性效率:对于类似渲染或科学计算等需要大规模算力的场景而言,如果用户 分批申请所需算力,只有当全部算力都准备完毕才能开始执行任务,必然会导 致部分已申请但未使用的资源浪费,因此,一次性交付大规模算力的效率将大 大提升业务的效率。
弹性准确性:对于自动响应业务负载波动的弹性场景而言,如果申请的资源需 求大于当前业务负载需求,则会出现过度供给带来资源和成本浪费,而如果拥 有的资源需求小于当前业务负载需求,则会出现业务服务降级甚至不可用的场 景。因此,提供与业务负载匹配的准确资源量,能更好的实现业务与成本的平 衡。
弹性资源预定:对于非常规的弹性需求,比如类似双十一的年度大促活动或者 新游戏开服时,客户在无法确保弹性成功率的情况下,需要额外的弹性资源保 障机制以应对预期外的业务流量。
云上的弹性能力与资源的使用和成本密不可分,要全面衡量业务的弹性成熟度需要
同时从业务的弹性管理能力和资源成本管理两个维度进行。 因此,我们将弹性成熟度分为以下五个等级,对应的能力要求如下:
如果您希望对所在企业弹性能力成熟度进行评估,建议至第十章“CloudOps 成熟 度自评”。
要充分利用云上的弹性能力提升业务的可用性,用户可以根据以下步骤对云上业务
形态和架构进行分析,并进行相关业务改造,提升业务的高可用性的同时降低成本:
a) 分析并识别业务中负载存在波动的业务模块。
b) 明确不同业务模块对应的负载波动上下限,它们决定了该模块在业务高峰期和 低谷期所需资源的数量。
c) 分析负载波动所需资源的数量和对应时间分布,明确所需资源是否能通过自动 扩缩容满足,还是需要提前准备,比如类似双 11 大促的活动,流量会激增几百 倍,一定需要提前准备相关资源。
d) 明确不同业务模块在应用层的要求或约束,比如系统初始化要求、会话保持、 资源释放时的数据处理要求等。
e) 分析目前不具备弹性能力的业务模块是否可以通过类似弹性伸缩的产品进行改 造,提升业务的可用性。
f) 根据业务历史波动规律,配置相关扩缩容策略,并测试是否满足业务负载变化 的需求。
g) 持续测试并改进弹性伸缩相关配置,直到与业务波动匹配。
目前在虚拟机(Virtual Machine)维度的水平扩缩容暂无主流或广泛使用的开源工 具,但容器(Container)维度的水平扩缩容则以 Kubernetes 的调度层弹性组件使用 最为广泛。
Kubernetes 的调度层资源主要分为两个维度
Node 级别:即多个服务器组成的一个集群资源池。
Pod 级别:是 Kubernetes 中最小的部署单元,代表一个运行的时机应用程序。
Kubernetes 的调度层弹性主要是根据业务负载的变化,自动调整应用对一个副本的 数量或资源的大小,从而实现调度层的伸缩。Kubernetes 的弹性组件分为两类:水 平伸缩(HPA)组件和垂直伸缩(VPA)组件。
Kubernetes 通过 Horizontal Pod Autoscaler 组件,根据资源使用率或者自定义指标实现 pod 副本的自动增加或减少,其工作原理如下:
Kubernetes 通过 Vertical Pod Autoscaler(VPA)组件,根据容器资源使用率,自动 设置 CPU 和内存调整的请求,允许在 pod 上进行资源的调整。VPA 会基于 pod 资 源的使用情况,自动为集群设置资源占用的限制,从而让集群将 pod 调度到有足够 的资源的最佳节点上,其工作原理如下:
阿里云提供了丰富的 VM 粒度的弹性产品与工具,用户可通过控制台或标准 OpenAPI,快速完成业务的接入和结合,提升云上业务的可用性和连续性,同时降 低云上成本。
对于单体应用、独立应用、或有状态的应用等场景,随着业务不断升级和变化,用
户需要快速升级资源配置以应对业务变化。
例如,某些视频平台的晚上 6 点到 12 点是业务高峰期,不论是计算能力还是网络 资源,其需求量都会大于之前的水平。此时,客户需要对系统进行配置升级,如升 级到性能更高的实例规格、提高带宽配置、扩大磁盘大小等。当高峰期结束时,整 体负载下降到低谷状态,出于成本的考虑,企业可以对云服务器进行配置降级,如 降低实例规格、降低带宽值等。
阿里云的云资源均提供控制台和标准的 OpenAPI,用户可以根据需要自助完成云资 源的配置变更。目前,阿里云提供的 VM 维度的垂直伸缩能力包括:修改 CPU 核数、 内存大小、磁盘大小、公网带宽大小、修改带宽的付费方式等。用户还可以通过运 维编排服务(OOS),设置在指定时间或当某个条件触发时自动调整 VM 的规格, 满足各种场景需求。
对于科学计算、图形图像渲染等场景而言,其业务对算力交付的需求通常较高,包 括单次任务所需算力规模较大(可能需要几千上万核的算力)、海量算力尽量一次 性满足(否则任务也无法正常执行),希望算力成本越低越好等。因此,海量算力 快速交付的能力也体现了云厂商的弹性深度体验。
公有云的按量付费模式衍生了一种新的付费形态,叫可抢占式(Spot)实例或竞价 实例。Spot 实例的本质是把公有云的闲置资源以较低价格(一般是按量付费价格的 10%~90%)出售,吸引价格敏感的用户出价购买,价高者得。
Spot 实例虽然价格便宜,但因为它采用的是竞价模式,价格会随闲置资源使用波动, 也就意味着一旦 Spot 实例的市场价格超过用户出价或者系统因为库存等需求,该 实例就会被平台自动回收,实例上运行的业务就会停止,因此用户的应用需要对这 种行为进行适配。对于部分价格非常敏感但容错性较高的业务而言,如果能充分利 用 Spot 实例的特性,就能以较低成本快速完成业务的交付。
阿里云的弹性供应组是一个快速交付 ECS 算力集群的方案,用户只需要指定所需算 力的大小和单位(支持 vCPU 核数,ECS 实例个数,内存数量等),以及可用区和 实例规格,弹性供应组会自动去指定的可用区扫描指定实例规格的算力,最终交付 指定大小的算力。除了交付算力外,弹性供应组可以在以下几个维度进一步满足个 性化的弹性需求场景:
精细化的成本控制:对于价格敏感的用户,弹性供应组支持指定算力集群中按 量和 Spot 实例的比例,在确保基础算力的基础上,通过 spot 实例降低算力集 群的总拥有成本。弹性供应组还支持指定实例规格最高出价,以及成本优化类 型的交付模式,这样系统会自动在指定可用区下的实例规格中选择价格最低的 实例进行交付,进一步降低算力的使用成本。
算力自动保持:如果使用了 spot 实例,当 spot 实例被回收以后算力集群的总 容量会下降。通过弹性供应组的保持模式,当 spot 实例被回收或者总算力未满 足时,弹性供应组会自动寻找算力进行补充,完全无需人工干预。
对于分布式应用、无状态应用、大型应用等场景,用户手动指定固定数量的云资源 已经无法满足业务快速和剧烈的变化。客户可以借助于阿里云的弹性伸缩服务 (ESS),根据业务需求和策略自动调整实例数量,在业务需求增长时,弹性伸缩自 动增加实例,来保证计算能力;在业务需求下降时,弹性伸缩自动减少实例,节约 成本。
同时,弹性伸缩具备实例健康检查能力,能自动识别并替换不健康的实例,不仅适 合业务量不断波动的应用程序,同时也适合业务量稳定的应用程序,保障业务的持 续运行。
目前弹性伸缩(ESS)产品提供了以下几个维度的自动化能力,帮助客户自助实现业 务的自动化智能化扩缩容,快速提升业务可用性。
对于业务负载波动比较稳定的场景,例如在每天中午 12 点开始业务需求明显增加, 每天晚上 8 点后需求明显减少的场景,用户可以通过定时任务快速完成可预期负载 的响应。但对于业务负载变化无明显规律,或者在规律性波动外偶尔有突发负载的场景,需要更灵活的伸缩模式来响应业务波动。弹性伸缩目前提供的扩缩容模式包
括:
手动模式:允许用户手动进行弹性伸缩,包括手动添加、移出或者删除已有的资源。
固定数量模式:用户设置集群的最小/最大期望资源数量,当实例数量低于 下限/超过上限时,系统会自动添加/移出资源,使得资源数量等于下限/上 限。
健康监测模式:系统自动检查计算资源的运行和健康状态,如果发现一台计 算资源未处于运行中或处于不健康状态时,弹性伸缩服务会自动移出该资 源,并创建一台新的资源进行替换。
定时模式:用户可以通过创建定时任务,实现在指定时间内自动创建或释放 指定 4 数量的资源。
指标模式:监控集群中资源的性能指标(如 CPU 利用率、网络流量均值) 波动,当指标当前值超出制定阈值时,自动触发执行资源的扩缩容。
完善的业务指标监控矩阵
一般业务负载的波动都与一个或多个业务指标有强关联性,即用户可以通过监控业 务负载的一个或多个指标识别到业务的上下波动。阿里云的弹性伸缩服务不仅支持 根据伸缩组内集群实例的十几种性能指标进行扩缩容,比如实例的 CPU 使用率、内 存使用率、网络吞吐率等,还支持根据其他产品的指标进行自动扩缩容,比如负载 均衡的 QPS。
弹性伸缩自带的健康检查能力,会周期性扫描伸缩组内 ECS 实例的健康状态。如果 发现某个实例处于关机状态(不提供正常服务)或实例 OS 内出现异常导致实例无 法正常响应,弹性伸缩服务会自动移除该实例,并创建一个新的实例进行替换,确 保业务所需算力。此外,当伸缩组与某个负载均衡关联后,如果负载均衡发现伸缩 组内某个实例出现异常,自动将该实例摘除后,弹性伸缩也会自动创建一个新实例, 确保算力稳定。
有效的成本控制 弹性伸缩目前提供两种方式帮助用户在保障业务可用性的基础上,尽可能降低算力成本。
一是弹性伸缩支持扩容时同时选择按量和抢占式实例,以及指定两种实例 的比例。
二是弹性伸缩的动态伸缩模式和预测的伸缩模式均可以自动根据业务负载 波动自动计算所需算力的调整,实现资源规模与负载需求直接的完美匹配, 避免过度供给带来的成本浪费。
个性化的弹性管理能力
对于部分无法做到完全无状态的业务负载,比如在扩容时新交付的实例正式承接负 载前,需要下载最新的数据或代码,弹性伸缩的生命周期挂钩可以实现扩缩容时的 个性化配置。
目前,弹性伸缩支持扩容和缩容两种类型的生命周期挂钩。用户可以创建扩容时的 生命周期挂钩,在新扩容出来的实例正式使用前,在实例内做一些自动化的配置任 务,比如安装某些应用程序或执行某些脚本。当任务完成之后,才真正将实例投入 使用。缩容的生命周期挂钩也是类似的场景,满足多样化的弹性诉求、对于自动化能力较高的用户,希望监控弹性伸缩的各种行为与结果并与其他系统打 通,比如当扩容失败时需要及时感知并自动执行其他任务进行兜底,避免业务受损, 可以消费弹性伸缩提供的各种事件和通知渠道。目前弹性伸缩支持扩缩容成功、扩 缩容失败等场景的事件,并支持 MNS 消息队列、云监控等订阅通道,方便用户快速 完成接入和打通。
云上计算资源的获取是通过实例具体规格来指定的,比如阿里云的 c5.large, c6.large,c7.large 等多个实例规格均可以提供 2 核 4GB 的算力。如果客户的业务 负载对算力没有特殊的要求,比如实例的网络吞吐上限等,在使用弹性伸缩时,可 以选择多个可用区和多种符合要求的实例规格,当遇到临时突发流量时,弹性伸缩服务会自动在多个可用区下巡检所有符合要求的实例,尽可能交付所需算力,避免因单个资源库存不足导致业务降级或受损。
对于周期性明显的负载波动,弹性伸缩服务提供了预测伸缩模式,即对业务负载波 动历史进行分析建模自动预测业务负载未来 2 天的变化情况,无需用户配置即可实 现在需要的时候自动扩缩容所需算力。目前弹性伸缩的预测伸缩模式仅适用于 CPU、 内存和网络带宽有明显周期性波动的业务负载。
对于类似双 11 大促、新游戏开服等可能出现非预期流量洪峰的场景,常规弹性无 法 100%满足要求,为了确保某些业务在特殊阶段的 100%可用,客户除了需要提前 预估资源外,还需要额外的资源储备,以应对计划外的流量请求。在传统模式下, 这些临时额外资源的储备面临 2 大难题:
采购周期长且数量难预估,预估不准可能因资源不足导致业务受损,也可能因 资源过多导致成本浪费。
因临时突增需求的采购,使用周期较短,后期面临闲置问题。
阿里云提供的资源预定服务,可以同时满足使用时间不定使用时长不定的峰谷弹性需求,和资源使用了稳定且弹性规模较高的周期性弹性需求。
资源预定服务中的弹性保障可以为灵活付费的日常弹性资源需求提供弹性资源 的确定性保障。用户只需支付一笔较低的保障费用,阿里云会以私有池的方式为用户预留对应的资源池,用户在某个固定周期(支持 1 个月~5 年)内都可以获得特定容量的弹性资源,保障所需算力的 100%交付。
资源预定服务中的容量预定可以实现指定容量资源的锁定,快速满足弹性规模 较大的场景。对于可能面临流量突增的场景,用户通过容量预定可以提前锁定 部分资源,在需要的时候优先从锁定资源中获取算力,避免因资源不足导致突 增需求无法满足的场景。
参考材料:
阿里云 ACK 产品介绍:https://help.aliyun.com/document\_detail/176660.html
AWS elasticity 架构定义:https://wa.aws.amazon.com/wellarchitected/2020-07-02T19- 33-23/wat.concept.elasticity.en.html
AWS automating elasticity:https://d1.awsstatic.com/whitepapers/cost-optimization- automating-elasticity.pdf
GCP scalable and resilient app:https://cloud.google.com/architecture/scalable-and- resilient-apps
Azure well-architected framework : https://docs.microsoft.com/en- us/azure/architecture/framework/resiliency/overview
GCP autohealing for highly available app: https://cloud.google.com/compute/docs/tutorials/high-availability-autohealing
VMware elasticity on cloud:https://www.vmware.com/topics/glossary/content/cloud- elasticity.html
Vmware cloud scalability:https://www.vmware.com/topics/glossary/content/cloud- scalability.html
中国信通院 2021 云计算白皮书: http://www.caict.ac.cn/kxyj/qwfb/bps/202107/P020210727458966329996.pdf
Gartner cloud service elasticity : https://www.gartner.com/en/information- technology/glossary/cloud-service-elasticity
hal elasticity:https://hal.inria.fr/hal-01529654/document 📎HAL-cloud elasticity.pdf
HPA 和 VPA 介绍:https://dasydong.github.io/blog/2019/12/21/k8s-ca-code 综合篇/# 概念及原理
《CloudOps云上自动化运维 白皮书2.0》系列文章一:前言:提出CloudOps成熟度模型CARES
《CloudOps云上自动化运维 白皮书2.0》系列文章二:CloudOps的主要衡量纬度和定义
《CloudOps云上自动化运维 白皮书2.0》系列文章三:CloudOps成熟度模型整体及等级说明
《CloudOps云上自动化运维 白皮书2.0》系列文章四:自动化能力Automation
《CloudOps云上自动化运维 白皮书2.0》系列文章六:可靠性能力Reliabilty
《CloudOps云上自动化运维 白皮书2.0》系列文章七:安全和合规能力Security
《CloudOps云上自动化运维 白皮书2.0》系列文章八:成本和资源量化管理能力Cost
《CloudOps云上自动化运维 白皮书2.0》系列文章九:CloudOps成熟度模型全景图
《CloudOps云上自动化运维 白皮书2.0》系列文章十:CloudOps成熟度自评
各位产业专家、引领浪潮的创业者们,阿里云正在进行“客户云支出趋势”的调研,完成10题问卷(仅需2~3分钟,每家企业限填一次),即有机会获得小礼品!
问卷请见链接:https: //survey.aliyun.com/apps/zhiliao/wvN2aaIiA
也可扫码:
2023年9月21日,阿里云正式推出阿里云创业者计划,联合知名投资机构、加速器、创服机构以及大企业创新力量,旨在为初创企业提供全方位的赋能与服务,助力创业公司在阿里云上快速构建自己的业务,开启智能时代创业新范式。