百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

您应该在2020年选择哪种Java微服务框架?

ccwgpt 2024-10-30 01:38 36 浏览 0 评论

探索Micronaut和Quarkus与Spring Boot的关系-它们有多好?

到2020年,Java仍然是构建Web应用程序的最流行的编程语言之一,尽管它必须面对来自Go,Python和TypeScript等新型语言的激烈竞争。

在Java世界内部,Spring框架已成为微服务开发的事实上的标准,通过诸如Spring Boot和Spring Data之类的库,该框架易于使用,并且可以进行高效且大部分情况下轻松进行开发。

但是,近年来,已经引入了新的框架,声称可以缩短Java应用程序的启动时间并减少其内存占用。 由于我目前正在使用Java开发基于微服务的大型应用程序,因此我想检查哪种Java框架最适合这种架构。

因此,我的主要重点是易于开发以及生成的微服务的资源管理。

关于资源管理,Spring(实际上是Java平台的大多数)从未有过最好的声誉,尤其是在涉及单个流程所需的开销方面。 在应用服务器时代,这并不是主要的问题,因为实例数量很少。 但是,随着微服务架构及其大量小型实例的兴起,这已成为越来越多的问题-或正如Christian Lusardi最近所说的那样:

"我发现在Spring Boot上运行的基本Java应用程序至少需要1GB的RAM才能运行,开发中间件应用程序没关系,但是在微服务架构中,这非常糟糕!"

候选人

Spring

响应于早期Java Enterprise的复杂性,Spring于2003年应运而生。 Spring的核心是依赖注入(DI)和面向方面的编程(AOP)框架,后来演变为易于使用的Web应用程序框架。 通过其广泛的文档,广泛的使用和无数的库,Spring使开发人员可以有效地创建和维护应用程序,并提供平坦的学习曲线。

Spring在运行时使用反射执行DI。 因此,当启动spring应用程序时,将在类路径中扫描带注释的类。 基于此,实例化并链接具体对象。

尽管这种方法非常灵活且对开发人员友好,但它会使启动速度变慢,并且非常消耗内存。 此外,由于该机制不支持反射,因此很难迁移到GraalVM。

Micronaut

Micronaut是现代的全栈微服务框架,由Grails框架的创建者于2018年引入。

它提供了构建功能全面的微服务应用程序所需的所有工具。 同时,它旨在提供快速启动并减少内存占用。 通过使用Java注释处理器执行DI,创建面向方面的代理并在编译时(而不是运行时)配置应用程序,可以实现此目标。

Micronaut中的许多API均受Spring和Grails的启发。 这是设计使然,有助于快速吸引新开发人员。 因此,Micronaut提供了诸如Micronaut HTTP,数据,安全性和各种其他技术的连接器之类的模块。 但是,这些库的成熟度仍落后于Spring的同类库。

Quarkus

Quarkus是Red Hat在2019年推出的Kubernetes原生Java框架。它基于MicroProfile,Vert.x,Netty和Hibernate等标准构建。

Quarkus的目标是通过在容器编排平台中允许更快的启动,较低的内存消耗和近乎即时的扩展来使Java成为Kubernetes中的领先平台。 Quarkus通过使用自定义的Maven插件在编译时而不是在构建时执行尽可能多的工作来达到此目的(在Quarkus中,这也称为编译时启动)。

Quarkus正在使用大多数现有的标准技术,但可以扩展。 但是,由于该项目仅在一年前才开始,所以这些扩展的成熟度和兼容性并不总是很清楚。 随着平台的发展,这种情况将来可能会改变。

Helidon MicroProfile

MicroProfile项目始于2016年,当时尚不清楚Oracle是否以及如何继续在Java Enterprise上工作。

与其前身JEE一样,MicroProfile是可以由各种供应商实施的规范。

此后已经提出了多种这样的实现方式,最著名的是Payara Micro和Helidon MP。 Payara是从GlassFish派生的Jakarte EE服务器,而Payara Micro是其MicroProfile实现。 Helidon是Oracle在2018年启动的运行时,提供了自己的MicroProfile规范实现。

