写点什么

全栈 JVM 框架 Micronaut 通向 1.0 版本之路

  • 2018-10-23
  • 本文字数:5217 字

    阅读完需:约 17 分钟

经过一年的发展,随着 Object Computing (OCI)发布候选版本 RC1 RC2 RC3 Micronaut 1.0 在过去三周内加速了。Micronaut 是一个基于 JVM 的全栈框架,用于创建可以用 Java、Groovy 和 Kotlin 编写的基于微服务的应用程序。

在今年早些时候的 Greach 大会上,OCI 首席软件工程师 Graeme Rocher 和 Grails&Micronaut 产品主管介绍了Microaut。随后,在5 月底,Micronaut 开放了源代码。

三个候选版本包括以下新特性: GraalVM 本地镜像支持、 Swagger (OpenAPI)编译时支持、编译时验证以及编译时映射注解。Micronaut 的测试框架 Micronaut Test 1.0 RC1 也是在 RC3 中发布的。

Micronaut 使用了依赖注入和预编译(AOT)。以下是来自其网站的介绍:

基于反射的 IoC 框架为代码中的每个字段、方法和构造函数加载和缓存反射数据,而使用 Micronaut,应用程序的启动时间和内存消耗将不受代码库大小的限制。

Netty 为基础,Micronaut 提供了他们自己的非阻塞 Web 服务器。为了减少内存消耗,Micronaut 反应式客户端可以用声明的方式构建,并在编译时实现。

“配置文件(Profiles)”

Micronaut 内置了几个配置文件,用于生成可以运行的应用程序框架,作为开发Web 或命令行应用程序的构建块。每个配置文件由一个模板和特定于该配置文件的附加命令组成。例如, create-app启动服务的配置文件,其中包含用于构建控制器(create-controller)和客户端(create-client)类的附加命令,这些命令在其他配置文件中可能不可用。

入门

下载并安装Micronaut 之后,可以通过命令行或Microaut shell 创建应用程序。受到 Grails 中人们熟知的命令行接口的启发,Micronaut 遵循了同样的应用程序创建概念。考虑以下命令:

复制代码
$ mn create-app org.redlich.demo

如下所示,这将创建一个 Java 应用程序和 Gradle 项目,根文件夹为demo,包名为org.redlich



注意,其中包含了测试目录结构、Dockerfile 和 YAML 配置文件。文件micronaut-cli.yml提供了关于项目的具体信息:

复制代码
profile: service
defaultPackage: org.redlich
---
testFramework: junit
sourceLanguage: java

生成的 Java 源代码文件Application.java启动了一个 Micronaut 服务器:

复制代码
package org.redlich;
import io.micronaut.runtime.Micronaut;
public class Application {
public static void main(String[] args) {
Micronaut.run(Application.class);
}
}

构建并运行这个初步应用:

复制代码
$ ./gradlew run

向上面的项目中添加一个控制器:

复制代码
$ mn create-controller HelloController

如下所示,文件HelloController.javaHelloControllerTest.java被添加到项目。



在生成的HelloController.java文件中,注意下@Controller注解中的端点如何根据HelloController控制器的名称命名为“/hello”:

复制代码
package org.redlich;
import io.micronaut.http.annotation.Controller;
import io.micronaut.http.annotation.Get;
import io.micronaut.http.HttpStatus;
@Controller("/hello")
public class HelloController {
@Get("/")
public HttpStatus index() {
return HttpStatus.OK;
}
}

Java 和 Gradle 是默认的语言和构建工具。要生成 Groovy 和 Kotlin 应用程序,请执行下面的命令:

复制代码
$ mn create-app org.redlich.demo --lang groovy
$ mn create-app org.redlich.demo --lang kotlin

也支持生成 Maven 项目:

复制代码
$ mn create-app org.redlich.service --build maven
$ ./mvnw compile exec:exec

