内容简介:出品|阿里巴巴新零售淘系技术部
作者| 江丹阳(Mario)
出品|阿里巴巴新零售淘系技术部
导读: AJDK11(阿里内部基于openJDK11的定制版本)在19年3月左右发布,到现在也快1年了,不过目前整体使用的面还是比较窄,特性被了解的也不是很多,Java11作为OpenJDK发布的LTS版本,对我们来说,还是需要去拥抱和熟悉的,所以从目前的 Java 8升级到Java11,是一件不紧急但是重要的事情;
一说升级
▐ 运行环境升级
环境升级,主要是alios7(内部 Linux 7u2的定制版) + ajdk11(当前比较稳定的版本是ajdk-11_0_4_5-b71),这个升级通过修改应用APP-META目录中的dockerfile可以完成;
▐ 构建插件升级
构建插件的升级主要是maven compile插件的升级,需要升级到3.8.0版本,pandora-boot的maven插件升级到2.1.11.9,依赖如下:
同时将编译的目标文件和源文件的编译版本指定下:
▐ 框架升级
主要是springboot和pandoraboot的升级,同时还有pandora sar包的升级:
▐ 依赖升级:
在java11中移除了一些模块,所以在做升级的时候,需要看需求手动进行依赖,主要有如下几个:
▐ 运行脚本升级:
这里的脚本升级主要是一些jvm的启动参数兼容问题,比如debug option,还有gc日志打印相关的option,主要修改appctl.sh和setenv.sh两个脚本;
比如java9以前的GC日志打印是:
-Xloggc:${MIDDLEWARE_LOGS}/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"
Java9以后就是:
-Xlog:gc*:${MIDDLEWARE_LOGS}/gc.log:time"
release文件更新:
主要是指定新的ajdk的版本,以及maven的版本(3.5.0及以上)
二诉“债务”
之前有和一些升级过的同学沟通过,这个java11的升级还是比较平滑、顺利,没有太多成本,但是这次走起来其实还是克服了不少困难,不是本身java11升级的问题,而是历史的债务在java11升级的过程中都暴露了出来;
▐ linux版本
linux 版本 7u2 出来已经5年多了,目前集团所有的线上和线下的宿主机的系统都是alios7,所以很难想象现有的系统在 docker 里面依赖的是5u7的linux基础镜像,这里面会有一个比较严重的性能问题:
因为7u2的glibc去掉了vsyscall改成vdso,5u7的glibc还是保留vsyscall,就需要有一个内核接口来模拟,这个模拟是有严重性能问题的,sys%会非常高;
所以没有升级的赶紧升级下吧,使用裁剪版本(alios7u2-min),体积可以从原来的5u7 2G多到500M多,这个大小的优化能提升的东西不做赘述;
▐ 本地启动
本地启动,好多开发同学可能都没有用过,所以起不来也不是一件很难想象的事情,那问一个问题: 为什么做pandoraboot升级? 为什么做boot化? boot化带来了哪些价值? 给我们带来了哪些改变? 我觉得这些问题在最开始推微服务的时候,大家都是很关注的,但是当后面微服务成为趋势,pandoraboot或springboot成为微服务框架之后,之前的问题就没人关注了;
应用owner还是看看自己的boot化应用是否能启动吧,本地启动、本地调试可以节省的开发调试时间谁用谁知道吧;
▐ autoconfig
老生常谈的问题,这个属于时代产物了,在架构演进过程中一直被容忍,一直被小心呵护兼容,因为动之成本有点高,协同比较大,说白了就是很难~~~
有理想追求的 程序员 大家可以聚一起看看怎么落地~~
三叙“危机”
▐ “危”
面试的标准个人看来是越来越高,但是里面的人做事的标准是越来越低,“调包侠”、“拿来主义”、“翻译器”、“施工队”现象也是越来越常见,我只想说,我们是程序员,借用之前比较孤傲的定位,我们是“艺术家”,那什么时候落魄成了我们当初斥责的模样; 从现在起,建立危机意识吧;
▐ “机”
事情是升级java11,获益是java9到java11的所有的增强和新特性,下面是个人看到的一些利益点,欢迎大家补充;
内存优化
java9中增强了string的底层存储,LATIN1编码的字符串底层存储从原来的char数组变成了byte数据,对于这样指定的字符串的内存使用节省一半,整体内存的节省大概10%(不同应用可能差别比较大);
▐ HotSpot增强
java9中引入了HotSpotIntrinsicCandidate这个注释,主要是在使用CPU及OS层面的native方法替换java function,达到性能提升,效果会因为平台和硬件不同有差异,目前主要是在一些基础类的一些高频方法中出现该注解;
▐ GC提升
我们目前使用的是CMS垃圾回收器,相当好,我们也用了很长一段时间了,不过CMS随着发展,也暴露出两个问题,一个是面向大内存的回收效率会下降比较明显,同时回收的时长不可控; 在后续的Java9中的G1和Java11中ZGC相继出现,就是针对上述两个方向进行的优化;
升级了Java11,其实不一定要用ZGC,因为目前我们大部分应用的配置是4c8g,有人做过性能测试,在8G以下,CMS的回收性能会比ZGC还好一点,8G的情况下差不多,那么8G以上,ZGC会的性能会比较好,同时他的回收效率受内存大小的持续上升影响较小; 目前我们有些核心应用的配置是8c16G的,所以这块GC的增强还是有收益的;
FaaS化
FaaS最近一段时间都是一个蛮热的话题,不过距离整体在现有业务场景中广泛应用,还有一段时间; 那升级java11和faas化有什么关联呢?
个人感觉是两个方面:1.模块化,2.graalVM;
FaaS要支持在线业务的核心关键在于Function的快速分发、运行环境快速拉起来达到低延迟反馈,所以模块化可以让应用足够小,graalVM可以提前将非动态java代码编译成native image,提升启动速度同时减少整体app的大小;
趋势
从java11开始,openJDK major version的发布间隔差不多是半年,不用全部都要去关注,都是追赶,但是LTS版本,需要去追赶,去升级,Java11就是最新的LTS版本,下一个或者再一下major version,很可能又是一个LTS版本; 虽然目前使用Java8都挺好的,现实是Java8的一些特性会被往后移植,但是后续版本的特性和优化不会再被集成到Java8中了,势不可逆,跟不上就快要被淘汰了;
结语
java11的升级带来的收益还是可圈可点的,整体过程也还顺滑,没有兼容性问题,感兴趣的同学可以尝试升级,并且关注一些指标变化。
We are hiring
淘系技术部 依托淘系丰富的业务形态和海量的用户,我们持续以技术驱动产品和商业创新,不断探索和衍生颠覆型互联网新技术,以更加智能、友好、普惠的科技深度重塑产业和用户体验,打造新商业。 我们不断吸引用户增长、机器学习、视觉算法、音视频通信、数字媒体、移动技术、端侧智能等领域全球顶尖专业人才加入,让科技引领面向未来的商业创新和进步。
请投递简历至邮箱: ruoqi.zlj@taobao.com
了解更多职位详情: 2684亿成交! 每秒订单峰值54.4W! 这样的团队你想加入吗?
END
干货文章
点击下方图片即可阅读
戳 “阅读原文” 加入我们!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- 高效、低成本的付清技术债务
- Rust 2019 Roadmap:继续稳定化和偿还技术债务
- Rust 2019 Roadmap:继续稳定化和偿还技术债务
- 收购天空广播的代价:Comcast债务或挤入千亿美元俱乐部
- QueryPHP v1.0.0-rc.6 技术债务和功能全面完结,即将正式版
- QueryPHP v1.0.0-rc.6 技术债务和功能全面完结,即将正式版
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
疯狂Java讲义
李刚 / 电子工业出版社 / 2008-10 / 99.00元
《疯狂Java讲义》2000年至今,Java语言一直是应用最广的开发语言,并拥有最广泛的开发人群。如今,Java已经不再简单地是一门语言,它更像一个完整的体系,一个系统的开发平台。更甚至,它被延伸成一种开源精神。 《疯狂Java讲义》深入介绍了Java编程的相关方面,全书内容覆盖了Java的基本语法结构、Java的面向对象特征、Java集合框架体系、Java泛型、异常处理、Java GUI编......一起来看看 《疯狂Java讲义》 这本书的介绍吧!