由于它们是从JEE衍生而来的,因此MicroProfile规范已经很成熟并且有据可查。 但是,缺少用于现代技术的连接器或替代诸如Spring Data和Spring Security之类的库的方法。

此外,由于同时开始了Jakarta EE(也在Eclipse Foundation中)的开发,MicroProfile的未来尚不清楚。 因此,似乎两个项目将来可能会合并或至少紧密协调。

比较框架

为了比较上述框架,我使用了每个框架都实现了一个简单的应用程序。 该示例应用程序包括一个用于创建,读取,更新和删除对象的REST接口,以及一个将这些对象存储到表中的关系数据库连接器。

如果框架支持访问数据库的不同方法,那么我将尝试为不同的变体实现示例项目。 然后,我比较了这些应用程序的性能。

我使用OpenJDK Docker映像运行了该应用程序。 如果框架支持生成本机GraalVM映像,则我还比较了它们的性能。 另外,请查看我的文章"使用R2DBC,Micronaut和GraalVM进行响应式数据库访问",以获取有关GraalVM的更多信息。 所有这些应用程序的源代码都可以在GitHub上找到。

我在三个关键阶段比较了这些应用程序的性能:

· 实施示例应用程序有多容易? 要实现这些框架,我必须检查文档以及在诸如Stack Overflow之类的平台上搜索信息。

· 编译应用程序需要多长时间? 我已经测量了执行干净构建所需的时间,包括生成Docker映像的时间。 对于GraalVM,这包括生成本机映像的时间。

· 启动应用程序需要多长时间? 在这里,我测量了从运行docker到应用正确响应第一个HTTP请求之间的时间。 另外,我还比较了启动后测量的空闲应用程序的内存占用量。

· 负载:应用程序可以查看多少个请求? 我使用JMeter进行负载测试,并对应用程序进行了测试,其中25%的请求执行数据库写入,而75%的请求仅执行数据库读取。 然后,我再次根据其峰值性能来测量应用程序的内存占用量。

我在具有四个Intel Haswell CPU和15 GB内存且运行Ubuntu 19.01的Google Cloud Platform虚拟机上执行了所有测试。 所有测量均已重复多次,以避免干扰因素。 您可以在GitHub上找到使用的脚本以及原始数据。

结果

易于开发

由于我以前只有使用Spring Boot的知识,所以这是一个不公平的比较。 但是,在检查文档以及可用的信息和示例时,Spring是迄今为止最简单的框架。

Micronaut的文档做得很好,并且具有与Spring和Grail类似的API。 因此,Spring开发人员很容易开始使用它。

我认为,Quarkus的学习曲线较为陡峭,因为与Spring和Micronaut相比,库和API的成熟度较低。 我特别缺少简单的数据库访问权限。

但是,在我看来,Helidon显然是最后一次,因为我为使应用程序运行付出了很多努力。

汇编

对于所有框架,使用OpenJDK时的编译时间都非常相似,并且在6.98秒(使用JDBC的Spring)和10.7秒(Quarkus)之间。

但是,原始GraalVM映像的生成非常耗时,并且花费了231.2秒(使用JDBC的Micronaut)和351.7秒(使用JPA的Micronaut)之间。 这使得本机映像对于开发基本上毫无用处,因为等待四分钟来编译一个简单的应用程序实在太多了。

启动

使用Spring Data的Spring Boot应用程序平均花了8.16秒来启动。 删除JPA和Spring Data可以将其减少到5.8秒。

在这里,Micronaut(使用JPA的时间为5.08秒,使用JDBC的时间为3.8秒)和Quarkus(5.7秒)保持了缩短启动时间的承诺。

只有Helidon MP甚至比Spring慢-平均为8.27秒。

但是,真正的赢家是GraalVM。 本机映像的启动时间在1.39秒(Quarkus)和1.46秒(使用JDBC的Micronaut)之间,比OpenJDK实现要快得多。

