当前位置: 首页 > 后端技术 > Java

如何基于AnolisOS实现企业级Java应用规模实践?|龙百合科技

时间:2023-04-02 00:22:16 Java

介绍:提供7×24小时专属钉钉或电话支持,业务不通时响应时间保证10分钟,一般业务问题一小时内响应。各大城市两小时内可获得上门服务。本文作者余磊是Java语言和虚拟机SIG的负责人。整理自云栖大会龙蜥专题论坛技术分享。AlibabaDragonwell是一个OpenJDK发行版。OpenAnolis是企业级操作系统,企业级操作系统必须包含企业级应用的运行时。众所周知,RedHat的CentOS发行版实际上包含了RedHat自己的JDK发行版。这既是他们对自己可控运行时技术的信心,也是他们对用户的责任。例如,如果OpenJDK有什么问题,他们可以在发行版中进行修改,帮助用户解决问题。Java企业应用Java一直是企业级的最佳选择。原因有很多。在目前的云原生环境下,它有非常成熟的容器化方案。有Springboot等框架可以帮助我们将应用程序打包到一个非常合适的容器中。操作模式。还有很多分布式中间件,比如Springcloud,可以帮助我们构建分布式应用。Java也有很好的规范和开源生态系统。甲骨文虽然控制着Java,但也推动了Java标准的演进。该标准使语言朝着可控的方向发展,非常适合开发企业级应用。里面有非常繁荣的生态,比如可以帮助开发者快速获取开发依赖的Maven,还有Netty、Tomcat、Spring。Spring虽然可以看作是对JakartaEE的挑战,但是它也受到了Java的影响,所以可以说JakartaEE也在帮助Spring发展。高效,运行时高效,开发时高效。运行时的效率体现在Java的执行速度上。一个数据是Java的运行效率可以在各大编程语言中排名第四,效率可以达到C语言的一半,这在高级语言中是非常少见的。最后是行业实践,在互联网金融等行业大规模使用Java。大家认为硬件+操作系统+应用构成了整个应用。事实上,运行时对应用程序的运行有很大的影响。让我通过一个例子来解释它。这是我们在企业客户中遇到的问题。它在Java运行时启动良好。过了一天,性能变成了1/2,而且越来越慢。我们只能选择速度变慢的实例重新启动。他能做的就是直接重启或者扩容变慢的实例,因为变慢之后需要更多的机器来支撑容量。但这并不能解决问题,因为减速一直在发生。最后发现是JIT相关的问题。Java应用程序具有JIT编译器和解释模式。我可以给你一个号码。编译模式比解释模式快50倍左右,所以如果有些代码在解释模式下执行,影响会非常大,如果2%的代码处于解释器模式,那么整个应用程序一半的时间在解释器中执行,一半的时间在编译器中执行,性能翻倍。如果说一半的代码回退到解释器,应用程序将慢大约25倍,因此运行时对应用程序有深远的影响。AlibabaDragonwell和EclipseTemurin都是OpenJDK的开源发行版。为什么近年来除了Google之外所有领先的云供应商都推出了自己的发行版。从OpenJDK9开始,每六个月发布一个版本。这个版本只会维护一年。例如,OpenJDK将从2018年3月维护到2019年3月,中间只有一年的维护时间。选择这种策略是因为OpenJDK9引入了很多新特性,比如模块化,对开发过程影响很大,所以选择了这样的滚动升级策略。如果我们的用户想要使用最新的JDK,他必须接受滚动升级。比如Java现在已经到了17版,5年后Java会达到27版。这样的升级频率,绝对让人无法接受。是否可以通过假设Java用户继续使用旧版本来避免这种滚动升级?事实上,它也不起作用。Java中存在很多远程执行漏洞。我们可以通过序列化的方式构造一些远程代码执行的例子,这是非常可怕的。每个云供应商都提供自己的OpenJDK发行版,Oracle也是收费的。AlibabaDragonwell就是在这样的背景下产生了Javaruntime。我们完全依靠开源社区的建设。我们参与了很多优质的国际社区,现在我们也加入了DragonLizard社区,包括Java的JCP-EC,阿里巴巴是国内唯一一家加入EC席位的公司(EC全称ExecutiveCommittee)).AlibabaDragonwell在OpenJDK的基础上增加了自己的一些功能,形成了AlibabaDragonwell的发布版本。我们将发布一个稳定的发布版本,并提供定期的安全补丁。质量体系与国际接轨。Adoptium组织基于Adoptium的CI,由各种领先的JDK制造商维护,包括Microsoft和IBM。测试完成后,我们将在阿里巴巴在线验证;对于SVT系统验证,我们会使用spring等常用框架来验证我们的JDK。我们还支持多种平台,例如Linux和windows;对RISC-V架构的支持也被提上了日程。另一个与Java企业计算相关的发行版是EclipseTemurin,它源自AdoptOpenJDK。AdoptOpenJDK是如何产生的?可以看到之前Oracle的发布策略,大家使用OpenJDK会越来越难,所以伦敦的Java用户组创建了AdoptOpenJDK项目,让OpenJDK可以方便的被用户使用。本项目编译OpenJDK源码,待aqa-tests后发布。可以说是原汁原味的OpenJDK。与AlibabaDragonwell不同的是:上一页有Dragonwell补丁,Temurin是原版OpenJDK。Aqa-tests包含性能测试,OpenJDK自带测试。系统测试会验证Java的模块化系统、Java自带的工具等,后面是外部的,包括Java生态中的一些常用软件,比如scala、kafka等。最后就是JCK标准,Oracle颁布的标准。只要JDK发行版通过了验证,就是标准的JDK。很多传统企业用户不需要AlibabaDragonwell中为云或互联网设计的功能,所以他们可以选择EclipseTemurin发行版。让我们看看企业可以从这两个发行版中获得什么。安全特性,通过JSSE接口使用Java的TSL能力,会验证EclipseTemurin和AlibabaDragonwell的JSSE能力,这对企业用户兼容性非常重要,Dragonwell基于OpenJDK,Temurin是原始的OpenJDK,从OracleJDK迁移到OpenJDK可以保证兼容性。Java生态系统的集成验证定期安全补丁,AlibabaDragonwell或EclipseTemurin,这两个版本是完全开源的。我们按三个月的定期发布周期提供订阅支持。AlibabaDragonwell有很多阿里自己扩展的云原生特性。通过这些特性,我们可以轻松排查问题,减少资源使用,或者降低整体成本,这是EclipseTemurin和OracleJDK所不具备的。基于这两个JDK版本,我们提供了一个企业服务系统。企业用户如果从某个版本的OracleJDK迁移过来,首先面临的问题就是迁移。Java版本迁移不像GO或其他语言那么容易。比如从JDK8迁移到11或者17,需要很大的迁移工作量。我们提供迁移工具,为企业迁移到EclipseTemurin或AlibabaDragonwell积累了大量的迁移经验文档。由于Java庞大的类库,隐含着很多安全问题。如果您选择订阅阿里巴巴龙井企业支持服务,您将每三个月推送一次。对于一些重大更新,我们会评估是否是重要更新,是否需要升级,升级方案是什么。应急支持系统是IT企业的日常需求。在Java的使用中,只要规模化,就会出现意想不到的问题。在这里我们提供7×24小时的专属钉钉或电话支持。业务不通时响应时间保证10分钟。一般业务问题可在一小时内响应,主要城市可在两小时内到达。服务。让我们看看之前的案例,看看用户通过我们的服务可以获得什么样的体验。首先是用户发现并反馈问题,北京是大城市,两小时内就可以到达现场。然后我们帮助用户保存场景,分析问题,定位问题,最后交付服务。代码空间满导致代码部分解释和执行,导致性能不佳,但代码空间满仍然不是根本原因。逐步深入定位分析原因:由于用户是从低版本JDK升级而来,低版本JDK的代码回收功能有问题,所以用户禁用了代码空间回收功能。随着应用程序的不断运行,编译后的代码越来越多。如果启用了代码空间的回收,无效的代码可以被Java虚拟机回收。但是用户关闭了代码空间回收,最终导致代码空间被占满。Hotspot虚拟机的策略是在代码空间满的情况下禁止JIT编译。确认问题后,帮助用户在少量机器上进行验证,确认修复完成后交付服务,并给用户书面确认。原文链接本文为阿里云原创内容,未经许可不得转载。