Quarkus云原生开发框架全面解析

October 5, 2021

在Java领域云原生开发框架,强烈推荐红帽JBoss开发团队研发的Quarkus框架。 之前写过两篇公众号文章介绍过Quarkus。2019年QCon北京开发者大会上,演讲议题《Java 容器化部署–从应用服务器到云原生》https://qcon.infoq.cn/2019/beijing/track/500,应该是国内第一次大型开发会议介绍此开发利器的主题。

那时Quarkus 1.0还没有发布,但已经表现出王者之气。

Java语言在云时代,其固有特点限制了一些应用场景,最明显的两处就是启动时间太长和占用内存较大。 Oracle研发团队开发出GraalVM,可以将Java程序编译成本地(Native)程序,极大的解决上述两个问题。几个开发团队不约而同的都采用编译Java应用思路来设计开发框架,除了Quarkus,还有Oracle开发的Helidon,Object Computing开发的Micronaut,以及Spring社区的Spring Native。

其中Helidon和Quarkus用的Jakarta EE API (Quarkus做了一些取舍,重要部分都可以用JEE API),SpringNative采用Spring框架API,Micronaut则是采用了自己定义的API。 Spring框架自身存在很多Java反射用法,可能是导致SpringNative1.0发布迟缓的原因,这个局面可能需要在Spring6大版本升级后才能改善。JEE API因为只有很薄的一层接口,框架的大量细致工作在于对实现的处理上。

JBoss团队之前积累的优势淋漓尽致的显现出来,之前应用服务器,各个规范和扩展就全面是自行研发,面对Quarkus的需求,JBoss集中了精兵强将,不但在短时间内设计出精良的Quarkus内核,而且快速的使Resteasy,Hibernate,Undertow等重要组件可用在Quarkus上,并根据native化需求,重构重写了部分关键组件,如Arc,Panache,Kogito,Mutiny,引入Smllrye,Vertx等优秀功能组件。 写这篇文章之时,Quarkus发布版本是2.2.2,成熟度已经符合生产系统要求。和Openshift/Kubernetes配合可以构建云原生应用系统。

从2018年末开始接触Quarkus项目,一直在关注和研究,对整个项目发展的脉络很熟悉。 Quarkus目前是一个功能非常全面Java云原生开发框架,功能如下:

微服务开发,包括多个层次的技术组件支持。
响应式服务开发,提供各个方面的响应式编程接口实现。
云原生支持部署应用到Kubernetes和Openshift
通过Microprofile API支持微服务治理和可观测性各项功能
支持JPA,也可以使用Panache (ActiveData)支持数据持久化
支持各种Nosql数据库
支持各种消息和缓存中间件
支持RPC和序列化机制
良好的安全功能,和外部安全框架集成
提供Camel扩展,和外部系统集成
使用Kogito,提供工作流程和规则处理支持
支持云计算环境,提供对主流云平台serverless环境支持
快速构建工具,支持主流IDE环境
测试扩展方面进行单元测试和集成测试
提供对Spring框架API的支持
其他数十外部系统的集成访问

在业务系统开发领域,Java语言优势明显,所以Quarkus面向的市场非常广大,就是和K8s配合来实现云原生应用开发。 已经有很多面向互联网用户的应用系统上线部署,都是用Quarkus来开发的。

梳理了相关技术知识,形成三个模块,分别是微服务开发和治理、Java云原生开发框架、Quarkus开发深入解析。 可以作为业务软件系统开发参考,进行技术咨询,也可以作为技术培训课程大纲使用。

模块A 微服务开发和治理

内容简介: 介绍Web微服务技术发展演进路线,对重点技术进行分析说明。全面覆盖Java微服务主流的框架和服务治理技术,开发者可以了解Java微服务相关技术知识。并为下一部分Quarkus开发框架铺垫基础知识。

内容纲要: 一、Web应用

  1. 分布式组件技术
  2. Web时代促使JavaEE诞生
  3. Spring框架横空出世
  4. MVC模式百花齐放

二、企业级软件应用

  1. 持久化的选择
  2. EJB业界大讨论和取舍
  3. 事务,企业应用核心技术
  4. Webservice的思考