引导后直接使用的内存使用情况非常相似。 Spring分配了420 MB内存(使用Spring Data)和261 MB(使用JDBC)。

使用JPA时Micronaut的内存为262 MB,使用JDBC时为178 MB。

197 MB的Quarkus表现更好。 Helidon MP具有414 MB,与Spring Boot类似。

同样在这里,仅使用7 MB(Quarkus)和27 MB(Micronaut使用JPA)的内存,本地GraalVM映像就大大优于OpenJDK实现。

峰值性能

在负载下,Spring Boot表现出色,能够每秒处理342(使用Spring Data)和216(JDBC)请求(r / s),并使用581 MB(Spring Data)和484 MB(JDBC)内存。 Helidon显然是最后一个,仅能以175 r / s的速度分配超过1 GB的内存。

其他框架能够在400 r / s(Quarkus作为本机映像运行)和197 r / s(OpenJDK上的Quarkus)之间提供服务。 各种Micronaut实现介于两者之间,与JDBC相比,JPA和本机映像比OpenJDK略有优势。

在内存使用方面,OpenJDK上的Quarkus表现出色,仅消耗255 MB内存。 这甚至比同一个应用程序作为本机映像运行要少得多,该应用程序平均花费368 MB的内存。

但是,Micronaut却非常浪费。 在OpenJDK中运行的JPA实现平均使用880 MB,比Spring的内存使用量高50%以上。 但是,使用JDBC和本机映像有助于Micronaut将其内存占用空间减少到367.8 MB。

结论

与Spring和MicroProfile之类的现有框架相比,新的Java框架Micronaut和Quarkus保证了更快的启动时间和更低的内存占用。

他们的确兑现了这一诺言-但只有在闲置或负载很小的情况下才可以。 在这里,它们的性能优于Spring,特别是将它们与本地GraalVM图像结合使用时。 但是,在负载下,它们没有提供太多优势,即使当作为本机图像运行时也是如此。

到目前为止,尽管Spring仍然提供最佳的开发人员体验,但我认为它仍然是最适合微服务应用程序的Java框架-即使考虑到启动时的性能也很差。

让我感到惊讶的是使用Hibernate / JPA / Spring Data的巨额成本。 即使对于这个非常简单的应用程序,在内存(以及r / s)方面的开销也是巨大的。 在这里,我特别喜欢Micronaut Data的解决方案,该解决方案无需JPA即可自动生成存储库代码。 这确实可以添加到Spring Data中。

事实证明,原始GraalVM映像在启动时具有令人难以置信的快速性和内存效率,但是在负载下,它们并没有提供明显的优势。 由于本机GraalVM的生成会带来一些额外的困难,并且编译时间会急剧增加,因此该技术目前仅在需要快速启动的情况下才有用-例如,在无服务器架构中或非常快速地扩展。 在所有其他情况下,与负载下的类似性能相比,成本仍然太高。


