如何进行基于Anolis OS的企业级Java应用规模化实践?|龙蜥技术
简介:提供了7×24小时的专属钉钉或者电话支持,响应时间保证到在业务不可用情况下10分钟响应,业务一般的问题在一小时可以获得响应,主要城市可以两小时内得到到达现场的服务。
本文作者郁磊,是Java语言与虚拟机SIG负责人。整理自云栖大会龙蜥专场论坛的技术分享,云栖系列视频已经上线,欢迎观看:云栖大会龙蜥专场论坛
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 引入了很多新的特性,比如说模块化,对开发进程影响非常大,所以选取了这样一种滚动升级策略。
假如我们的用户想去使用最新的JDK,那他必须接受滚动升级。比如说现在Java已经到了17了,五年后Java会到达27的版本,这样的升级频率肯定是接受不了的。假设Java用户停留在老版本是不是可以避免这种滚动升级?实际也不行, Java远程执行漏洞非常多,我们可以通过序列化构造一些远程代码执行的例子,这是非常可怕的。各个云厂商都提供了自己的OpenJDK发行版,想获得Oracle也是可以的,是收费的。
阿里巴巴Dragonwell就是在这种背景下产生出了Java运行时,我们完全依托开源社区建设,我们参与了非常多国际上的高质量社区,现在也加入了龙蜥社区,其中包括Java的JCP-EC,阿里巴巴是国内唯一一个加入EC席位的企业(EC的全称是执行委员会)。
Alibaba Dragonwell是在OpenJDK的基础上增加了一些自己的功能,构成了阿里巴巴Dragonwell发行版本。我们会发布稳定的发行版本,并且提供定期的安全补丁,质量体系接轨国际,基于Adoptium的CI,Adoptium组织由各个JDK的头部厂商维护,包括微软、IBM都参与其中。经过测试以后,我们会在阿里巴巴线上验证;SVT系统验证,会用spring等常用框架进行验证我们的JDK。我们也支持多平台,比如Linux、windows;RISC-V架构的支持也已经提上日程。
和Java企业计算相关的另外一个发行版是Eclipse Temurin,它源自AdoptOpenJDK。AdoptOpenJDK是怎么来的?可以看到前面的Oracle发布策略,大家使用OpenJDK会越来越困难,所以伦敦的Java User Group创建AdoptOpenJDK项目,让OpenJDK可以方便地被用户使用。该项目编译OpenJDK的source code,经过aqa-tests才会release出来,可以说是原汁原味的OpenJDK。和Alibaba Dragonwell的差异是:上一页有一块Dragonwell补丁,而Temurin是原汁原味的OpenJDK。
Aqa-tests包括性能测试,OpenJDK自带测试。其中的system测试会验证Java的模块化系统,Java的自带工具等。后面是external,包括Java生态里面常见的一些软件,像scala、kafka。最后是标准的JCK,Oracle所颁布的一个标准,只要JDK发行版跑过验证就是标准的JDK。
很多传统企业用户不需要阿里巴巴Dragonwell里面为云或者互联网设计的功能,他可以选择Eclipse Temurin发行版。
让我们看看使用这两个发行版企业可以获得什么。
- 安全特性,Java的TSL能力是通过JSSE接口使用的,Eclipse Temurin和Alibaba Dragonwell的JSSE能力都会经过验证,这对企业用户是非常重要的
- 兼容性,Dragonwell基于OpenJDK而Temurin是原汁原味的OpenJDK,从OracleJDK迁移到OpenJDK可以保证兼容性。
- Java生态的集成验证
- 定期安全补丁,Alibaba Dragonwell或者Eclipse Temurin,这两个发行版是完全以完全开源的形式运作的。我们会以每三个月一次的固定发行周期提供订阅支持。
Alibaba Dragonwell上有很多阿里巴巴自己扩展的云原生特性,通过这些特性我们可以轻易的排查问题或者轻易的减少资源使用,或者是降低总体成本,这是Eclipse Temurin和OracleJDK所没有的。
基于这两个JDK发行版本我们提供了企业服务体系。如果企业用户从OracleJDK某个版本迁移过来,首先面临的问题是迁移。Java的版本迁移不像GO或者其他语言那样轻松,比如JDK8迁移到11或者17,都有很大的迁移工作量。我们提供迁移了工具,并积累了许多迁移经验文档给到企业去迁移到Eclipse Temurin或者Alibaba Dragonwell。
Java由于庞大的类库会隐含很多的安全问题。如果选择订阅了Alibaba Dragonwell企业支持服务,会获得每三个月的推送,对于一些重大更新我们会进行评估,是否是重要更新,是否要升级,升级计划是什么。
应急支撑体系是IT企业的日常需求,在Java使用中只要上了规模都会有无法预期的问题。这里我们提供了7×24小时的专属钉钉或者电话支持,响应时间保证到在业务不可用情况下10分钟响应,业务一般的问题在一小时可以获得响应,主要城市可以两小时内得到到达现场的服务。
我们结合之前的案例来看,用户通过我们的服务能获得怎样的体验。首先用户发现并报告了问题,由于北京是主要城市,两小时内可以到达现场。随后我们帮助用户保存现场,分析问题,定位问题,最后交付服务。
代码空间满导致代码部分解释执行,从而性能变差,但代码空间满依旧不是根因。一步步深入定位,分析出原因: 因为用户从低版本JDK升上来,低版本JDK的代码回收功能是有问题的,因此用户禁用了代码空间的回收功能。随着应用持续运行,编译代码越来越多,如果开启了代码空间的回收,失效代码是可以被Java虚拟机回收的。但是用户关闭了代码空间回收,最终导致代码空间满。Hotspot虚拟机在代码空间满时策略是禁止JIT编译。
确认问题后帮助用户在少量机器上验证,确认修复完成后交付服务,书面给与用户确认。
本文为阿里云原创内容,未经允许不得转载。
如何进行基于Anolis OS的企业级Java应用规模化实践?|龙蜥技术的更多相关文章
- 企业级Java应用最重要的4个性能指标
应用性能管理(APM)是一种即时监控以实现对应用程序性能管理和故障管理的系统化解决方案.目前主要指对企业的关键业务应用进行监测.优化,最终达到提高企业应用的可靠性和质量,保证用户得到良好的服务,降低I ...
- Spring Data:企业级Java的现代数据访问技术(影印版)
<Spring Data:企业级Java的现代数据访问技术(影印版)>基本信息原书名:Spring Data:Modern Data Access for Enterprise Java作 ...
- 【转】企业级Java应用最重要的4个性能指标
应用性能管理(APM)是一种即时监控以实现对应用程序性能管理和故障管理的系统化解决方案.目前主要指对企业的关键业务应用进行监测.优化,最终达到提高企业应用的可靠性和质量,保证用户得到良好的服务,降低I ...
- JEECG 3.7.1 版本发布,企业级JAVA快速开发平台
JEECG 3.7.1 版本发布,企业级JAVA快速开发平台 ---------------------------------------- Version: Jeecg_3.7.1项 目: ...
- OS信号实现Java异步通知
OS信号实现Java异步通知本文将结合操作系统的信号机制,来尝试实现一个简单的,不依赖功能环境的Java异步通知功能.没有特殊说明,本文所有的示例,都是基于Linux.信号简介信号是在软件层次上对中断 ...
- 基于Java语言开发jt808、jt809技术文章精华索引
很多技术开发人员喜欢追逐最新的技术,如Node.js, go等语言,这些语言只是解决了某一个方面,如只是擅长异步高并发等等,却在企业管理后台开发方面提供的支持非常不够,造成项目团队技术选项失败,开发后 ...
- CentOS停更;阿里发布全新操作系统(Anolis OS)
镜像下载.域名解析.时间同步请点击阿里云开源镜像站 Linux系统对于Java程序员来说,就好比"乞丐手里的碗",任何业务都离不开他的身影,因为服务端的广泛使用,也因此衍生出了各种 ...
- CentOS即将停止维护,拥抱阿里“龙蜥“(Anolis OS),VMware安装Anolis OS与介绍
一.前言 大家在自己电脑来进行服务器的一些操作时,基本都是使用CentOS 7或者是CentOS 8,但是2021年底CentOS 8宣布停止了维护:CentOS 7 在2024年6月30日也会停止维 ...
- 基于raw os 的事件触发系统
Raw os的事件触发系统有以下特点: 1 基于UML的状态机理念设计,实现了有限状态机(fsm)以及层次状态机(HSM). 2 实现了活动对象(ACTIVE OBJECT)的特性,一个活动对象包含了 ...
- 【公开课】【阿里在线技术峰会】魏鹏:基于Java容器的多应用部署技术实践
对于公开课,可能目前用不上这些,但是往往能在以后想解决方案的时候帮助到我.以下是阿里对公开课的整理 摘要: 在首届阿里巴巴在线峰会上,阿里巴巴中间件技术部专家魏鹏为大家带来了题为<基于Java容 ...
随机推荐
- (模板)Manacher算法:线性时间求字符串内回文子串的数量
已通过leetcode647:https://leetcode-cn.com/problems/palindromic-substrings/ void get_d(vector<int> ...
- [STM32 HAL]一种可能不错的DMA处理串口数据方案
[STM32 HAL]一种可能不错的DMA处理数据方案 原文链接:https://blog.csdn.net/youmeichifan/article/details/51750435?spm=100 ...
- python基础三(数据类型)
一 引子 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类型 数据是用来表示状态的,不同的状态就应该用不同的类型的数据去表示 3 数据类型 数字(整形,长整形,浮点型,复数 ...
- View之invalidate,requestLayout,postInvalidate
目录介绍 01.invalidate,requestLayout,postInvalidate区别 02.invalidate深入分析 03.postInvalidate深入分析 04.request ...
- 记录--uni-app App端半屏连续扫码
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本文用一个简单的 demo 讲解 App端 半屏连续扫码 的实现方式,包括(条形码.二维码等各种各样的码). 我会从实现思路讲起,如果你比 ...
- 全网首套完整containerd容器工具教程
1.Containerd的由来 [Docker名噪一时,捐出runC]2013年docker公司在推出docker产品后,由于其对全球技术产生了一定的影响力,Google公司明显感觉到自己公司内部所使 ...
- 镭速Raysync v6.6.8.0版本发布
最近镭速发布了v6.6.8.0版本,已经发布上线了.主要更新内容有服务器下发任务支持指定客户端,客户端增加日志清理和日志压缩,自动删除源文件保持源目录结构,支持将文件投递给其他成员等功能,详细的更新内 ...
- KingbaseES sys_restore 恢复表时默认不包括表上的索引
前言 最近碰到一个案例,在使用sys_restore恢复指定表时,默认不恢复表上的索引,如果想恢复需要单独指定. 测试过程 [](javascript:void(0) 查看表的有关属性:test=# ...
- IDEA MyBatis Log 插件,打印SQL语句
打开Settings->plugins 搜索插件 MyBatis Log点击安装,完成后重启IDEA即可. 点击Tools,选择 MyBatis Log Plugin ,会在下方打开一个窗口,这 ...
- 从零开始学Spring Boot系列-集成MyBatis-Plus
在Spring Boot应用开发中,MyBatis-Plus是一个强大且易于使用的MyBatis增强工具,它提供了很多实用的功能,如代码生成器.条件构造器.分页插件等,极大地简化了MyBatis的使用 ...