Micronaut 教程第一部分中,OCI 软件工程师 Sergio del Amo Caballero 演示了如何使用 Java、Groovy 和 Kotlin 三种语言创建三个微服务。Rocher 向 InfoQ 介绍了这个最新版本。

InfoQ:是什么促使 OCI 开发了这个新的微服务框架?

Graeme Rocher: 在过去的几年里,技术领域发生了巨大的变化,特别地,如果你看看类似 Docker、Kubernetes 这样的系统以及无服务器运动,你会发现,它们实际上都针对低内存微服务和低开销应用程序而进行了优化。其结果是,像 Go 和 Node 这样的语言在这些平台上体现出了比 Java 更显著的吸引力,因为它们具有出色的冷启动性能和内存消耗。有一个非常好的问题,可以问下自己,如果 Docker 和 Kubernetes 团队有各种技术选项,为什么要选择 Go 而不是 Java 来实现这些平台?在我看来,答案很简单:如果他们用 Java 编写了那些技术栈,并且有了今天这些技术选项,那么我们就都需要一台超级计算机才能让笔记本电脑在本地运行它们。

原因是多种多样的。一方面是语言层面的限制。JVM 是一项惊人的技术成果,但对于短时间运行的操作(如无服务器函数),它提供的优化往往就不存在了,但是,你仍然需要拖着整个 JVM 来运行你的应用程序。像 GraalVM 这样的项目有可能通过将 Java 应用程序编译成本地镜像来解决这些限制,但是,坦率地说,框架设计人员在提高 Java 应用程序的效率方面有很大的作用。

在框架层,传统的 JVM 框架(如 Spring 和 Java/Jakarta EE)已经有超过 10 年的历史了,那时,每个人都在部署单体应用程序,它们主要是围绕着反射和注解的运行时分析来构建。这种方法的问题在于,由于各种各样的问题,从类型擦除,到有限的注解 API,再到反射逻辑的相对缓慢,所以,几乎不可能构建一个 Java 框架,启动速度超快,而内存消耗超低。框架运行时的负担是巨大的。如果你观察一下 Spring 在运行时所做的工作,就会发现这有些不可思议,从用 ASM 解析字节代码来生成注解元数据,到积极缓存反射信息以避免不可避免的重复读取减慢速度。在缓存所有这些运行时生成的信息与实现快速启动和低内存消耗的目标之间存在着不可调和的冲突。

我们相信,Micronaut 是面向未来的框架的基础,通过消除所有反射的使用,以及在编译时通过一组注解处理器和执行预编译(AOT)的 AST 转换,生成所有注解元数据、代理和框架基础设施,消除这种矛盾。这使得 Micronaut 能够实现极快的启动速度、低内存消耗,并且实现与 GraalVM 本地镜像兼容性的重大改进。

当然,Java 生态系统有大量的项目是基于 Java 的,像 Spring、Kafka、Cassandra、Hadoop、Grails 等,它还有一个丰富的语言生态系统,包括 Groovy、Scala、Kotlin、Java、Clojure 等。因此,这也不全是和低内存占用的微服务与无服务器应用程序有关,有许许多多的工作负载仍然受益于 JVM 和 JIT。然而,即使对于这些工作负载,我们也相信,通过在启动时间和内存消耗方面比其他框架更高效,Micronaut 可以提供很多东西。

InfoQ:你们有计划在 Micronaut 中支持 JVM 语言 Scala 和 / 或 Clojure 吗?

Rocher::我们在构建 Micronaut 时已经考虑了多种语言,实际上,我们现在已经通过为每种语言创建一个公共的 AST 来支持 Java、Kotlin 和 Groovy。我们计划在某个时候通过 Scala 编译器插件(参见这里)添加Scala 支持,不过,如果Scala 社区有人希望帮助我们加速这个过程,我们很乐意听取他们的建议。Clojure 很有趣,关于如何实现Clojure 支持,我们当然需要Clojure 社区的输入。

