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

本文涉及的产品
注册配置 MSE Nacos/ZooKeeper,118元/月
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
云原生网关 MSE Higress,422元/月
简介: 最近一年来,随着我们的客户对于云技术的诉求从资源快速交付的服务,转变为对资源精益运用的服务。EDAS 团队结合公共云上所服务的企业类客户的几万个应用,选取了 8 个最具代表性的指标,进行了一次系统性的分析整理和总结,希望可以给当前正在从事软件架构的从业人员一个侧面的视角,来了解一些当下发生在身边的技术现象。

报告内容


JDK 版本分布

image.png


解读

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


微服务框架分布


image.png


解读


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


云资源形态分布


image.png


解读

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


应用实例规格分布


image.png


解读

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


JVM 堆内存设置分布


image.png


解读

内存资源区别于其他的基础资源(网络、计算、存储),是一种非压缩的资源。我们给客户提供优化建议时,这是一个最重要的参考指标。在 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 也在新的云原生场景下,正在一步步的完成自己的蜕变,使自己更加云原生,一步步的将云计算的红利向我们释放。


应用启动时长分布


image.png


解读

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


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


弹性策略使用情况分布


image.png


解读

从数据上来看,虚拟机的应用类型弹性(8.2% 的应用设置了弹性策略)占比反而比容器形态(仅有 1.37%的应用设置了弹性策略)比较高,不过都处在一个较低的水平。而弹性规则上,60% 的应用都趋向于直接使用基础指标的 CPU 弹性。


弹性能力是云计算诞生以来,带来的最大的技术红利。在满足业务平常流量的前提下,用户可以将突发流量所需要用到的资源以弹性的方式对待。站在资源供给的角度来说可分为以下三种:


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

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


应用健康度指标分布


image.png


image.png


解读

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


image.png


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


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


尾言


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


