InfoQ Java趋势发展报告(2020年9月)

本文要点

  • 云部署和容器化是IT行业的大趋势,Java也不例外。
  • GraalVM和静态编译是加速云计算发展的关键构建模块。Leyden计划可能是这一趋势的一个新方向,但还处在早期阶段。
  • Quarkus吸引了很多关注,并很快进入早期采用者阶段。在某种程度上,它描绘了行业的其他趋势,并将它们打包成一个更容易使用的版本,满足应用程序的各种场景。
  • Java 11的生产部署已经达到了约20%,Java 8占据了市场的其余份额,但没有大规模部署非LTS版本。

这篇文章总结了InfoQ编辑团队如何看待Java技术的采用情况和新兴趋势。我们主要关注Java及其相关语言,如Kotlin和Scala、Java虚拟机(JVM)以及基于Java的框架和实用程序。我们将讨论Java的发展趋势,比如Java新版本的采用,以及相关框架(如Quarkus和MicroProfile等)的发展。

本报告有两个主要目的:

  • 协助技术主管作出中长期技术决策。
  • 帮助个人开发者将宝贵的时间和资源投入到有价值的学习和技能发展中去。

这是我们发布的第二份Java趋势报告。从2006年InfoQ发布趋势报告以来,这个话题已经得到了大量的报道,我们已经在内部跟踪Java和JVM发展趋势很多年了。你可以在这里找到2019年的报告。

为了帮助InfoQ(和QCon)把握当前和未来的趋势,我们使用了Geoffrey Moore在他的《跨越鸿沟》一书中所倡导的技术采用模型。

我们试着找出符合摩尔所谓的早期市场的想法。早期市场“用户由技术爱好者和有远见的人组成,他们想要抓住机会或者解决迫在眉睫的问题”。

我们能够观察到的是已经跨越到主流采用的市场。当然,这有点难以定义,而且局部市场的差异确实存在。在某个行业或某个局部市场,一项技术可能被放在采用曲线上的一个点上,而在另一个地方则被放置在一个完全不同的点上。

例如,那些积极推动无服务器和FaaS技术的公司很可能在探索和采用一些技术方面走得更远,比如Java静态编译和其他承诺可以缩短启动时间和减少占用空间的技术。

从去年到现在,最值得关注的一些变化包括Oracle Java二进制文件的使用量急剧下降。这也许是意料之中的——去年Oracle在支持和发布模型方面所做出的变化还没有被反映到趋势报告中,不过我们有整整一年的时间来评估它的影响。

可以看到,市场并没有选择甲骨文每6个月的升级发布周期,而是固定在了LTS版本——也就是Java 8和Java 11。由于Oracle在发布后的6个月内不提供免费的Java二进制文件,市场越来越多地转向非Oracle二进制文件提供商——AdoptOpenJDK是主要受益者,其次是Azul和Amazon。

另一个引人注目的行业大趋势是:几乎所有的东西都以更快的速度进入云计算领域。这方面的势头一直很猛,而现在更加明显了。新冠疫情对这个行业的影响无疑是其中的一个因素。

这不仅可以从AWS和其他云供应商采用量的增加看出来,也可以从容器化工作负载的崛起和希望使用资源占用更少的服务的愿望中看出来。Quarkus、Microaut和Spring Boot等框架的流行程度也体现出了这一点。它们都是基于云计算的,对Kubernetes很友好,而且都越来越流行,尽管还没有出现一个明确的市场领导者。

下面是我们内部使用的2019年趋势图,2020年的在文章顶部。

参与本次讨论的人员包括:

  • Ben Evans——InfoQ Java首席编辑
  • Uday Tatiraju
  • Erik Costlow
  • Mike Redlich

下面是几位InfoQ Java编辑和Java Champion之间的一个讨论总结,它为我们在趋势图上对某些技术的推荐定位提供了更多的背景参考。

GraalVM

Justin Lee(Red Hat首席工程师):

我认为直接使用GraalVM对于大多数企业来说门槛相当高,而通过Quarkus或Micronaut来使用GraalVM可能是一条比较好的路径,因为它们处理掉了很多细节问题。

Johan Vos(Gluon联合创始人):

我们利用GraalVM原生镜像创建原生移动和嵌入式App。

