QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

全栈 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:312423
用户头像

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

关注

评论 2 条评论

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

2022年公共充电站运营端用户体验指数(UEI)发布

易观分析

汽车 新能源

如何挑选合适的共享自助洗车机

共享电单车厂家

自助洗车机 自助洗车机价格

智能自助洗车设备什么牌子好

共享电单车厂家

自助洗车机 智能自助洗车设备 智能共享洗车机

ESB基础样例前置资源配置

agileai

数据治理 系统集成 数据集成 企业服务总线 预置样例

小游戏开发是进行网游的必需环节,你知道吗?

开源直播系统源码

软件开发 小游戏开发 直播系统 app源码

Data Summit 2022 大会资料分享(共23个)

墨天轮

数据库 AI 数据仓库 数据湖 BI

无人24小时自助洗车代理怎么做

共享电单车厂家

自助洗车加盟 自助洗车代理

高分神器,百万考生都在用的高效记忆方法,助你过目不忘,决胜高考!

图灵教育

高考 脑科学

百问百答第41期:应用性能探针监测原理-Java探针

博睿数据

智能运维 博睿数据 性能检测

隐藏在 graph-ocean 背后的星辰大海

NebulaGraph

ORM框架 图数据库 知识图谱 Nebula Graph

中建普联与数商云达成战略合作协议,共同打造建设行业数智化发展新高地

数商云

产业互联网 数字化转型 企业数字化

openGauss“用户故事”正式上线!一键分享实践经验,限量版礼物等你拿

openGauss

opengauss 开源社区 用户故事

为什么不能使用 datax 直接读写 hive acid 事务表?

明哥的IT随笔

flask框架自主学习

恒山其若陋兮

6月月更

3.0.0 alpha 重磅发布!九大新功能、全新 UI 解锁调度系统新能力

亚马逊云科技 (Amazon Web Services)

UI 系统 新功能 Tech 专栏

想做自助洗车不知道怎么加盟?

共享电单车厂家

自助洗车加盟

OpenHarmony 3.1 Release版本关键特性解析——HDI硬件设备接口介绍

OpenHarmony开发者

OpenHarmony 3.1 Release

如何删除 git 仓库中的 .idea 文件?

程序员小航

git IDEA

为什么越来越多的开发者放弃使用Postman,而选择Apifox

Liam

前端 后端 Postman swagger API文档

一站式智能运维解决方案,企业系统的隐形守护者

云桌派

阿里云 IT 解决方案 智能运维 客户案例

TiFlash 源码阅读(三)TiFlash DeltaTree 存储引擎设计及实现分析 - Part 1

PingCAP

低代码开发是新瓶装老酒吗?

菜根老谭

【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!

冰河

并发编程 多线程 高并发 异步编程 6月月更

没有行业经验能否加盟自助洗车

共享电单车厂家

自助洗车加盟

半监督式机器学习提升银行业对于团伙欺诈交易行为的风控能力

易观分析

银行

哈希彩hash竞猜系统开发逻辑游戏玩法(源代码)

开发微hkkf5566

数据库:高并发下的数据字段变更

C++后台开发

数据库 高并发 后端开发 Linux服务器开发 C++后台开发

flutter系列之:构建Widget的上下文环境BuildContext详解

程序那些事

flutter 程序那些事 6月月更

使用APICloud AVM多端框架开发课程表功能

YonBuilder低代码开发平台

前端开发 APP开发 APICloud 多端开发 AVM

网站FAQ页面有必要做吗?该如何做?

小炮

进出口管理系统解决方案

低代码小观

供应链 企业管理系统

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