微服务应用视角解读如何选择K8S的弹性策略

news2024/11/17 22:38:57

前言

微服务架构的出现,拆分了庞大的单体应用,让业务之间的开发与协作变得更加灵活。当面临业务流量增加的场景时,往往需要对一些应用组件进行扩容。K8S在应用层面提供了HPA,围绕HPA开源社区延伸出了KEDA这样的弹性组件,为微服务应用以业务指标执行弹性策略提供了实现的可能性。但HPA正常工作的一个大前提是需要保证集群资源充足,为此用户必须提前对集群扩容或时常保持集群资源冗余。

对于集群资源弹性这一命题,K8S社区给出了Cluster Autoscaler(CA)和Virtual Kubelet(VK)两种解决方案。本文围绕着微服务应用的形态与特点,剖析了CA与VK各自适用的场景,并总结了微服务架构下应用该如何选择集群资源弹性。

微服务应用形态与特点

在微服务应用架构,微服务架构将一个庞大的应用系统拆分成了一个个离散的应用组件,这些组件通过RPC串在一起,对外提供完整的服务。每个组件是离散的,大部分组件可以通过水平扩缩从而调整服务容量。非核心链路上的组件,是允许延迟扩容或者不扩容,甚至是缩容让出资源。

微服务架构下在弹性场景存在五大特征点:

  • 水平伸缩可以调整系统容量:在外部资源充足的情况下,微服务应用组件水平扩容可以提升业务系统的容量。
  • 应用间存在依赖关系:单个微服务应用并不能提供完整的服务,扩容单个微服务组件,对系统容量的提升非常有限,往往需要和依赖的服务一起扩容才能有效提升系统容量。
  • 应用本身是无状态的:若微服务应用本身有状态,对于水平扩容是不利的,例如对磁盘有强依赖,在扩容场景下需要注意调度亲和性以打散Pod,避免同类型应用在同一节点对磁盘IO抢占,同时缩容时还需要考虑对于状态数据的处理。因此需要尽量改造成无状态应用。
  • 启动速度快且服务上下线流量无损:服务上下线流量无损对于自动扩缩容场景至关重要,尤其是在大流量高并发场景下扩容,冷启动的新Pod很容易被大流量击溃,并且在健康探针的作用下,扩容出的新Pod不断被K8s重启,最终实现的是无效扩容。
  • 流量具有周期性:绝大多数微服务架构应用面向的是在线服务,因此可以用二八定律来描述它,即20%的时间处理了80%的流量。对于业务流量而言,最显著的特征是存在周期性的变化,且往往这个变化是快速的,所以微服务应用容量扩缩的响应速度对于业务系统的稳定起重要作用。

在微服务应用架构中配置应用弹性时,我们所需要考虑的是选择合适的指标来衡量系统容量。在配置集群资源弹性时,我们所需要考虑的是扩容出的计算资源是否能够满足应用所需。

K8S 集群资源弹性技术方案

如前言中所提及,K8S社区给出了两份“标准答案”的框架,具体的资源弹性实现还依赖云厂商的技术形态与产品能力。

虚拟节点:VK

Virtual Kubelet是根据Kubelet定义提出的一个“虚拟节点”的概念,允许云厂商将云服务包装成一个“虚拟节点”,加入到Kubernetes集群中。虚拟节点的背后往往是云厂商的大资源池,因此理论上我们可以认为虚拟节点的资源是无限的,当然实际情况还要以云厂商的规模和产品能力来做判断。

节点伸缩:CA

Cluster Autoscaler是K8S社区给出的集群节点伸缩方案。CA监听集群中所有Pod事件,当有Pod因为资源不足而无法调度时,CA会根据伸缩组信息进行模拟扩容并调度计算,最后按照预设的节点扩张策略进行真实节点扩容。同时CA监听集群整体资源利用率,当利用率低于预设的缩容阈值时,CA进行模拟缩容调度计算,排除各种影响因素后,CA对可缩容节点执行打污点、排水、删除这一系列操作。

各方案特点比对

以CA技术形态为主的真实节点伸缩与以VK技术形态为主的虚拟节点,这两种主流技术手段有着各自特点,其中最主要的区别如下:

简而言之,CA伸缩真实节点以提供完整K8S能力,但响应速度较慢;VK由云厂商资源池驱动,提供了秒级、无限资源的弹性能力,但不存在真实节点,从而失去了部分K8S特性。

云厂商解决方案

在VK和CA这两种主要资源弹性技术方向上,各个云厂商也纷纷推出了对应产品以提供相应的解决方案。

Serverless方向主要是Serverless Instance与Serverless Cluster。Serverless Instance产品有ECI、Fargate、ACI这类,以快速、无限资源为显著特点。Serverless Cluster产品有阿里云的ASK、谷歌的GKE Autopilot,由云厂商维护所有集群资源,对用户而言开箱即用免运维。

