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

经过一年的发展,随着 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.java
HelloControllerTest.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: 在过去的几年里,技术领域发生了巨大的变化,特别地,如果你看看类似DockerKubernetes这样的系统以及无服务器运动,你会发现,它们实际上都针对低内存微服务和低开销应用程序而进行了优化。其结果是,像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、CassandraHadoop、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等)进行集成。

原文 

http://www.infoq.com/cn/news/2018/10/the-road-to-micronaut-1.0

本站部分文章源于互联网,本着传播知识、有益学习和研究的目的进行的转载,为网友免费提供。如有著作权人或出版方提出异议,本站将立即删除。如果您对文章转载有任何疑问请告之我们,以便我们及时纠正。

PS:推荐一个微信公众号: askHarries 或者qq群:474807195,里面会分享一些资深架构师录制的视频录像:有Spring,MyBatis,Netty源码分析,高并发、高性能、分布式、微服务架构的原理,JVM性能优化这些成为架构师必备的知识体系。还能领取免费的学习资源,目前受益良多

转载请注明原文出处:Harries Blog™ » 全栈JVM框架Micronaut通向1.0版本之路

赞 (0)
分享到:更多 ()

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址