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

2020 年 10 月 10 日

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

2020 年 10 月 10 日 15:44 3449

评论 1 条评论

发布
用户头像
1
23 小时前
回复
没有更多评论了
发现更多内容

架构感悟 7- 性能优化何为

旭东(Frank)

Kubernetes的拐点助推器:左手开源,右手边缘计算

华为云开发者社区

Kubernetes 容器 边缘计算 容器技术 华为云

创业使人成长系列 (4)- 常用账号申请

石云升

支付宝 微信商户 商标

Django Models随机获取指定数量数据方法

Young先生

django 数据 random 随机 Models

Java如何调用Python(一)

wjchenge

程序设计理念-CentOs7实践Nginx-带来安装服务的通用法则

图南日晟

Nginx PHP-FPM 架构设计 环境安装

创新监管首批8个试点应用公示 其中7个涉及区块链

CECBC区块链专委会

【数据结构】Java 常用集合类 HashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构

为什么我们要自主开发一个稳定可靠的容器网络

博云技术社区

云计算 PaaS fabric 容器云

数字货币并不能完美诠释区块链金融

CECBC区块链专委会

区块链技术 社会价值 打通数据孤岛 重建产业信用

web 性能压测工具

Z冰红茶

PV与UV你的网站也可以

北漂码农有话说

关于数据库索引的知识点,你所需要了解的都在这儿了

鄙人薛某

MySQL 索引结构 索引 MySQL优化

原生Ingress灰度发布能力不够?我们是这么干的

博云技术社区

云计算 容器 云原生 PaaS

漫画:如何证明sleep不释放锁,而wait释放锁?

王磊

Java Wait Sleep

前浪出新招,996已过时,互联网员工都开始住公司了!(爆公司信息)

程序员生活志

加班 996 007 互联网公司

为啥Underlay才是容器网络的最佳落地选择

博云技术社区

云计算 容器 容器网络

进击的 Flink:网易云音乐实时数仓建设实践

Apache Flink

flink

API网关——Kong实践分享

博云技术社区

云计算 容器 PaaS API

【数据结构】Java 常用集合类 ConcurrentHashMap(JDK 1.8)

Alex🐒

Java 源码 数据结构 并发编程

挑战10的1,143,913次方种算法组合:这都不是事儿!

华为云开发者社区

华为 算法 进化 华为云

百度大脑OCR技术助力钢铁物流实现智能管理

百度大脑

人工智能 百度大脑 文字识别

Self-Compassion,对自己好一点

泰稳@极客邦科技

创业 个人成长 自我管理 创业心态

Netty-物联网设备Channel管理

凸出

Java Netty ConcurrentHashMap 物联网 channel

BSN北京市区块链主干网正式发布

CECBC区块链专委会

web压力性能测试

周冬辉

压力测试

随着并发压力的增加,系统响应时间和吞吐量如何变化,为什么?

chenzt

Java如何调用Python(二)

wjchenge

第7周总结:性能

慵秋

超详细讲解网络中的数据链路层~

程序员的时光

BIGO海量小文件存储实践

InfoQ_3597a20b53cc

易观A10数据智能峰会

易观A10数据智能峰会

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