苹果|如何进行基于 Anolis OS 的企业级 Java 应用规模化实践?

苹果|如何进行基于 Anolis OS 的企业级 Java 应用规模化实践?

文章图片

苹果|如何进行基于 Anolis OS 的企业级 Java 应用规模化实践?

文章图片

苹果|如何进行基于 Anolis OS 的企业级 Java 应用规模化实践?

文章图片

苹果|如何进行基于 Anolis OS 的企业级 Java 应用规模化实践?

文章图片

苹果|如何进行基于 Anolis OS 的企业级 Java 应用规模化实践?

Alibaba Dragonwell 是一款 OpenJDK 的发行版 。 OpenAnolis 是企业级的操作系统 , 企业级操作系统必然包含企业级应用的运行时 。 众所周知 , 红帽的 CentOS 发行版里面其实有红帽自己做的 JDK 发行版 , 这既是他们对自己运行时技术可控的自信 , 也是对用户负责 , 比如说 OpenJDK 出现任何问题 , 他们可以在发行版上做改动 , 去帮助用户解决问题 。
Java企业应用
Java 一直是企业级最佳的选择 , 其中有很多原因 , 目前云原生环境下 , 它有非常成熟的容器化方案 , 有 Spring boot 这样的框架来帮助我们把应用打包成一个非常适合容器运行的模式 。 也有很多分布式的中间件 , 比如说 Spring cloud , 可以帮助我们构造分布式应用 。 Java也有非常好的规范以及开源生态 , 但 Oracle 虽然控制着 Java , 同时也推进着Java标准往前演进 , 标准使得语言一直是可以控制的方向发展 , 非常适合开发企业级应用 。 里面有非常繁荣的生态 , 比如 Maven 可以帮助开发者快速获得开发依赖 , 还有Netty、Tomcat、Spring 。 虽然 Spring 可以看做是挑战 Jakarta EE的角色 , 但是它本身也受到 Java 的很多影响 , 因此可以说是Jakarta EE也在帮助Spring发展 。
高效 , 运行时的高效和开发时的高效 。 运行时的高效体现在 Java 的执行速度 , 一个数据是 Java 的运行效率可以排在各大编程语言第四 , 效率可以达到 C 语言的二分之一 , 这在高级语言里非常难得的 。
最后是行业实践 , 在互联网金融等行业里大规模使用 Java 。

大家认为硬件+操作系统+应用就构成整个应用 , 其实运行时对于应用的运行影响是非常大的 , 通过一个例子解释 。
这是我们在企业客户里遇到的一个问题 , 在 Java 运行时开始很好 , 经过一天以后性能就变成 1/2 , 越来越慢 , 只能选取变慢的实例重启 , 他能做的就是把变慢的实例直接重启或者是扩容 , 因为变慢后需要更多的机器支撑容量 。 但这并不解决问题 , 因为变慢这个行为持续在发生 。
最后排查出是 JIT 相关问题 ,Java应用有 JIT 编译器 , 也有解释模式 , 我可以给大家一个数字 , 编译模式要比解释模式快 50 倍左右 , 所以有部分代码执行在解释模式的话 , 影响非常大 , 假如有 2% 的代码在解释器模式 , 则整个应用一半的时间在执行解释器 , 一半的时间在执行编译器 , 性能下降一倍 。 假如说一半的代码退到解释器 , 那应用就会慢 25 倍左右 , 所以运行时对应用有深远影响 。

阿里巴巴 Dragonwell 和 Eclipse Temurin 都是 OpenJDK 的开源发行版本 , 为什么近年来除了谷歌以外所有的头部云厂商都推出了自己的发行版 。 自 OpenJDK9 开始 , 每半年发布一个版本 , 这个版本只会维护一年 , 比如说 OpenJDK 从 2018 年 3 月开始维护到 2019 年 3 月 , 中间只有一年的维护时间 , 选取这样的策略是因为 OpenJDK9 引入了很多新的特性 , 比如说模块化 , 对开发进程影响非常大 , 所以选取了这样一种滚动升级策略 。