“AI 技术+人才”如何成为企业增长新引擎?戳此了解>>> 了解详情
写点什么

全栈 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

公众号推荐:

2024 年 1 月,InfoQ 研究中心重磅发布《大语言模型综合能力测评报告 2024》,揭示了 10 个大模型在语义理解、文学创作、知识问答等领域的卓越表现。ChatGPT-4、文心一言等领先模型在编程、逻辑推理等方面展现出惊人的进步,预示着大模型将在 2024 年迎来更广泛的应用和创新。关注公众号「AI 前线」,回复「大模型报告」免费获取电子版研究报告。

AI 前线公众号
2018-10-23 05:312036
用户头像

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

关注

评论 2 条评论

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

没开发人员,接到开发物联网系统的活儿,干不干?

AIRIOT

低代码 物联网 低代码,项目开发

HDD杭州站•ArkUI让开发更灵活

HarmonyOS开发者

HarmonyOS

Python开启虚拟环境

技术小生

8月月更 Python虚拟环境

版本控制篇 | 龙智邀您共赴GOPS全球运维大会,探索大规模、敏捷、高质量、开放式的软件研发与运营之路

龙智—DevSecOps解决方案

运维 DevSecOps GOPS大会

2022年6月互联网医疗领域月度观察

易观分析

医疗 市场

2000多字教你三招在Linux中找出大文件,最后一个命令简直太简单了!

wljslmz

Linux 签约计划第三季 8月月更

秘乐短视频挖矿系统开发详情

开发微hkkf5566

多业务模式下的交易链路探索与实践

转转技术团队

中台 状态机 FSM

2022 CCF国际AIOps挑战赛决赛暨AIOps研讨会报名已开启

BizSeer必示科技

人工智能 阿里云 华为云 信通院

不是吧?还有人不会定位线上MySQL慢查询问题?

Java永远的神

Java MySQL 数据库 程序员 面试

后台权限系统的设计以及主流的五种权限模型详解

Java全栈架构师

Java 程序员 架构 面试 后端

这份阿里强推的并发编程知识点笔记,将是你拿大厂offer的突破口

了不起的程序猿

数据库 高并发 java程序员 大厂面试 java;

WindTerm:新一代开源免费的终端工具,GitHub星标6.6k+,太酷了!

沉默王二

GitHub 终端工具

RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境 及 配合CubeMX开发快速上手)

矜辰所致

RT-Thread 8月月更

【7.29-8.5】写作社区精彩技术博文回顾

InfoQ写作社区官方

优质创作周报

Apache APISIX Ingress v1.5-rc1 发布

API7.ai 技术团队

APISIX kubenetes Ingress Controller

关注微信公众号,自动登陆网站

源字节1号

微信小程序

有多一只“手”的机器狗出没?就在昇腾AI开发者创享日·南京站

科技热闻

数据治理体系演进简介

网易数帆

大数据 数据治理 元数据 数据标准

开源一夏 | Java格式化日期 微秒

六月的雨在InfoQ

开源 8月月更

centOS7.3 安装启用 iptables 记录

JavaPub

Linux centos7 iptables

自从用了 Kiali 以后才知道,配置 Istio 的 流量管理 是如此容易

万猫学社

云原生 istio envoy kiali

五大理由告诉你为什么开发人员选择代码质量静态分析工具Klocwork来实现软件安全

龙智—DevSecOps解决方案

静态代码分析 代码静态分析 SAST工具 SAST

莅临GOPS大会龙智展位,获取Forrester最新报告:《Forrester Wave™:2021年第四季度企业服务管理报告》

龙智—DevSecOps解决方案

ITSM Forrester Wave Forrester

即刻报名|Apache Kylin X Apache DolphinScheduler:大数据底座的构建和展望

Kyligence

数字化转型 数字分析 数据调度

内存问题难定位,那是因为你没用ASAN

华为云开发者联盟

云计算 开发 内存

官方发布·2022南京智博会定于10月份在新庄国展召开

AIOTE智博会

SonarQube即将亮相第十八届GOPS全球运维大会

龙智—DevSecOps解决方案

代码安全 GOPS大会 运维、 代码质量检测工具

手摸手带你 在 Windows 系统中安装 Istio

万猫学社

云原生 istio windows

双因子与多因子身份验证有什么区别?

SEAL安全

身份验证

硅谷来信:快速行动,Facebook、Quora等成功的“神器”!

博文视点Broadview

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