内容提要:
✔Java应用在云上遭遇到哪些挑战?
✔ 企业如何选型生产环境使用的JDK?
✔阿里巴巴Dragonwell 如何助力Java应用迁移到云上?
在云原生的世界里,Go语言凭借语法简单、启动速度快、依赖少、Goroutine并发等特点,成为了一等公民。而Java作为20年前的编程语言,那个时代注重的是复杂的OOP设计、企业级规范,长期运行下的稳定性和性能。Java语言似乎与当前云原生环境下的快速交付、微服务等需求格格不入。
阿里巴巴是世界上最大的Java用户之一,在拥抱云原生的同时,也要保持现有业务的迭代演进。因此Alibaba JVM团队一直致力于让Java语言与时俱进,适应云上场景。今天我们就来聊一聊Java在云上遇到的挑战以及如何通过Dragonwell JDK来克服这些困难。
Java语言 & 云原生
Java是一门企业级,高性能,高稳定性的编程语言。企业级简单来说就是适合开发长期运行的大型应用,比如Linux + OpenJDK的开发的服务如果没有发布和升级的需求,一般情况下可以保证运行一年以上不用重启。
Java拥有丰富的生态,大量的高质量第三方类库、框架(比如Spring、Netty)被维护在maven等中心仓库,用户只需声明式地引入包依赖,即可调用实现。举例来说,node的npm生态虽然很完善,但是想要找到一个分布式事务框架就很困难;反观Java,几乎所有开源软件与工具都会考虑对Java平台的支持,我们可以找到多种分布式事务框架的Java客户端。因此只要选择了Java,就是选择了一个资源宝库。
作为Java的开发者肯定听说过Java EE(目前捐给了Eclipse社区,更名为Jakarta EE),Java EE很大程度上成就了Java语言。编程语言本身只是提供控制流、数据结构定义、垃圾回收、并发基础设施、抽象手段等基础能力。而这个编程语言的杀手级场景究竟什么,是取决于语言之上的标准库、规范的。Jakarta EE定义的JDBC规范就引领各大厂商为Java提供了接口一致的数据库驱动; Tomcat、JBoss实现的Servlet容器让开发者有机会选择不同的Servlet实现。
Java的跨平台性向开发者屏蔽了底层的硬件和操作系统细节。开发者们可以在Mac、Windows的开发环境开发、调试应用,最后到Linux的生产环境去部署,这大大降低了研发、调试、运维的工作量。
万物皆有TradeOff,我们上述的一些设计取向给我们带来的一些麻烦。
代码加载开销高
为了实现跨平台性,Java定义了自己的字节码,通过字节码描述