云原生微服务应用平台 EDAS 2022 年度报告

news2024/11/27 8:37:55

作者:孤戈

最近一年来,随着我们的客户对于云技术的诉求从资源快速交付的服务,转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用,选取了 8 个最具代表性的指标,进行了一次系统性的分析整理和总结,希望可以给当前正在从事软件架构的从业人员一个侧面的视角,来了解一些当下发生在身边的技术现象。

报告内容

JDK 版本分布

在这里插入图片描述

解读

在 JDK 9 之前,JDK 基本上平均每三年出一个版本。但是自从 2017 年 9 月分推出 JDK9 到现在,JDK 开始了疯狂更新的模式,基本上保持了每年两个大版本的节奏。到现在已经发布了十个版本到 JDK 19。其中包括了两个 LTS 版本(JDK11 与 JDK17)。除了版本更新节奏明显加快之外,JDK 也围绕着云原生场景的能力,推出了一系列诸如容器内资源动态感知、无停顿 ZGC、云原生安全等方面的能力。不过从 EDAS 中的数据也可以看出,目前大部分的用户目前主要停留在 JDK8 上,近一年能看得出大家有意识的在往高版本上靠拢。这里友情提醒一下,JDK8 确实是最为经典的一个版本,但是他的推出已经是八年前,官方的支持与更新也已经停止一段时间,建议大家尽快升级到比较新的 LTS 版本。如果确实因为客观原因无法升级的用户,也建议使用阿里巴巴开源的免费的 JDK 版本 DragoonWell ,可获得无差别的兼容能力。

微服务框架分布

在这里插入图片描述

解读

服务框架是微服务体系中最为重要的一个技术组件,在业务开始之初确定选型之后,基本上会伴随整个业务的生命周期,直至业务出现大范围重构。HSF 是阿里巴巴内部使用最为广泛的一个服务框架,整个电商系统都围绕 HSF 进行构建,EDAS 产品化之后,HSF 也跟随商业化节奏输出到了很多的国计民生的业务中。到后来我们重启了 Dubbo 的开源,Dubbo 以优雅的设计,丰富的扩展能力,和性能强劲的通信框架获得了程序员的广泛认可。在后来的云原生席卷之下,有越来越多的客户开始选择了 Spring Cloud + Kubernetes 这一形态作为架构选型上的默认搭配。云原生下另一被认为是未来的微服务架构是 Service Mesh,它以语言无侵入的设计,融合全流程的流量治理能力推出之初就足够惊艳,但是任何技术都不会绝对的完美,近几年微服务框架是 Fast SDK 还是 Mesh 的争论也一直在进行。在目前我们观察到的现象来看,这一理念已经被越来越多的客户接受,但落地场景目前大部分还是存量异构业务架构的通信能力上。从技术成熟度曲线来看,Mesh 即将往成熟期迈进。

云资源形态分布

在这里插入图片描述

解读

在公共云上 EDAS 一共支持虚拟机 ECS、Kubernetes 与 Serverless 三种形态,从数据上看,随着 Kubernetes 成为微服务架构形态下的默认选择,Kubernetes 应用的占比第一年超越ECS,从去年的 45% 攀升至 67%。另外随着大家对于降本诉求显著增加,Serverless 以低资源碎片、免运维全托管、随用随弹的特性,变得越来越流行。阿里云自身的云产品也很多都在以 Serverless 的形态进行重新托管,而微服务以无状态的属性,和 Serverless 的弹性更加的契合。针对存量应用已经是 Kubernetes 集群的场景,EDAS 也支持以原有资源为基础,使用 Serverless 资源承载弹出来的负载的混合资源调度方式。也增强了以应用为维度将微服务和 Serverless 的技术融合,可使原有应用在无需任何改造和迁移的情况下获得 Serverless 的技术红利。

应用实例规格分布

在这里插入图片描述

解读

ECS 应用的规格主要集中在 2C4G、4C8G、8C16G 中,同时大规格的应用也占据了相当大的一部分;同时以 Kubernetes 应用的规格更加多样化,除去有将近 30% 的应用没有设置 Request 或 Limit 的场景,有设置的应用中,主流 Kubernetes 的应用规格均以小规格为主,占比最大的规格为 CPU:MEM = 0.25C1G 的规格。这一数据很能说明云原生的优势,即容器以轻量隔离的方式,支持主机内任意资源的调配,即使在 JVM 默认会占用大块内存的应用形态下,大部分的微服务应用在运行时依然只需要很小的资源就能保证稳定运行。相比于虚拟机的的场景,不仅能提供更加丰富的规格来满足业务的形态,而且还能以更高密的部署形态来提升资源的整体使用率。