节点伸缩方向AWS还推出了开源组件Karpenter,它绕过了CA中伸缩组的概念,从而让扩缩容时对于资源的选择更加灵活。

资源弹性策略选择与考量因素

对于资源弹性问题,我们首要考虑的是能力。即新的计算资源是否能够满足业务使用需求。以VK技术形态为主的弹性方案,受限于架构设计、安全、性能等因素,天然地缺失了节点特性、容器特权等能力。对于有这部分诉求的业务应用应尽可能地进行改造,以移除相关依赖。

其次我们考虑的是成本效率。对于企业应用而言,成本预算是不可避免的话题,定价规则以及计费模式不同,最终带来的资源成本不同,势必会影响我们对于某项技术的偏好。在当前的Serverless场景下,计算资源大体上采用的还是按量计费模式,对于一些长时运行的应用上,采用预付费模式的计算资源是否能达到更节省成本,还需要我们进一步去调研与尝试。成本这一层面不仅包含资源成本,还包含运维成本、团队技术学习成本以及依赖具体云厂商所隐含的迁移成本等等,这些成本在当下可能对企业的收益影响有限,但从企业长远发展角度来看,这一部分不可忽视。同时对于技术团队而言,选择相应技术方案在节约运维成本和降低团队学习成本的同时,需要理性看待这部分成本节省与团队成长所带来的收益之间的关系。

效率是影响业务收益成本的重要因素之一,从流量来袭,到HPA根据指标做出响应,再到资源弹性做出动作,最后到应用启动服务上线。这之中每一个环节都存在时间成本,通常情况下这个时间成本越小越好,但也存在一些业务对于时间成本不敏感。对于扩容的每个环节,都延伸出了相应的技术解决方案。如HPA被动式响应,阿里云推出了AHPA带指标预测的提前扩容能力。如JAVA应用启动慢,GraalVM、Alibaba Dragonwell都在冷启动上做出了一些努力。对于明确业务周期的应用,设置好定时弹性提前扩容,这些问题自然引刃而解。

最后还有一些场景问题需要考虑,对当前应用架构进行升级、迁移、重建时,我们需要把高弹性因素纳入考虑范围,进行合适的技术选型。

综上所述,我们总结了一张资源弹性选择策略图,列举了通用场景下对集群弹性选型时需要考虑的因素点。

总结

在微服务架构中,我们需要从业务视角梳理与划分应用组件。对于核心链路组件,要尽可能的保证这些组件的健壮性,并调整成一个高可用、高弹性的架构,从而让核心业务长久运行。对于外围链路组件,需要权衡成本与高可用、高弹性带来的效益。

在K8S资源弹性问题上,现有技术手段中,我们需要考量兼容性、效率与成本,从而选择合适于自身业务的集群弹性策略。

阿里云的微服务应用托管平台 EDAS 在资源弹性场景下,不仅针对性的对于独享资源型业务虚拟机 ECS 集群,池化资源型业务 K8S 集群,以及全托管免运维的阿里云 Serverless 集群均做了很好的支持;同时基于结合阿里云容器服务和 ECI ,同时提供了针对池化资源 + Serverless Instance 的形态场景支撑,让我们微服务的业务在可以充分利用云技术所带来的技术红利。

原文链接

本文为阿里云原创内容,未经允许不得转载。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Compose使用OpenGL+CameraX快速实现相机“拍视频实时滤镜“、”拍照+滤镜“

一、前言 短视频热潮还没有褪去,写这篇文章主要是帮助大部分人,能快速上手实现类似效果,实际上是: CameraX拿相机数据,OpenGL给CameraX提供一个Surface,数据放到OpenGL渲染的线程上去做图像相关操作 Open…

Java项目:springboot+layui就业信息管理

作者主页:源码空间站2022 简介:Java领域优质创作者、Java项目、学习资料、技术互助 文末获取源码 项目介绍 该项目采用了spring boot,spring,spring mvc,mybatis作为后端技术框架,这些组合稳定抗打&#x…

Redis缓存穿透、击穿、雪崩到底是个啥?7张图告诉你

目录一、缓存是什么?二、缓存的作用和成本1、缓存的作用:2、缓存的成本:三、缓存作用模型1、根据id查询数据缓存流程四、缓存更新策略1、内存淘汰2、超时剔除3、主动更新五、缓存穿透解决方法:六、缓存雪崩七、缓存击穿1、通过互斥…

基于局部特征和引导形状变形的重叠子宫颈细胞自动分割技术

注:该文为Automatic Segmentation of Overlapping Cervical Smear Cells based on Local Distinctive Features and Guided Shape Deformation的相关阅读注释和翻译 基于局部特征和引导形状变形的重叠子宫颈细胞自动分割技术 概述 提出了一种基于独特的局部特征和…

SpringBoot:模块探究之spring-boot-dependencies

