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

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

作者:孤戈


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


报告内容


JDK 版本分布


1.png


解读


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


微服务框架分布


2.png


解读


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


云资源形态分布


3.png


解读


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


应用实例规格分布


4.png


解读


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


JVM 堆内存设置分布


5.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 也在新的云原生场景下,正在一步步的完成自己的蜕变,使自己更加云原生,一步步的将云计算的红利向我们释放。


应用启动时长分布


6.png


解读


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


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


弹性策略使用情况分布


7.png


解读


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


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


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


应用健康度指标分布


8.png9.png


解读


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


10.png


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


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


尾言


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


点击此处查看 EDAS 详情

相关实践学习
使用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 
相关文章
|
8天前
|
Cloud Native 安全 物联网
云原生技术在现代软件开发中的应用与挑战####
云原生,这一词汇如同一股强劲的科技风暴,席卷了整个信息技术领域,它不仅重塑了软件的开发模式,还引领了一场关于效率、可扩展性和弹性的深刻变革。本文旨在深入探讨云原生技术的核心概念,分析其在现代软件开发中的广泛应用,并直面伴随其发展而来的挑战,为读者勾勒出一幅既充满机遇又不乏考验的云原生技术图景。 ####
|
2天前
|
敏捷开发 Cloud Native 持续交付
云原生技术在现代企业中的应用与实践
【10月更文挑战第23天】本文将深入探讨云原生技术在现代企业中的广泛应用,并结合具体案例分析其对企业数字化转型的推动作用。我们将从云原生技术的基本原理出发,逐步揭示其在提高业务敏捷性、降低成本和增强系统可靠性方面的优势。同时,文章还将分享一系列成功实施云原生技术的企业案例,为读者提供实践中的参考和启示。最后,我们将讨论云原生技术面临的挑战及未来的发展趋势,为企业在这一领域的进一步探索提供指导。
|
3天前
|
Cloud Native 持续交付 云计算
云原生技术深度探索:构建现代化应用的基石####
【10月更文挑战第21天】 本文将深入探讨云原生技术的核心概念、关键技术及其在现代软件开发中的应用。我们将从容器化、微服务架构、持续集成/持续部署(CI/CD)、无服务器架构等关键方面展开,揭示这些技术如何共同作用,帮助企业实现高效、弹性且易于维护的应用部署与管理。通过实例分析,展现云原生技术在实际项目中的显著优势,为读者提供一套全面理解并应用云原生技术的指南。 ####
16 2
|
9天前
|
运维 Cloud Native 持续交付
云原生技术在现代IT架构中的深度应用与挑战####
【10月更文挑战第17天】 本文深入剖析了云原生技术的精髓,探讨其在现代IT架构转型中的核心作用与面临的挑战。云原生不仅是一种技术实现,更是企业数字化转型的重要推手,通过容器化、微服务、持续集成/持续部署(CI/CD)等关键要素,重塑软件开发、部署与运维模式。文章首先概述了云原生的基本原则与核心组件,随后分析了其如何促进企业敏捷性、可扩展性和资源利用率的提升,同时也指出了在安全性、复杂性管理及人才技能匹配等方面存在的挑战,并提出了相应的对策建议。 ####
34 6
|
10天前
|
Cloud Native Go API
Go语言在微服务架构中的创新应用与实践
本文深入探讨了Go语言在构建高效、可扩展的微服务架构中的应用。Go语言以其轻量级协程(goroutine)和强大的并发处理能力,成为微服务开发的首选语言之一。通过实际案例分析,本文展示了如何利用Go语言的特性优化微服务的设计与实现,提高系统的响应速度和稳定性。文章还讨论了Go语言在微服务生态中的角色,以及面临的挑战和未来发展趋势。
|
10天前
|
运维 监控 Cloud Native
云原生技术在现代企业中的应用与挑战####
【10月更文挑战第15天】 本文深入探讨了云原生技术如何重塑企业的IT架构,并分析了其带来的机遇与面临的挑战。通过案例分析,揭示了云原生技术在提升业务敏捷性、降低运维成本方面的显著优势,同时也指出了在安全性、多云管理等方面的潜在难题,为企业决策者提供了有价值的参考。 ####
14 3
|
11天前
|
运维 Go 开发者
Go语言在微服务架构中的应用与优势
本文深入探讨了Go语言在构建微服务架构中的独特优势和实际应用。通过分析Go语言的核心特性,如简洁的语法、高效的并发处理能力以及强大的标准库支持,我们揭示了为何Go成为开发高性能微服务的首选语言。文章还详细介绍了Go语言在微服务架构中的几个关键应用场景,包括服务间通信、容器化部署和自动化运维等,旨在为读者提供实用的技术指导和启发。
|
15天前
|
负载均衡 Go API
探索Go语言在微服务架构中的应用与优势
在这篇技术性文章中,我们将深入探讨Go语言(又称为Golang)在构建微服务架构时的独特优势。文章将通过对比分析Go语言与其他主流编程语言,展示Go在并发处理、性能优化、以及开发效率上的优势。同时,我们将通过一个实际的微服务案例,详细说明如何利用Go语言构建高效、可扩展的微服务系统。
|
14天前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
14天前
|
人工智能 运维 Cloud Native
云原生应用开发平台 CAP(Cloud Application Platform)应用心得
云原生应用开发平台 CAP(Cloud Application Platform)是阿里云提供的一站式应用开发及应用生命周期管理平台。
19 1

相关产品

  • 企业级分布式应用服务