JVM 堆内存设置分布

在这里插入图片描述

解读

内存资源区别于其他的基础资源(网络、计算、存储),是一种非压缩的资源。我们给客户提供优化建议时,这是一个最重要的参考指标。在 JVM 中,由于本身堆的设计,叠加容器内 CGroup 对于内存分配的影响,让容器内的内存变得愈发的朴素迷离。在最近的几个 JDK 版本发布过程中,GC 技术是每个版本中最为重要的更新之一,从 G1 到 ZGC 再到 Shenandoah GC,在以前经典且优秀的 GC 设计基础之上,推陈出新。围绕着云原生场景推出了一系列让人振奋的新的能力,如:JEP 351 中定义的 “Uncommit Unused Memory” 让 JVM 可以有机会将未使用的堆归还内存给操作系统。JEP 387 中定义的 “Elastic Metaspace” 让 JVM 可以有机会将未使用的 Metaspace 归还给操作系统。JEP 393/424 中定义了全新的 Foreign Memory/Function/Linker Access API 等等,这些迹象表明即使 JVM 也在新的云原生场景下,正在一步步的完成自己的蜕变,使自己更加云原生,一步步的将云计算的红利向我们释放。

应用启动时长分布

在这里插入图片描述

解读

应用启动时长直接影响整个业务的健康程度,尤其是在发布场景下,由于进程有一个重启切换的过程,应用启动越快,可以更小范围的影响应用的发布带来的流量损耗。近年来,各个云计算的厂商在使用各种不同的技术手段来优化应用冷启动的时长,在不考虑应用自身启动时长的前提下,很多云厂商基本上都突破了秒级启动的场景,现在在进一步攻克毫秒级的冷启动能力。抛开云厂商利用自身的基础设施进行不断的优化之外,我们自己的业务初始化是否能做到快速的冷启动这个话题更值得我们自己去探究。正常来说,启动的时间主要分布在应用的构建,调度与初始化阶段:

  1. 在构建和调度阶段,构建之后需要将更新的镜像层进行重新推送,这也会进一步导致在 POD 调度之后更新所更新镜像层的重新拉取。所以我们要合理利用容器镜像本身的分层机制,做最大程度的缓存是提升的关键
  2. 在初始化阶段,在主容器启动之前,要尽量避免 init-container 执行时间过长;同时在主容器启动拉起 JVM 之后,新版本的 JDK 也提供了 CDS 这样的 Class 预加载技术,如果能合理利用在业务类很大的应用中,可节省大量的冷启动时间。

弹性策略使用情况分布

在这里插入图片描述

解读

从数据上来看,虚拟机的应用类型弹性(8.2% 的应用设置了弹性策略)占比反而比容器形态(仅有 1.37%的应用设置了弹性策略)比较高,不过都处在一个较低的水平。而弹性规则上,60% 的应用都趋向于直接使用基础指标的 CPU 弹性。弹性能力是云计算诞生以来,带来的最大的技术红利。在满足业务平常流量的前提下,用户可以将突发流量所需要用到的资源以弹性的方式对待。站在资源供给的角度来说可分为以下三种:

  1. 第一种是按需新购:即从 0 到 1 的供给形式,在需要使用时再临时将资源买入。
  2. 第二种是资源池化:即先将资源进行池化处理,在需要时分配,不需要时归还。利用各个应用的资源峰值不一样,将资源进行自动的调配。
  3. 第三种是混合调度:即池化和按需新购相结合,在池化的资源依然不能满足最终容量的时候,将需要弹性分配的资源按需购买再进行应用的扩容。

EDAS 一直持续在优化各个场景下的弹性伸缩能力,如:在 ECS 虚拟机类型的应用场景中,从应用视角支持临时购买的方式将资源一步接入到应用中 ;在容器的场景中,不仅提供资源混合调度的能力,而且也提供基于容器服务 ACK 的智能预测 AHPA 机制,让弹性行为先一步于业务高峰触发,保证流量高峰真正到来时的服务质量。在资源高效利用、业务连续稳定这两个场景下,我们会持续耕耘,永不停息。

应用健康度指标分布

在这里插入图片描述

在这里插入图片描述

解读