Java开发人员编写100%的Java和JavaFX代码,所有代码、依赖项、本地库、资源都被编译、链接、打包成一个IPA或APK,可以上传到应用商店(或用于私有网络)。

在移动设备上,GraalVM原生镜像有一个巨大的优势,因为它允许在iOS上使用Java。此外,对于移动设备来说,启动时间非常重要,我看到它们的启动时间是非常惊人的。

Roy van Rijn (OpenValue总监):

我们已经在生产环境中试验过GraalVM(作为原生Docker镜像)。对于一个简单的CRUD Micronaut服务来说,它运行得非常好。对于较大的服务(使用Spring Boot和MQ/消息传递),大约在一年前我们就遇到了问题。不过,这方面的创新进展很快。

随着Spring GraalVM Native新版本的发布,我们向backlog中添加试验性的东西,进行概念验证。我们目前的设想是将所有服务都转换为GraalVM原生镜像。速度(尤其是云端启动时间)和内存使用将是我们的一大优势。

Quarkus

Emmanuel Bernard(Red Hat杰出工程师):

我们看到的主要应用是Quarkus微服务(不是闹着玩的那种)和一些作为服务的函数。

我看到的主要是新开发的服务、从其他微服务进行移植或者一些企业决定重新选择他们的应用程序开发技术栈(包括在必要时放弃Java)。
我们也看到人们从遗留应用程序中拿出一些东西,并加入了一些新东西,而Quarkus显著掩盖了GraalVM原生镜像的短板。

Erik Costlow (InfoQ Java编辑):

Quarkus选取了Jakarta EE最好的部分、GraalVM最好Jakarta部分以及云最好的部分,并将它们组合在一起。这个框架可以快速重载,自动创建无服务器容器,并通过插件生态系统连接到其他系统。最重要的是,它的文档对每个插件进行了清晰的描述,让新项目和现有项目的使用更加容易。

我最喜欢的一点是,Quarkus提供了一个坚实的基础,让开发人员能够专注于自己的代码或应用程序,而不是把时间花在其他工作上,比如如何与资源交互。开发人员有权利但没有义务深入研究这些东西。

Java 11

Uday Tatiraju(Oracle技术主管):

在过去的8个月里,我和我的团队利用JDK 11和JPMS重新设计和开发了整个搜索平台。当然,在使用JPMS时,我们需要解决在第三方库中存在的一些问题,比如拆分打包、反射、不安全代码。

JDK 11有很多优点,它帮我们减少了对第三方库的依赖。例如,JDK中的HTTP客户端库提供了丰富的特性,消除了我们对Apache HTTP客户端库的依赖。
我们也看到JDK 11的采用在增加,至少在Oracle的其他团队中是这样的。而且,很多流行的第三方框架和库,如Tomcat、ZooKeeper、SLF4J等,现在都支持JDK 11和JPMS。

Ben Evans(New Relic首席工程师、InfoQ Java板块负责人):

我们针对客户生产系统发送出来的数据进行了研究,结果表明(截至目前),大约20%的客户在生产环境中使用Java 11,而Java 8占据了市场的绝大多数。Java 7和之前版本大约是1%到2%,比所有非LTS版本加起来还要多。

转向OpenJDK的趋势正在形成,这也是我们今年看到的一个更大的趋势。AdoptOpenJDK——现在更名为Eclipse Adoptium——是Java 11和OpenJDK的标准发行版,它们从Oracle那里夺走了大量的市场份额。
OpenJDK 11是一个很棒的发行版,我们一直在内部将其用于后端服务。

Brian Vermeer(Snyk开发者布道师、VirtualJUG联合负责人):

在我们去年2月发布的《2020年JVM生态系统报告》(基于对开发者的网络调查)中,我们可以清楚地看到,在生产环境中,大约有25%的人正在使用Java 11。然而,值得注意的是,大多数人仍然在使用Java 8。大多数人(55%)的计划是坚持使用LTS版本——但是22%的受访者表示他们也在考虑是否采用短期升级版本。开发人员不愿升级到新版本的原因很简单,因为当前的版本对他们来说已经足够好了。