InfoQ:既然 GraalVM 支持非 JVM 语言,是不是有一天可以使用 GraalVM 支持的语言构建 Micronaut 应用程序?

Rocher:我想可以肯定,它将促成“挎斗模式(sidecars)”,并且更容易与其他语言一起集成到一个 Micronaut 应用程序中。

InfoQ:您预计 Micronaut 正式版会在何时发布?

Rocher:Micronaut 1.0 正式版将于 10 月 23 日发布。

InfoQ:Micronaut 的路线图是什么样子,尤其是在正式版本发布之后?

Rocher:Micronaut 1.0 就是要建立一个稳定的基线。由于 Micronaut 使用 AOT 编译,所以预编译元数据格式需要一个稳定的 1.0 版本。一旦 1.0 发布,我们计划与更多的技术(如 RabbitMQ、Kubernetes、GRPC、GraphQL 等)进行集成。

相关资源

查看英文原文: The Road to Micronaut 1.0 - A JVM-Based Full-Stack Framework

2018-10-23 05:312649
用户头像

发布了 1008 篇内容, 共 412.0 次阅读, 收获喜欢 346 次。

关注

评论 2 条评论

发布
用户头像
和play有什么区别
2018-11-13 07:32
回复
没有更多了
发现更多内容

实力强劲!云起无垠上榜《数字安全护航技术能力全景图》

云起无垠

神州鲲泰“电网变电站边缘计算解决方案

神州数码

2024青岛软博会,招展工作顺利进行,诸多知名软件企业踊跃报名

AIOTE智博会

入选2024 分布式算力十佳“星耀”案例,天翼云为算力实践提供样板参考

极客天地

江苏徐州正规等保测评机构有吗?在哪里?

行云管家

等保 等保测评 徐州

一文了解云真机的使用

优测云服务平台

手机 测试 兼容性测试 移动设备识别

开启SRE培训之旅:美高梅(MGM) 启动服务稳定性建设

雅菲奥朗

SRE SRE培训 SRE考试 SRE认证 SRE Foundation

为什么我不建议用Excel做进销存系统?

源字节1号

小程序 开源 前端 后端

制造业几大系统(MES/WMS/QMS/ERP)的集成

万界星空科技

ERP mes WMS仓库管理 万界星空科技 QMS

数业智能心大陆用AI解锁心灵健康

心大陆多智能体

智能体 AI大模型 心理健康 数字心理

畜牧业也需要堡垒机吗?为什么?

行云管家

网络安全 等保 堡垒机 畜牧业

红圈CRM携手金蝶ERP,彻底告别数据孤岛,效率飙升的数字化转型之旅!

聚道云软件连接器

案例分享

Web前端浅谈ArkTS组件开发

OpenTiny社区

typescript 前端 OpenTiny

MES系统助力制造业数字化转型

万界星空科技

数字化 数字化运维 生产管理系统 mes 万界星空科技

淘宝商品评论API返回值中的评分与星级解读

技术冰糖葫芦

API Explorer API 编排 api 货币化 API 文档

有人泼冷水:为什么 AI 基础设施创业如此艰难?

小猿姐

创业 AI AI 基础设施

GPU云服务器:计算型与渲染型的最佳应用场景

Ogcloud

gpu 云服务器 GPU云服务器 云服务器租用

IPIDEA分享:匿名代理的定义及其工作原理

IPIDEA全球HTTP

代理IP 匿名代理

1688 商品详情的 API 接口获取全解析

Noah

PPT插入的图片去哪找?3款自带图库的在线PPT软件推荐!

彭宏豪95

效率工具 职场 PPT 办公软件 AI生成PPT

创新引领高质量发展,中微公司庆祝科创板上市五周年

新消费日报

凤凰项目(Phoenix Project)精要 - 概念

Anliven

读书笔记 团队管理 DevOps 运维 团队效能

全栈JVM框架Micronaut通向1.0版本之路_Java_Michael Redlich_InfoQ精选文章