Java 程序员:不要因未知而让云成本大涨

阅读数:2501 2019 年 1 月 9 日

话题:云计算语言 & 开发微服务Java

Java 应用程序框架 Grails 的创建者 Graeme Rocher 近日表示,在云原生世界,通过对 Java 程序逻辑进行注释和编译细节优化,可以节省云服务器运行成本,开发人员对这些潜在细节的无知可能导致企业付出高昂代价。

在日常开发中,Java 程序员主要和框架、工具、API 和文档等打交道,好像跟云沾不上边。直到应用程序被推向生产,研发人员可能才意识到这个应用需要千兆字节内存才能运行,此时再开始优化显然来不及,如果基于云平台运行,则会造成大量资源浪费。

虽然 Java 研发人员主要在运行时管理应用程序,但随着容器化和 Kubernetes 的普及,不少研发人员也会将应用程序直接部署到 Kubernetes,因为其可以大规模协调容器化应用程序。

无论是 Kubernetes 还是管理应用程序的 Oracle 云基础架构环境,编写云应用程序的开发人员都需要以不同的方式思考编程和优化方式。相比本地运行,开发人员必须让应用程序对重启、故障转移、启动时间和内存消耗等优化做出响应。毕竟,一旦应用程序在云平台运行,消耗的所有资源都直接与金钱挂钩。

无服务器和微服务优化

当然,上述问题可以通过一些新计算模式得到缓解,但每一种新计算模式的出现都会随之带来一些陷阱。在云计算领域,显著风险来自应用程序的隐藏成本,从表面来看,微服务应该是相对经济的解决方案。

Grails 的创建者 Graeme Rocher 最近因名为 Micronaut 开源项目获得 Oracle Code One 颁发的开创性奖项。与开源 Web 应用程序框架 Grails 一样,Micronaut 基于 JVM,但这也是二者唯一相似之处。Micronaut 是一个模块化、易于测试的开源框架,用于构建现代微服务和无服务器应用程序。

那么,Micronaut 和 Java 程序员有什么关系?和云计算成本又有什么关系呢?

一般来说,在 Java 生态系统,研发人员会学习很多关于让应用程序更高效,针对低内存占用进行优化的知识。云平台同样运行着不少用 Java 语言编写的框架,比如 Hadoop、Kafka 和 Cassandra,这些框架支持长时间运行进程,这些进程可从 JVM 即时编译中受益。

但是,对于运行时间较短的进程而言,无服务器计算变得很受欢迎,这更适合快速冷启动和低内存占用及短期运行进程的情况,如果进程只是短暂执行然后消失,那么 JVM 提供的优化就会丢失,就像在效用计算模型中一样。

Micronaut 的作用就是将传统架构过渡到更快、更灵活且基于微服务的系统。Micronaut 能以亚秒速度执行关键操作,同时支持精益云部署。应用程序的启动时间和内存消耗不会根据程序中的代码行数自动增加。因此,Micronaut 不仅适用于公用计算,还是通用开发环境,可以轻松运行在诸如 Android 等小型内存占用设备和 Raspberry Pi 等微控制器上。

换句话说,Micronaut 满足云原生、多语言、独立于设备的需求,并与 GraalVM 等项目完美集成,用于编译运行速度更快的 Java 代码。 当然,研发人员也不必局限于 Micronaut 这一种选择。

Java 不一定很沉重

研发人员通常认为 Java 意味着重量级,这种判断更多地与 JVM 提供的用于构建框架的 API 和工具有关,这些历来基于运行时使用,运行时注释分析及构建应用程序的方式不可避免地导致内存消耗增加。

相比之下,预编译将编程语言转换为 Java 字节码或将字节码转换为机器代码的过程 ,对许多开发人员来说是未知的,但在某些应用程序平台被大量使用。Micronaut 所做的是采用这一理念并将其应用于服务器端编程。

Java 应用程序需要等待几秒钟才可启动的日子已经过去,这要归功于微服务的出现,但这并不是 Micronaut 的唯一优势,它还集成了追踪和安全工具,并且不必容器化。如果使用 Java 应用程序,研发人员可能需要依赖容器实现许多功能。Micronaut 让这些功能都在运行时编译,因此容器需求就会消失,这让测试变得更加容易。

参考链接:
https://www.forbes.com/sites/oracle/2019/01/07/grails-founder-what-java-developers-dont-know-about-memory-can-cost-them-money-in-the-cloud/#2792bb3044e1

Micronaut 项目开源地址:https://github.com/micronaut-projects/micronaut-core