根据我们的研究,虽然Oracle JDK仍然占主导地位,但出现了一个转向其他OpenJDK供应商的趋势。四分之一的开发人员选择了AdoptOpenJDK发行版。
尽管到目前为止Java仍然是主要的JVM编程语言,但Kotlin的采用也在急剧增加。现在,Koltin已经是排名第二的JVM编程语言,超越了Scala和Clojure。这可能是因为Koltin与Java的无缝集成导致的。

Trisha Gee (JetBrains Java团队负责人):

我确实看到了采用Java 11的人数在增加(我们的调查显示,Java 11的使用率比去年增加了10%,这个比例有点奇怪,那是因为开发人员使用的JVM不止一个,所以加起来不是100%)。所有的调查和传闻证据都表明,相当一部分开发者在使用Java 11。

除此之外,我要说的是,一些Java开发者仍然坚定地信奉Java 8。他们当中有很多人止步不前,因为他们没有使用现代框架,比如Spring Boot等等(Spring Boot是目前最受欢迎的框架),被困在一些旧应用程序服务器上,它们需要“上帝的许可”才能进行升级(你知道这有多难)。其他还没有形成趋势的:人们没有使用模块系统或者没有迁移到模块系统,不过这对于企业来说是可以接受的。另一方面,模块化和Java 9似乎并不妨碍迁移到Java 11。

Microprofile

Mike Redlich (InfoQ Java编辑):

MicroProfile提交者一直在为MicroProfile Specification Process组建MicroProfile工作组,所以MicroProfile 4.0的发布被推迟了,该版本原本计划9月份发布。

以上观点只讲述了故事的一部分——Java生态系统不同部分的体验可能也是非常不一样的。我们的文章所表达的观点起到的是抛砖引玉的作用,而不是一种明确的声明,它们可以被视为一种邀请,让大家一起来公开讨论这个行业的发展方向。

作者介绍:

Ben Evans是JVM性能优化公司jClarity的联合创始人。他是LJC(伦敦JUG)的组织者,也是JCP执行委员会成员。Ben是Java Champion、3次荣获JavaOne Rockstar 演讲者。他是《Java程序员修炼之道》(The Well-Grounded Java Developer)、新版《Java in a Nutshell》和《优化Java》的作者。他经常发表与Java平台、性能、架构、并发、初创等主题相关的演讲。

Ben Evans将在11月4至11月18日的QCon Plus虚拟会议上主持“Java:在一个成熟的软件生态系统中提供持续创新”。我们将探讨在一个成熟的软件生态系统中持续交付重大创新意味着什么,以及Java如何在云计算、容器和一个比以往更加多样化的软件世界里蓬勃发展。点击这里了解更多相关信息。

Uday Tatiraju是Oracle公司的技术主管和首席工程师,在电子商务平台、搜索引擎、后端系统、网络和移动编程方面有超过十年的经验。

Michael Redlich是新泽西州克林顿市埃克森美孚研究与工程公司的高级研究技术员,在过去的30年里,他开发过自定义科学实验室和Web应用程序。他还在Ai-Logix公司(现为AudioCodes)担任技术支持工程师,为客户提供技术支持和开发电话应用程序。他的技术专长包括面向对象设计和分析、关系数据库设计和开发、计算机安全、C/C++、Java、Python和其他编程/脚本语言。近来,他对MicroProfile、Jakarta EE、Helidon、Micronaut和MongoDB很感兴趣。

Erik Costlow是一位拥有丰富Java经验的软件安全专家。他负责管理Contrast Security和公共社区版的开发者关系。Contrast将传感器编织到应用程序中,让它们能够根据应用程序使用数据的情况来检测安全威胁。Erik曾经是Oracle负责Java 8安全的产品经理,他在黑客攻击最严重的时候加入了公司,两年后离开了公司,在这期间没有出现0day漏洞。在那段时间里,他了解了Java在企业/商业和社区层面的细节。他还协助Turbonomic的产品管理团队在数据中心/云性能自动化方面实现了1亿美元的年收入。Erik还负责Fortify静态代码分析器的产品管理工作,该工具帮助开发人员发现和修复自定义源代码中的漏洞。Erik还通过Packt发布了一些有关数据分析、统计和加密的开发者课程。

原文链接

Java InfoQ Trends Report—September 2020

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章