三、互联网应用

  1. Rest数据服务提供
  2. 前端技术的演变
  3. RPC信息通道
  4. 消息中间件
  5. 无状态需求和分布式缓存广泛应用
  6. 部署单元的技术分析

四、可启动Java应用程序

  1. 可部署和直接启动
  2. 微服务维度分析
  3. 快速迭代和开发组织变化

五、Springboot巨大成功

  1. 先天优势的SpringConfig
  2. 各种优选后开箱即用的starter
  3. 快速构建项目的脚手架
  4. 异步响应式优化

六、微服务基础设施

  1. 命名和查询服务
  2. 集中日志处理分析
  3. 服务降级和熔断保护
  4. 集群和状态复制
  5. 路由处理和API网关
  6. 统一安全服务

七、Java微服务程序

  1. SpringCloud框架
  2. MicroProfile规范
  3. 可引导的JavaEE应用
  4. 性能分析

模块B Java云原生开发框架

内容简介: Java云原生开发时面临的挑战和应对之道,黑科技GraalVM技术原理和应用。开发框架Quarkus项目实战分析和实现原理,对其中重点的功能模块和外部集成技术进行分析。云原生开发运用Kubernates平台,针对其能力在设计时需要考虑的模式。云原生对于服务治理的技术实现。

内容纲要: 一、Java语言云原生对比和分析

  1. 容器和容器编排技术
  2. Java微服务的容器化部署
  3. 启动时间和内存占用技术说明
  4. 架构相似性

二、GraalVM

  1. 介绍和技术分析
  2. 生成本地二进制应用
  3. Java程序本地化的若干障碍

三、Quarkus实战

  1. Java云原生本地应用
  2. 项目结构分析
  3. 核心功能模块
  4. 基于JavaEE规范API和改进
  5. 和外部服务设施的集成
  6. 构建部署
  7. 测试功能

四、微服务框架

  1. CDI注入实现
  2. Web服务
  3. 数据持久化
  4. 响应式异步编程
  5. 配置项支持
  6. 微服务治理API

五、服务集成

  1. Vertx功能
  2. Nosql数据服务
  3. 消息系统
  4. 缓存服务
  5. RPC系统访问
  6. 安全功能实现

六、Kubernetes云原生开发

  1. 多个组件副本构建集群
  2. 有状态的StatefulSet
  3. 工作任务Job和CronJob
  4. 多节点管理
  5. 应用配置
  6. 灵活存储
  7. Ingress
  8. 可扩展的CRD

七、云原生服务治理能力

  1. 现代应用开发提出更高要求
  2. 服务治理
  3. 集群部署和流量分配
  4. 软件升级和回滚
  5. 安全性和用户管理
  6. 可观测性

模块C Quarkus开发深入解析

内容简介: 面向已经开始采用Java开发云原生应用的开发团队,或者是希望对Quarkus有深入了解的开发者。提供对于Quarkus实现机制深入解析,以及对重要的功能组件实现分析。可以自己编写扩展,更好的编写面向云原生环境高性能应用程序。

内容纲要: 一、Quarkus项目实战分析

  1. 项目结构和代码分析
  2. dev调试功能
  3. 项目生成和cli能力

二、开发框架深入解析

  1. 启动过程
  2. native编译过程分析
  3. builditem和编译链
  4. 设计逻辑分析
  5. 配合GraalVM,更好的支持native

三、核心组件

  1. Configure处理过程
  2. Arc功能组件
  3. Vertx和Netty网络框架
  4. Resteasy提供Web服务
  5. Hibernate组件和Panache ActiveData功能
  6. Kafka,JMS等消息系统集成
  7. 缓存的应用和缓存系统集成

四、Serverless能力

  1. Serverless应用前景
  2. 对于主流公有云支持
  3. Funqy实现
  4. AWS Lamdba思考
  5. AWS云服务集成

五、数据和流程

  1. Quarkus对Camel的支持
  2. 数据集成
  3. Kogito云原生设计
  4. 工作流程和规则

六、安全功能

  1. Web安全
  2. 加密通道
  3. 授权认证功能
  4. 安全编程和安全漏洞

七、丰富功能

  1. 支持Spring框架API
  2. 文字模板引擎
  3. 日志框架
  4. 开发自己的扩展