第一张图的 CPU 利用率是统计了所有应用在一天中的平​均指标,简单理解就是绝大多数的 CPU 利用率为 10% 以下。第二张图和第三张图分别是所有应用的错误率(4xx/5xx/RPC Error等)分布图和响应时间分布图。这个三个数据,如果是在同一个业务中(即有业务的上下游关联关系),它大致可以解读为:在提供一定的资源容量下,系统的稳定性(响应时间 + 响应错误率)情况。这在压测场景下是一个通用的系统容量评估指标。

在这里插入图片描述

如上图所示,资源供给量和系统稳定性,不是一个绝对的线性关系,在性能评估的过程中,我们主要是需要评估两个点:第一个性能前拐点是 P1,在这个点之前,可以简单理解为整个的稳定性吞吐会随着资源的增加而增加。但是到达这个点之后,单纯的资源增加并不能带来更好的系统稳定性,这个时候我们需要去优化的是业务逻辑、业务架构、或者其他的基础设施(如参数调优等)。找到并不断的将这个点往左移,是我们在常规的系统压测时最主要的目标。

第二个性能后拐点是图中的 P2,这个往往被大部分人所忽略,由于绝对意义上的水平伸缩的系统太理想了,我们绝大多数应用尤其是微服务应用依赖错综复杂,单纯优化一处的资源等到我们的业务量真正上来的时候往往是不够的,因为我的依赖方(DB、Redis、下游应用、或其他基础设施容量等)可能无法做到水平扩展来应对无限的容量。

尾言

这一份报告,某些数据能反馈出当下流行的技术趋势,可以结合咱们自己所从事的业务系统有一个行业维度的对照,但是不能一概而论简单的套到我们自己的业务形态中。技术跟随着一定的趋势像大河一样往前涌动。在每一个当下,如何运用技术为我们的业务创造更多更大的价值,是我们技术人员始终应该去追求的目标。EDAS 作为一个云原生应用 PaaS 平台,始终围绕着微服务这种工作负载类型结合云技术,给大家提供以应用为中心的最佳技术实践。让大家在微服务架构在云原生场景下落地的过程中,少走一些弯路,缩短落地路径。

点击此处查看 EDAS 详情

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

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

相关文章

进度条实时显示request下载文件的解决方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,科大讯飞比赛第三名,CCF比赛第四名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Linux -文件打包和解压缩

1、概念 在 Windows 上最常见的不外乎这两种 .zip,.7z 后缀的压缩文件。而在 Linux 上面常见的格式除了以上两种外,还有 .rar,.gz,.xz,.bz2,.tar,.tar.gz,.tar.xz,*.tar…

python--turtle

前言 就随便练练,学习一下turtle库的使用 正文 1.语法学习 import turtle #导入库 turtle.showturtle() #画笔显示箭头 turtle.write("我是大帅逼") #写下字符串 turtle.forward(300) …

拦截器interceptor总结

拦截器一. 概念拦截器和AOP的区别:拦截器和过滤器的区别:二. 入门案例2.1 定义拦截器bean2.2 定义配置类2.3 执行流程2.4 简化配置类到SpringMvcConfig中一. 概念 引入: 消息从浏览器发送到后端,请求会先到达Tocmat服务器&#x…

C语言一维数组篇【下】——每日刷题经验分享

一维数组篇——每日刷题经验分享~😎前言🙌有序序列插入一个整数 😊序列中删除指定数字 😊序列中整数去重小乐乐查找数字筛选法求素数总结撒花💞😎博客昵称:博客小梦~ 😊最喜欢的座右…

【FFMPEG源码分析】从ffplay源码摸清ffmpeg框架(一)

