Quarkus云原生开发框架

Quarkus是什么?

Quarkus的创建是为了使Java开发人员能够为现代的、云原生的世界创建应用程序。使用GraalVM项目来让Java应用拥抱云计算的。

是面向 Kubernetes 的原生Java框架,由众多Java库和标准精心打造。其目标是使Java成为Kubernetes和无服务器环境的领先平台,同时为开发者提供一个框架,以解决更广泛的分布式应用架构问题。

Quarkus是在Apache许可证2.0版下许可的开源项目。拥有开放的社区,贡献、想法和讨论都是公开进行的。

分为两种执行方式,一种是通过Java虚拟机执行(Quarkus+OpenJDK),另一种是通过编译成本地代码执行(Quarkus+GraalVM)。

允许开发者自动生成Kubernetes资源,包括构建和部署容器镜像,而无需手动创建YAML文件。

云原生时代的开发语言需求

在当前云计算微服务逐渐占据互联网软件开发主流的背景下,在云上部署的软件应用有两个硬指标:

  1. 较少的内存占用
  2. 快捷的启动速度

而Java应用程序则面临尴尬,启动时间长,内存需求大。Java语言有非常强劲的动态特性,常用开发框架都会在启动和运行时进行动态加载和反射操作等处理,程序启动就绪所需要的时间比较长。

Java 本地化编译能力

Java语言其实是有编译阶段的。Java源程序通过javac编译成与平台无关的二进制class机器码,然后再通过java来运行。执行过程中,为了做到速度和效率的最优化,java虚拟机采用先解释执行,再局部优化编译执行,通过编译器强力优化后就是机器二进制代码了。这就是经典的JIT(Just in time)虚拟机运行机制。

相对应的编译过程为AOT(ahead of time),即事先进行编译,比如GCC编译器提前编译C语言程序。

Java在AOT编译方面一直在努力,目前的成果就是令人瞩目的GraalVM项目,可以通过native-image工具将java应用转换为本地原生应用。

标准技术

Quarkus 基于Java EE / Jakarta EE 和 Microprofile 的部分规范。

其中核心是经过部分裁剪的CDI规范,用来进行组件注入,组件生命周期管理和事件捕获。

所支持的JavaEE规范中,Servlet可以部署web应用,JaxRS暴露Rest服务,JPA提供对象数据到关系数据库中的映射能力。 另外可以用BV规范进行组件数据的统一校验,可以使用JsonB和Jaxb进行数据的序列化操作。

Microprofile规范中,核心使用的是config规范,即统一定义配置项。对于微服务应用来说,配置项的定义和使用是重要的开发考虑因素。

其他使用的Microprofile规范有OpenTracing, OpenAPI, JWT, REST Client, Reactive Messaging, FaultTolerance, Health, Metrics等等。 以上可以看成是和SpringCloud的对应组件。

Quartus中集成的重要组件有:

  • Vertx,集成使用,提供Web访问和 ReactiveStream 数据。
  • Hibernate,提供JPA能力,进行ORM映射。
  • Resteasy,提供Rest数据发布能力,JaxRS规范实现。
  • Camel,数据集合转换能力和DSL解释。
  • Smallrye,提供Microprofile规范API实现。
  • Elytron,安全组件,提供SSL,证书管理,用户管理等功能。

另外还集成了Netty, Infinispan, Kafka, Nayarana等。

Quarkus核心中,包含了自行开发的CDI规范实现Arc项目,用来管理组件,解析组件之间的关系,进行注入和生命期管理。一个自研项目Gizmo,进行字节码写入。

Quarkus充分利用了Maven的构建组装能力。项目提供了maven插件进行编译,测试,运行,动态调试,二进制程序生成等全部开发能力。也可以使用Gradle进行构建。

版本发布

Quarkus 采用经典 x.y,x 版本发布模式,开发社区非常活跃,发布节奏很快。 同时提供 LTS 长期支持版本,目前 LTS为 3.2。下一个 LTS 会是 3.8

网址为: Quarkus

我们提供针对 Quarkus 框架的源码级技术支持和软件应用开发。

同时提供深入技术培训,请参考 Quarkus 核心编程