这篇文章主要介绍“KonaJDK赋能云上Java新生态分析”,在日常操作中,相信很多人在KonaJDK赋能云上Java新生态分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”KonaJDK赋能云上Java新生态分析”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
一、自研KonaJDK对于云Java生态的意义
JDK作为Java应用的基础设施,在云Java生态上的重要性不言而喻。KonaJDK作为Tencent自研JDK, 已经平稳支撑于腾讯云微服务,消息中间件,大数据等核心业务,同时在信创等场景上作为Java业务的基础支撑组件,填补了腾讯云信创场景下JDK组件的空白。本文将主要从KonaJDK在信创云环境支撑,KonaJDK支持腾讯云产品的能力拓展与定制化以及KonaJDK在大数据场景的优化实践几个方面,介绍KonaJDK对于腾讯云Java业务的支撑与优化
。二、KonaJDK 信创环境支撑
信创云环境中Java业务要求JDK能够稳定高效的支撑国产CPU运行环境。其中主要的CPU指令集为aarch74。通过我们调研,目前JDK8在aarch74指令集的情况如下:OpenJDK8 在主线分支中并没有aarch74指令集的支持,网上能够找到的开源版本,都是开源社区几个主要参与者贡献的。对于腾讯云业务来说,开源版本并没有在生产系统中得到验证,也没有专门的人力进行代码的维护与更新。所以在可维护性,安全性及稳定性上都存在风险。OracleJDK 8 之中包含AARCH64支持。但考虑到成本,以及OracleJDK 8代码未开源,问题定位等方面的难度。同时,我们在特定场景下也发现OracleJDK频繁的ForceSafepoint可能对业务稳定性存在影响,所以我们也没有考虑使用OracleJDK8作为AARCH64的首先JDK。(具体可以参见文章: " tab="innerlink" data-linktype="2" ><不要再乱下载JDK了:Elasticsearch在国产化ARM环境下的首个大坑>)经过一系列的分析,我们最终选定KonaJDK作为腾讯云信创方案的首选JDK,主要原因如下:KonaJDK 的AARCH64版本基于OpenJDK社区最受欢迎的IcedTea 项目,之后经过KonaJDK大量的研发,适配与修正。在稳定性方面经过了大规模生产环境的测试与验证,并且通过了专有云等产品的质量验收。同时,腾讯内部TencentJDK协同团队可以持续为KonaJDK提供版本维护与技术支持。总而言之,腾讯KonaJDK能够在保证正确性稳定性的同时,提供JDK的维护,技术支持,优化以及定制化功能等方面的支持,更适合信创环境下云业务的场景。 三、KonaJDK 支持云产品能力拓展与定制化
除了稳定支撑信创云Java业务外, KonaJDK在其可定制性方面也为云业务提供了多方面的支持。我们主要通过以下几方面进行说明:1. 微服务产品中JVM监控诊断能力提升
根据统计,大约60%的云业务开发者使用Java语言。以腾讯云微服务管理平台(TSF)为例,其业务支撑环境,以及用户部署的微服务,主要是使用Java spring cloud框架实现的,即这些业务都是运行在JDK环境中的。但在实际使用过程中,用户更加关注的是业务的功能与实现,很难感受到JDK在其中的作用。作为对比,下图是云业务开发者眼中的微服务,用户更加关注微服务每个模块的功能,以及微服务业务的功能。可以看到,基本上每一个微服务功能节点都是一个JVM实例。因此如何通过JVM侧信息帮助开发者了解自己的云业务运行情况,是云支撑平台类产品的关键功能。目前,腾讯云微服务产品TSF,消息中间件产品支撑环境已经使用KonaJDK作为业务支撑组件。除了支持标准JMXbean,兼容开源JVM相关profiler来提供微服务基本JVM监控信息外, KonaJDK还从以下方面进行相关提升(部分功能研发上线中)- JFR (Java Flight Recorder)
JVM内置轻量级Profiler,可收集Java应用在运行过程中的诊断及性能数据,back port自OpenJDK11。如果使用的是默认的配置,理论上JFR开销是小于2%的,因此必要情况下可用在现网收集数据。KonaJDK中针对JFR做了大量的问题修复与能力提升,目前可以在运行时动态打开、关闭。采集到的数据在内部可以通过KonaProfiler 进行分析KonaJDK团队研发的一款线上综合性JVM性能分析工具,目前支持JFR数据文件的分析,heap dump数据分析,jstack数据分析,火焰图等多种功能。例 – KonaProfiler支持多种类型火焰图分析例 – KonaProfiler对于JFR数据分析给出分析建议结合以上能力,在KonaJDK的加持下,腾讯云微服务平台可以为用户提供JVM监控,线上诊断等一系列能力,满足用户在性能分析及调优方面的需求。2. 国密算法的支持
随着国密算法等商密算法国家标准的推出,云上客户对于Java版本的国密算法需求越来越多。经过调研与客户反馈,我们发现目前在国密算法的使用上,主要存在以下几类问题:客户在一些场景上需要国密算法, 但是受各种原因限制,客户不可能也不愿意自身研发国密算法。目前网上国密算法的实现参差不齐,以下是我们在主流搜索引擎上搜索“国密算法 Java实现”。从结果可以看到大部分内容都是个人爱好者的实现,或者使用开源项目。这些项目每种实现都需要学习API的使用,并且如何选择合适的项目,也是客户面临的成本问题。另外一点在于可靠性上, 在一些场景上,对于国密算法的要求处理功能正确与性能优秀以外,还需要可靠性保证。例如是否符合国标,是否经过认证等等。KonaJDK团队经过调研,实际上在Java密码算法的使用上,最为普及,也最为易用的实现就是Java Cryptography Architecture(JCA), 使用JCA定义的Cipher类与 API,可以高效,便捷的使用JDK中实现了JCA的密码算法。KonaJDK团队经过与内部密码专家团队的合作,共同开发了基于JCA的国密算法SM2, SM3,SM4支持,其主要具备以下优点:- 简单易用, 国密算法使用符合标准JCA调用流程,开发人员在掌握JCA的基础上,只需要简单学习几个基本要点就可以顺利使用。
- 安全可靠,由腾讯内部专业密码专家团队开发维护,国密算法符合国标。
- 易于迁移,从其他JCA密码算法迁移到SM算法只需要简单的替换即可,如下图为从RSA切换为SM2 算法的代码改动,最少仅需3行代码变动即可完成。
通过国密算法, 我们可以看到KonaJDK 提供的定制化能力与技术支持能力能够进一步提升云上产品的能力,方便客户,提高产品价值3. 工具优化,大堆场景下Jmap扫描速度的提升,回馈社区
提到Java堆分析,相信很多java程序员最先想起的就是Jmap。作为JDK内置的堆内存分析工具,Jmap可以实现jvm堆内存的统计与dump功能。在实际使用中,我们发现在大数据等大堆场景下,jmap的一次使用要消耗很长时间。而由于jmap在运行过程中需要暂停Java业务线程,所以可能会出现一次jmap 发生导致Java进程无响应,从而主备结点切换,最终造成业务系统抖动。经过问题的分析, 我们在KonaJDK中引入了Jmap的并行堆扫描,如图所示:通过并行堆扫描与thread local 数据存储,我们将Jmap histo工作时间提升了6-10倍,缓解了业务抖动问题。同时作为openJDK社区的参与者,我们将并行堆扫描这个特性积极贡献给了OpenJDK社区,目前针对G1, ZGC, shenandoahGC的patch已经合入jdk16主线,而针对ParallelScavenge堆的patch也已经经过多轮review,正待合入。 四、Kona JDK 性能保证 - 大数据线上优化实践
除了以上几方面,腾讯KonaJDK专家团队针对大数据业务进行了性能的专项提升。例如,通过GC调度等优化,大幅降低生产环境CPU利用率; 优化GC物理内存回收算法,以减少进程物理内存占用; G1 和ZGC等GC算法持续优化以提升稳定性和减少毛刺等。经过大数据生产环境大规模实际部署验证,和社区版本对比,Kona JDK在cpu使用率和物理内存使用等方面都有明显优势。到此,关于“KonaJDK赋能云上Java新生态分析”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!