ffplay入口 ffmpeg\fftools\ffplay.c int main(int argc, char **argv) {/*******************start 动态库加载/网络初始化等**************/int flags;VideoState *is;init_dynload();av_log_set_flags(AV_LOG_SKIP_REPEATED);parse_loglevel(argc, argv, options);/* regis…

SSJ-21A AC220V静态【时间继电器】

系列型号: SSJ-11B静态时间继电器;SSJ-21B静态时间继电器 SSJ-21A静态时间继电器;SSJ-22A静态时间继电器 SSJ-22B静态时间继电器SSJ-42B静态时间继电器 SSJ-42A静态时间继电器SSJ-41A静态时间继电器 SSJ-41B静态时间继电器SSJ-32B静态时间继电…

dev-c++解决中文输出乱码问题

之前写c程序老是出现编译输出乱码的问题,就去博客,百度查阅了一番找了找了办法。废话不多说直接上操作。 首先打开dev-c-》工具-》编译选项 在第一行输入 -fexec-charsetgbk//生成gbk格式 -fexec-charsetUFT-8//生成UFT-8格式 也可以输入UFT-8格式&…

获取主机RDP连接凭据

为了避免每次连接服务器都进行身份验证,经常使用RDP的用户可能勾选保存连接凭据,以便进行快速的身份验证。这些凭据都使用数据保护API以加密形式存储在windows的凭据管理器中,路径为“%USERPROFILE%\AppData\Local\Microsoft\Credentials”执…

C语言---宏

专栏:C语言 个人主页:HaiFan. 专栏简介:本专栏主要更新一些C语言的基础知识,也会实现一些小游戏和通讯录,学时管理系统之类的,有兴趣的朋友可以关注一下。 #define预处理预定义符号define#define定义标识符…

云片验证码分析思路

本文仅供学习参考,又不懂的可以联系博主 目标链接: aHR0cHM6Ly93d3cueXVucGlhbi5jb20vcHJvZHVjdC9jYXB0Y2hh接口分析 captcha/get 验证码图片获取接口,GET请求,包含四个参数cb、i、k、captchaId 接口返回,如果是滑动验证码&…

「敏捷建模」敏捷设计理念的纪律

本文概述了敏捷软件开发团队的设计策略。这些策略对于扩展敏捷软件开发以满足现代IT组织的实际需求至关重要。敏捷的设计方法与传统方法截然不同,显然也更有效。重要的是要了解: 敏捷设计实践 敏捷设计理念 整个敏捷生命周期的设计 1.敏捷设计实践 从高…

大数据概述

一、大数据时代 大数据时代 三次信息化浪潮:个人计算机80年-互联网95年-物联网、云计算和大数据(2010年) 发展时间较短,大数据人才缺失大数据人才 培训出来的:Java-》大数据 优点:对于大数据技术的细节会比较清楚 缺点&#xff1…

为什么Redis集群的最大槽数是16384个?

对于客户端请求的key,根据公式HASH_SLOTCRC16(key) mod 16384,计算出映射到哪个分片上,然后Redis会去相应的节点进行操作! 为什么有16384个槽? Redis集群并没有使用一致性hash而是引入了哈希槽的概念。Redis 集群有16…

金仓数据库事务日志与检查点

事务日志与检查点 WAL文件,在金仓数据库中,事务日志文件称为Write Ahead Log(预写式日志,简称WAL)。 WAL存储了数据库系统中所有更改和操作的历史,相当于Oracle的REDO。 WAL机制是在这个写数据的过程中加…

[Android开发基础4] 意图与意图过滤器

文章目录 意图(Intent) 简介 显式意图 隐式意图 意图过滤器(IntentFiler) action data category 意图(Intent) 简介 Intent被称为意图,是程序中各组件进行交互的一种重要方式&#xff0c…

第四章.误差反向传播法—简单层的实现(加法层(AddLayer)+乘法层(MulLayer))

第四章.误差反向传播法 4.1 简单层的实现 本章主要讲述的是加法层(AddLayer)和乘法层(MulLayer)的实现过程。 1.加法层(AddLayer) 从正向传播和反向传播两个层面进行分析。 1).示例: 以zxy为对象,观察它的传播。zxy的导数:∂z/∂x1,∂z/∂…

从CNN到Transformer:基于PyTorch的遥感影像、无人机影像的地物分类、目标检测、语义分割和点云分类

我国高分辨率对地观测系统重大专项已全面启动,高空间、高光谱、高时间分辨率和宽地面覆盖于一体的全球天空地一体化立体对地观测网逐步形成,将成为保障国家安全的基础性和战略性资源。随着小卫星星座的普及,对地观测已具备多次以上的全球覆盖…

DVWA靶场通关和源码分析

文章目录一、Brute Force1.low2、medium3、High4、Impossible二、Command Injection1、Low2、Medium3、High三、CSRF1、Low2、Medium3、High4、Impossible四、File Inclusion1、Low2、Medium3、High五、File Upload1、Low2、Medium3、High4、Impossible六、 SQL注入1、Low2、Me…

关于catkin的一些笔记以及资料连接

大佬们早就不用catkin_make编译节点了,快来瞅瞅他们使用的啥 https://zhuanlan.zhihu.com/p/399753815 https://catkin-tools.readthedocs.io/en/latest/index.html# ROS 编译系统 catkin 详解 https://www.jianshu.com/p/7fccfe18d7d3 ROS学习笔记(六…