长期以来,Java一直因其启动速度慢、大量的依赖项(无论是否全部使用)以及大量的资源需求而饱受批评。再加上JVM和应用服务器,需求会变得更大。
传统的解释型Java服务对于真正的微服务平台来说并不理想,尤其是无服务器API。
这就是原生 Java 真正闪耀的地方......
找到最佳点
原生Java非常适合Kubernetes、微服务和无服务器组件。这也是开发新服务或将大型应用程序分解成小型服务的理想机会。
采用原生Java不一定是“大爆炸”式的方法——它可以一次一个服务地完成。这种方法最大限度地降低了风险,并且随着技术的进一步成熟,将有助于建立信心。
开始时,进行迁移可能看起来势不可挡,但是它与今天的传统Java开发并没有太大的不同。
Logicdrop 开发了一个用于业务自动化和数据智能的一体化平台,使企业能够设计自己的解决方案并将其部署到云中。 我们的平台最初是使用 Spring Boot 和 Drools 开发的,现在已经从头开始重新设计,只使用 Quarkus 和 Kogito,并主要部署原生 Java 可执行文件。
在切换到原生Java之前,在云原生基础设施中运行越来越多的Spring Boot服务变得具有挑战性,更不用说大规模的成本了。不管功能如何,容器的大小总是大约1GB+,因为它们需要一个JVM并包含一整套依赖项(使用或不使用)。启动时间平均为15-30秒,由于资源紧张,每个节点只能运行少量程序。
迁移到Quarkus之后,生成的本机可执行文件明显更小,启动速度明显更快,并且总体上使用的资源更少。容器的大小小于50MB(压缩的),在不到1秒的时间内就可以接受请求。这些优势使得native Java成为规模和启动时间在成本和性能方面都至关重要的环境的理想选择。
吞吐量不是一个大问题,我们发现在完成跳跃后,吞吐量大致相同。由于扩展速度更快,更多的服务可以打包到更少的节点中,因此水平扩展可以适应任何差异。
何时使用原生Java
原生Java令人印象深刻:GraalVM将Java与其他“更轻更快”的栈相提并论,同时保持我们都知道的熟悉的Java结构。而“更轻更快”在云中至关重要!java培训课程结构良好,以正确的顺序涵盖了java库的基本知识,使你的学习更加轻松。
原生Java可执行文件也更加安全:GraalVM通过剥离未使用的类、方法和字段来减少漏洞。
新的微服务是原生Java的理想起点,因为它们可以从零开始编写,以利用已建立的成熟的原生库。
在决定将什么迁移到原生Java时,这些先决条件是一个很好的起点:
该服务是独立的吗?
启动时间和扩展是否重要?
外部依赖项是否与本机 Java 兼容?
可能需要额外的配置才能正确处理动态 Java 功能(例如反射)。 如果没有这些额外的元数据,库在用作本机可执行文件的一部分时可能会失败! 因此,根据我们的经验,Java 库要么与原生 Java 兼容,要么不兼容。
使用一个框架来提供一组精心管理的库有助于了解哪些在原生Java中有效,哪些无效。不幸的是,对于其他Java库来说,事情要困难得多:目前,判断一个库是否与本地Java兼容的唯一方法是在本地可执行文件中运行它。很多时候,如果有什么失败,都会很快出现。
了解哪些库与原生Java兼容是决定哪些库适合原生Java的一个重要因素:对于不兼容的库,我们要么使用替换,要么重新实现功能。
幸运的是,大多数Java应用程序通常依赖于框架中已经提供的类似功能——日志、REST APIs、JSON等。例如,这些API已经存在于Quarkus中,并且与本地Java兼容:
持久性(NoSQL 和 RDBMS)
可观察性(Elastic、Prometheus、Jaeger 等)
AWS 开发工具包
安全
SOAP (Apache CXF)
REST(RESTEasy、Jackson 等)
支持(Swagger、Logging 等)
选择框架
选择原生框架各有利弊,所以选择一个需要仔细考虑长期使用。
原生Java可以用于普通Java开发。但是大多数组织应该选择构建框架,因为它将减少样板代码,并提供一组精选的API,从而节省时间和精力。此外,每个框架都使您免于构建本机可执行文件的过程,从而进一步降低了复杂性和学习难度。
所选择的框架应该完全包含GraalVM,提供支持原生Java的丰富生态系统,并以对您的组织有意义的方式简化原生可执行文件的构建。考虑到这一点,今天只有三个Java框架这样做——Quarkus、Micronaut和Helidon。
一些框架甚至可以“传统地”在JVM中运行,同时仍然利用一些GraalVM优化。当应用程序或服务不能完全本机运行时,这可能是一个很好的备用方法。
总结
最终,任何微服务通常都会受益于更快的启动时间和更少的资源需求。使用原生Java的优势,尤其是在Kubernetes中,加上成本节约和可衡量的效率,是迁移到原生Java的原因。
原生Java可执行文件将Java推向了一个新的高度。如果机会确实出现了,并且条件合适,那么付出额外的努力来开始使用GraalVM是非常值得的!
发表评论 取消回复