在 SpringBoot 开发时,我们常常会发现一个现象:即在 pom 文件中,加入一个新的依赖,往往不需要引入相应的版本号(如下代码块所示),就可以正常引入依赖,这其实是因为我们依赖了 spring…

mysql修改字段的长度是否会锁表

结论: 缩小字段长度不能使用inpalce,会锁表。 放大字段长度:取决于变化前和变化后是否跨越255这个长度。以UTF8编码为例,一个字符占3个字节。 字段变化1:varchar(50)--》varchar(80…

嵌入式:ARM多寄存器存取指令详解

文章目录多寄存器存取指令的二进制编码指令汇编格式举例注意事项多寄存器传送指令可以用一条指令将16个可见寄存器(R0~R15)的任意子集合(或全部)存储到存储器或从存储器中读取数据到该寄存器集合中。如:可将寄存器列表…

李书福旗下亿咖通纳斯达克上市:作价38亿美元 路演PPT曝光

雷递网 雷建平 12月21日亿咖通科技控股(简称“ECARX”、“亿咖通科技”)今日与特殊目的公司COVA Acquisition Corp.(简称“COVA”)完成合并,并在美国纳斯达克股票市场(Nasdaq Stock Market LLC)…

[UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容

[UE5]在多个固定摄像机视角间切换,切换多个摄像机,显示不同摄像机所看内容1.写在前面01.作者碎碎念02.结果演示截图演示视频视频教程源码链接03.实现思路实现思路04.同步的博客CSDN掘金博客园知乎2.需要准备的软件3.步骤大神步骤:详细步骤&am…

再写java探针

大家好,我是烤鸭: 以前写过一篇全链路探针实现的文章,最近同事间搞技术分享,再整理一篇。可惜这两年没有继续搞这方面的技术,算是两年前的拓展篇吧。很多技术只放了图,文字就不写了,可以参考…

笔记本加固态小白怎么设置

​最近有用户说电脑硬盘空间不够用了,于是问笔记本加固态小白怎么设置,打算将系统安装在这上面。但由于原先的系统盘有很多重要的数据,该用户就问到有没有什么办法不需要重装,关于笔记本加固态小白操作方法。 工具/原料&#xff…

Redis集群的三种方式详解(附优缺点及原理区别)

Redis提供了三种集群方式,下面我重点详解Redis三种集群方式的原理及优缺点等区别mikechen 目录 Redis主从复制模式Redis哨兵模式Redis集群模式 Redis主从复制模式 1.Redis主从复制定义 主从模式是三种模式中最简单的,主从模式指的是使用一个Redis实例…

Redis入门及Redis基本数据类型的相关命令

1.1、Redis简介 Redis is an open source (BSD licensed), in-memory data structure store, used as a database, cache, and message broker,翻译为: Redis是一个开源的内存中的数据结构存储系统,它可以用作∶数据库、缓存和消息中间件。官网: https:…

2023,AIGC能赚到钱吗?

2022年,AIGC(生成式AI)是当之无愧的网红。AI作画在各大社交平台刷屏,ChatGPT火爆国内外出尽了风头,依靠AI生成语音和表情、动作的数字人也频频露脸。2022年12月,Science杂志发布了2022年度科学十大突破&…

vue-element-template模板

vue-element-template模板 vue-element-admin是一个非常全面的系统,提供了很多现成的方案,我们可以在写项目的时候过来参考,但是也有缺点:不太好进行二次开发,因为要删减的东西太多了。于是就有另外一个子系统vue-elem…

Linux 安装nginx, 搭建nginx文件服务器

在linux安装nginx web 服务器,安装后再修改配置文件,将该主机作为一个文件服务器,最终效果如下图: 安装nginx 安装依赖包 yum install -y gcc pcre-devel zlib-devel openssl openssl-devel (若安装的Redhat7&…

JVM数据结构一览及分析

JVM总体一张图: 整体上来看:类文件从类加载子系统,加载完成之后,主要存放在方法区(JRockit和H9没有方法区,这里指的是HotSpot)。运行时的数据主要是存放在运行时数据区,代码的解释编…

✿✿✿JavaScript --- 常见样式案例

目录 1.下拉框复选框单选框的事件样式 和 禁止喜欢中文字与鼠标右键 2.点击按钮后样式发生变化 3.表格追随鼠标更换颜色 4.点击更换背景 5.点击不同的选择栏,内容展示在一个板块内 6.排他思想,许多按钮,点击谁谁就有样式 7.按钮全选反…

微机原理接口

目录 接口的基本概念 什么是接口?(背会) 接口电路的功能?(背会2019年 ) 接口电路基本结构 什么是端口 (背) 接口的控制原理 数据的传送方式(知道并行串行的特点就可以) 并行传…

校园二手交易WEB

开发工具(eclipse/idea/vscode等): 数据库(sqlite/mysql/sqlserver等): 功能模块(请用文字描述,至少200字): 方达影院系统总共分两个模块,用户模块和管理员模块, 用户模块:登录和注册功能&#…