相关实践学习
使用DAS实现数据库自动SQL优化
本场景介绍如何使用DAS实现数据库自动SQL优化。
SpringMVC框架入门
Spring MVC属于SpringFrameWork的后续产品,已经融合在Spring Web Flow里面。Spring 框架提供了构建 Web 应用程序的全功能 MVC 模块。在使用Spring进行WEB开发时,可以选择使用Spring的SpringMVC框架或集成其他MVC开发框架,如Struts2等。 相关的阿里云产品企业级分布式应用服务 EDAS:企业级分布式应用服务 EDAS(Enterprise Distributed Application Service)是一个应用托管和微服务管理的 PaaS 平台,提供应用开发、部署、监控、运维等全栈式解决方案,同时支持 Spring Cloud、Apache Dubbo(以下简称 Dubbo )等微服务运行环境,助力您的各类应用轻松上云。产品详情: https://www.aliyun.com/product/edas 
相关文章
|
1天前
|
运维 Cloud Native Devops
云原生技术:构建弹性、高效和可扩展的现代应用
在当今数字化时代,企业面临着日益复杂的市场需求和技术挑战。为了满足这些需求,许多企业转向了云原生技术。云原生是一种以云计算为基础的架构和方法论,旨在构建弹性、高效和可扩展的现代应用程序。本文将深入探讨云原生技术的核心概念、优势以及实施过程中的关键步骤,帮助读者更好地理解和应用这一前沿技术。
13 6
|
1天前
|
Cloud Native Devops 持续交付
云原生技术:构建现代应用的新范式##
在当今数字化时代,企业正面临着前所未有的挑战和机遇。随着云计算技术的不断发展,越来越多的企业开始采用云原生架构来构建和部署应用程序。本文将探讨云原生技术的关键概念、优势以及如何利用这些技术来推动业务创新和增长。我们将从微服务架构、容器化、持续集成/持续部署(CI/CD)等方面深入分析云原生技术的核心原理,并分享一些成功案例,帮助读者更好地理解和应用云原生技术。 ##
|
2天前
|
运维 Cloud Native API
探索云原生技术:构建现代应用的新范式
在当今这个数字化时代,云原生技术正迅速成为推动企业数字化转型的关键力量。它不仅重新定义了应用的构建、部署和运行方式,还为企业带来了前所未有的灵活性、可扩展性和弹性。本文旨在深入探讨云原生技术的精髓,通过解析其核心概念、关键技术和实践案例,揭示云原生如何引领我们进入一个更加高效、智能的应用开发新时代。不同于传统的技术综述,本文将以通俗易懂的语言,结合条理清晰的逻辑结构,带领读者一同领略云原生技术的奥秘与魅力。
|
2天前
|
Cloud Native 持续交付 云计算
探索云原生架构:构建现代应用的新范式
在当今数字化浪潮中,云原生架构以其敏捷性、弹性和可扩展性成为企业技术转型的核心驱动力。本文将引领读者深入理解云原生的概念,剖析其关键技术组件——微服务、容器化、DevOps实践及持续交付/持续部署流程,并揭示这些技术如何相互协作,共同构建高效、可靠且易于管理的现代软件系统。通过对云原生架构的全面解读,我们旨在为开发者、架构师乃至企业决策者提供有价值的见解与指导,助力其在快速变化的市场环境中保持竞争力。
|
1天前
|
运维 Cloud Native 云计算
云原生技术在现代企业中的应用与挑战
随着云计算技术的飞速发展,云原生(Cloud Native)技术逐渐成为现代企业实现数字化转型的重要手段。本文将深入探讨云原生技术的核心理念、主要特点及其在实际业务中的应用。通过分析云原生技术在提高开发效率、降低运维成本和增强系统弹性方面的优势,揭示企业在采用云原生技术过程中面临的挑战及应对策略。我们将从实际案例出发,展示云原生技术如何帮助企业在激烈的市场竞争中脱颖而出,并展望未来的发展趋势。希望通过本文的阐述,让读者对云原生技术有一个全面而深入的理解,助力其在业务场景中落地生根。
6 0
|
1天前
|
Cloud Native Devops 持续交付
探秘云原生架构:构建高效、灵活的现代应用
在当今数字化时代,企业面临着日益复杂的技术挑战和快速变化的业务需求。为了适应这种环境,云原生架构应运而生。本文将带您深入了解云原生的核心概念、关键技术和应用案例,揭示其在提升业务效率、降低运维成本方面的独特优势。通过阅读本文,您将获得关于如何利用云原生技术构建现代化应用的宝贵见解。
8 0
|
1天前
|
运维 Cloud Native 持续交付
云原生技术:构建现代应用的未来
在当今数字化时代,技术的快速迭代和业务需求的不断变化要求企业具备更高的灵活性和响应速度。云原生技术以其独特的优势,如微服务架构、持续集成/持续部署(CI/CD)、容器化等,成为现代企业实现敏捷开发和运维的重要手段。本文将深入探讨云原生技术的核心概念、关键技术以及其在不同应用场景中的优势和挑战。
7 0
|
8天前
|
运维 Cloud Native 安全
云原生技术:重塑现代IT架构的引擎
在当今数字化时代,企业正面临着前所未有的挑战与机遇。随着云计算技术的不断发展,云原生技术作为其核心驱动力之一,正在彻底改变企业的IT架构和运营模式。本文将深入探讨云原生技术的内涵、特点及其对企业数字化转型的影响,揭示其在现代IT架构中的核心地位和作用。同时,我们还将分析云原生技术面临的安全挑战,并展望未来的发展趋势,为企业在云原生领域的实践提供有益的参考。
|
5天前
|
监控 Cloud Native Devops
云原生时代的微服务架构:挑战与机遇
在云计算迅速发展的背景下,云原生技术日益受到关注,而微服务架构作为其核心组件之一,正逐步成为构建现代应用的首选方案。本文探讨了微服务架构在云原生时代所面临的挑战与机遇,分析了其灵活性、可扩展性和容错性的优势,以及服务间复杂交互、数据一致性、监控管理和安全性等挑战,并指出了与DevOps文化结合、容器化技术、云服务集成及业务敏捷性等方面的机遇,强调了其在软件开发中的重要角色。
|
4天前
|
设计模式 Cloud Native API
云原生时代的微服务架构实践
【9月更文挑战第23天】在这篇文章中,我们将深入探讨云原生环境下的微服务架构设计原则、优势以及实施策略。文章不仅涉及理论概念,还结合具体的代码示例,帮助读者理解如何在实际项目中应用微服务架构。通过阅读本文,你将获得构建、部署和管理微服务的实用知识,为你的云原生项目奠定坚实的基础。