(本文翻译自Matthias Graf的文章《Which Java Microservice Framework Should You Choose in 2020?》,参考:https://medium.com/better-programming/which-java-microservice-framework-should-you-choose-in-2020-4e306a478e58)

相关推荐

谷歌正在为Play商店进行Material Design改造

谷歌最近一直忙于在其应用程序中完成MaterialDesign风格的改造,而Play商店似乎是接下来的一个。9to5Google网站报道,有用户在Play商店的最新版本中发现了新界面,暗示该应用和网...

企业网站免费搭建,定制化建站CMS系统

科腾软件企业网站CMS管理系统已完成开发工作,首次开源(全部源码)发布。开发工具:VisualStudioEnterprise2022数据库:SQLite(零配置,跨平台,嵌入式)开发...

您需要的 11 个免费 Chrome 扩展程序

来源:SEO_SEM营销顾问大师Chrome扩展程序是SEO的无名英雄,他们在幕后默默工作,使您的策略脱颖而出并提高您的努力效率。从竞争对手研究到审核您的网站,速度比您说“元描述”还快,这些小工具发...

户外便携设备抗干扰困境如何破局?CMS-160925-078S-67给出答案

  在户外复杂的电磁环境中,便携式设备中的扬声器需具备出色抗干扰能力,CUID的CMS-160925-078S-67在这方面表现突出。  从其结构设计来看,矩形框架虽主要为适配紧凑空...

一个基于NetCore开发的前后端分离CMS系统

今天给大家推荐一个开源的前后端分离架构的CMS建站系统。项目简介这是一个基于.Net3构建的简单、跨平台、模块化建站系统。系统业务简单、代码清晰、层级分明、全新架构便于二次扩展开发。支持多种数据库,...

本地Docker部署ZFile网盘打造个人云存储

前言本文主要介绍如何在LinuxUbuntu系统使用Docker本地部署ZFile文件管理系统,并结合cpolar内网穿透工具实现远程访问本地服务器上的ZFile传输与备份文件,轻松搭建个人网盘,无...

pcfcms企业建站系统 免费+开源的企业内容管理系统

项目介绍pcfcms是基于TP6.0框架为核心开发的免费+开源的企业内容管理系统,专注企业建站用户需求提供海量各行业模板,降低中小企业网站建设、网络营销成本,致力于打造用户舒适的建站体验。演示站...

【推荐】一个高颜值且功能强大的 Vue3 后台管理系统框架

如果您对源码&技术感兴趣,请点赞+收藏+转发+关注,大家的支持是我分享最大的动力!!!项目介绍SnowAdmin是一款基于Vue3、TypeScript、Vite5、Pinia、Arco-Desi...

java开源cms管理系统框架PublicCMS后台管理系统

一款使用Java语言开发的CMS,提供文章发布,图片展示,文件下载,用户权限、站点模块,内容管理、分类等功能。可免费用于商业用途maven工程数据库脚本在工程中database文件夹下代码结构:效果...

一定要大量读书:当我问Deepseek,它给出的高效阅读方法厉害了!

一年一度的世界读书日,总该写点什么。于是,我去问Deepseek给我推荐人生破局必读的10本书,结果它给了我回复,竟然10本推荐的书籍里,我都曾经浏览过,同时还给出破局关键。而说浏览过,不是读过,是因...

《搜神札记》:不应磨灭的惊奇(小说《搜神记》)

□黄勃志怪传说的书写一直是文人墨客的后花园,晚近尤盛,从张岱到袁枚到纪昀,收集那些或阴森或吊诡的行状故事,遂成一类,到民国年间,周作人挟此遗传,捋袖子拿希腊神话动刀,乃兄鲁迅不甘其后,《故事新编》虎...

《如何构建金字塔》之第三章总结(构建金字塔结构的方法有)

“没有什么比一套好理论更有用了。”——库尔特.勒温这篇读后感依然引用了这句库尔特.勒温名言,这句话也是我读芭芭拉.明托这本书的初衷。今天就“如何构建金字塔”,我来谈谈我的读后心得。我热爱写作,但是写...

《助人技术》第一章助人引论内容框架

第一章内容基本呈现如何成为助人者(心理咨询师)以及一些相关基础知识,对于进入这个行业有兴趣以及希望通过心理咨询寻求帮助但存有疑虑的当事人,都值得一读。心理咨询的三个阶段(不是说严格的三个阶段,而是广义...

AI助手重构读后感写作流程:从提纲到完整性思考的转换

大家好!你有没有遇到过读完一本书,想要写读后感,却不知道从何下手的情况呢?今天我们要来探讨一下如何利用稿见AI助手来重构读后感写作流程,从提纲到完整性思考的转换。让我们一起来看看这个全新而又实用的方法...

图解用思维导图做读书笔记技巧(图解用思维导图做读书笔记技巧视频)

做阅读笔记非常有利于读后进行有效的深入思考,而思维导图这一强大的工具其最大的特点就是架构清晰,在阅读过程中对文章的分析、总结、分类起着很大的辅助作用。思维导图读书笔记步骤:1、阅读大纲。首先要快速浏览...

取消回复欢迎 发表评论: