百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 博客教程 > 正文

「Quarkus技术系列」「云原生架构体系」打造基于Quarkus

connygpt 2024-11-12 10:09 11 浏览

前提说明:

Ok,大家好,今天呢,我们的分享主题是“如何打造一个基于Quarkus的云原生微服务架构”,无论你之前是否了解或者熟悉Quarkus,希望通过今天的技术分享可以让你认识和知道Quarkus。

进入前奏:

好了,我们废话不多说,进入主题,我觉得要是谈到Quarkus,那么我们肯定需要先分析一下,目前Java和云原生服务的关系以及在行业中它们的风向、行情。


Java和云原生在行业的行情和风向

从Java角度而言:

虽然伴随着时间的流逝和技术的日新月异,Java的地位慢慢这有所下滑,但是“瑕不掩瑜”,Java陪伴我走过了很多的美好的时光,而且它仍然是我们非常瞩目的编程语言!但不得不说,对于微服务层面而言,Java无论是RPC、序列化、传输协议、技术体系都有着其他语言无法比拟的实力,但是我们渐渐发现,微服务2.0以及云原生的到来,让Java可能有点应对不及,因为在Java的领域内,主要依靠两个核心来源进行技术推动,一、就是依靠Spring技术生态圈;二、就是Oracle官方进行推动。而Oracle官方也推出了几个微服务框架和技术框架,比如说,Helidon 是由 Oracle 在 2018 年 9 月份推出的轻量级微服务框架Micronaut,但是不都是很理想,还是有主流的Spring家族所掌控着。而Spring的技术重心还未完全转移到云原生上面。

从云原生角度而言:

我们都知道Kubernetes已经是我们目前技术领域、运维部署领域、容器化领域的行业标准,而且更是在云原生领域大方光彩!那么如何让Java应用更加完美的转化到Kubernetes层面就是一个很大的难题啊!

别担心,Quarkus帮助我们解决了这个难题!

进入正题:

首先我们将Quarkus云原生框架的实践流程分为6个部分,我们称之为“夸克斯实践6步!”,它们都有什么呢。


进入Quarkus的基本概念:

首先Quarkus,我们也可以叫它的中文名称“夸克斯”,相信大家也知道阿里也有一款浏览器叫“夸克”,有点相似,差一个s,大家别记混了,它是RedHat公司开源的一款Java云原生服务框架,到这里,说一句题外话?kubernetes很牛!它们两大“东家”,一个就是众所周知的谷歌,另一个就是RedHat公司,它是RedHat公司亲自操刀开发的!这能不强大吗!

Quarkus的特点有哪些:

我们来说说看它的特点都有那些!

  1. 专门用于创建适配于GraalVM和OpenJDK HotSpot的云原生框架。这说明它可以并肩与两种虚拟机的存在!对HotSpot虚拟机而言(无论是Oracle JDK还是OpenJDK我们都不陌生!),我们就不多说了,这里特别说一下GraalVM虚拟机,它是一个新时代的虚拟机(特别是它有一个强大的编译器),可谓是Quarkus性能优化的灵魂所在!
  2. 专门用于针对容器优化Java应用程序,并使其成为无服务器架构(甚至面向与Faas化,这也是GraalVM的功劳之一)、云上服务、还有就是我们重点关注的Kubernetes模式下的云原生服务
  3. 主要的目的就是为了集成Kubernetes(特别是Kubernetes集群)而生的,非常的具有针对性和专业性!

Quarkus的优点

我们在看看Quarkus的优点吧!

  1. (JVM的升级)首先我们在回到GraalVM这个概念上来,刚刚说到了GraalVM的编译器功能,那么我们就知道,它是可以通过借助GraalVM的编译器实现内联机制,逃逸分析以及独特的优化技术,可以提升2至5倍的性能。此外特意多说一下,GraalVM就是为了代替JVM原有的C2编译器,才诞生的,C2编译器是Ciff click 大神的精心之作,但是过于庞大和复杂,甚至到大神自己都不想维护了!所以JVM优化的瓶颈已经慢慢停留在了C2编译器,这对Java的发展是非常不利的!,所以才有了GraalVM,并且也是Java实现的,有兴趣的小伙伴们,可以好好研究啊!
  2. (Spring层面的升级)我们都知道Spring框架不是性能为优先,而是扩展性闻名于世,而Quarkus的扩展能力并不比spring差!和Spring一样,完全可以集成Eclipse MicroProfile、Hibernate、Apache Camel和Eclipse Vert.x等开源库、甚至还可以将SpringBoot迁移到Quarkus生态,这是不是非常方便呢!解决了很多公司或者开发团队的迁移复杂的后顾之忧!
  3. (云原生的升级),之前我们开发Java项目而言,如果想做成Docker镜像或者Kubernetes镜像,那么只能依靠于额外的第三发插件或者开发库,导致我们的项目过于臃肿了,而且Spring对Docker或者K8s的支持也不太尽人意,但是有了Quarkus后,就可以与Docker和Kubernetes轻松集成,不依靠额外插件,它可以打造Docker资源(包含JVM模式Dockerfile、云原生模式的Dockerfile)、kubernete资源甚至是OpenShift资源。
  4. (服务启动性能提升)这个可是重头戏,在Quarkus服务中不只是单纯拥有JVM这一种运行模式。对于相同的应用程序代码,在原生模式下,服务启动速度非常快(大约可以缩短3倍的时间,可以减少我们很多的等待时间)、而且大多数的Spring项目会占用资源空间非常多,常常会造成很多OOM或者FGC,我相信大家都遇到过哈,之前的我们只能通过补救的方案,要不就是Spring的瘦身化,或者去提升JVM GC的能力,快速回收,无论是采用回收算法、还是机器的配置来解决这个问题,个人认为都只是补救的方面。但是有了Quarkus服务后,它解决了Spring项目占用庞大内存的问题,因为它本身很小且内存消耗低(特别是在原生模式下,底层水很深!),可以大大提高性能和资源使用率,这是不是说明我们以后可以很可能跟“OOM”说拜拜了?这里打上一个问号。

补充一点:借了GraalVM的光,Quarkus也解决了Java体系在跨语言层面来讲的很多问题,比如说,它可以支持更多种类的语言接入到Java的生态中(比如说,组合Java、JavaScript、Ruby 和 R 语言 )形成多语言微服务生态,岂不美哉!


Quarkus的基本开发流程

我们简称为“夸克斯开发6部”,让我们来看看它们都是什么?

  • 「搭建脚手架」第一步就是快速搭建属于Quarkus的应用云原生框架(这为构建应用服务奠定基础)
  • 「开发者模式」这个阶段代表两个含义:
  • 1:就是代表着我们需要进入开发状态了,当然这个是开玩笑的!
  • 2:重点要说的就是,Quarkus微服务应用的(开发模式)实现实时热部署能力(改动实时生效),就有点类似于SpringBoot的devTools或者spring loader、甚至收费的JRebel,这种情况需要额外引入包或者插件才可以,而我们Quarkus则直接作为自身的运行模式进行控制。进步的不是一点点啊!
  • 「进行业务编码」通过集成多个开源库以及相关业务需求进行开发相关的程序代码
  • 「建立集成测试」当开发编码完成之后建立版本,进行开发层面集成化测试阶段
  • 「生成镜像打包」建立CLI程序以及创建云原生可执行包文件,并建立对应的容器服务
  • 「部署基础K8S」将对应的可执行应用文件、容器文件、云原生文件包直接集成部署到Kubernetes集群中

Quarkus的环境搭建流程

了解了总体的开发实践流程之后,我觉得到这里才算是真正的开始实践Quarkus了,我们就先看看官方指定的,环境搭建流程,姑且称之为“Quarkus搭建5步”


  1. 你需要一个开发者工具,例如:IDEA、Eclipse等
  2. 你需要JDK11+版本的JVM环境资源
  3. 选择一个GraalVM虚拟机作为编译器的基础
  4. 最好选择一个Maven(3.8.1版本)/Gradle工具
  5. 最后基于官方最新Quarkus版本(2.3.0.Final)进行开发实现。

Quarkus服务架构的搭建

首先,框架的搭建方案大致有四种,分别是:

Maven构建Quarkus应用服务骨架

首先我们来看看第一种构建方式,通过Maven构建Quarkus应用服务骨架

Maven项目框架结构,包含了相关的内容主要是:

  • Quarkus服务所需要的Maven环境pom.xml文件
  • 基础的JAX-RS的资源服务类
  • 对应的JAX-RS的资源服务的测试类
  • Quarkus原生模式的测试类
  • 用于创建Docker容器的Dockerfile文件
  • 空的配置文件( application.properties )

Gradle构建Quarkus应用服务骨架

Gradle项目框架结构,包含了相关的内容主要是:

  • Quarkus服务所需要的Gradle环境build.gradle文件
  • 基础的JAX-RS的资源服务类
  • 对应的JAX-RS的资源服务的测试类
  • Quarkus原生模式的测试类
  • 用于创建Docker容器的Dockerfile文件
  • 空的配置文件( application.properties )

到这里,我们可以看到一点,为了让大家熟悉Quarkus、快速开发Quarkus服务,它采用了和SpringBoot非常相似的架构和参数配置,可以让我们快速进行迭代执行开发机制!


Quarkus Start Coding搭建项目骨架

我们主要关注我红线划分出来的这三个区域即可!

Quarkus Start Coding脚手架网站

  • Group:配置应用的Maven groupId,一般我们采用域名反向即可。
  • Artifact:配置应用的Maven artifactId,一般就是我们的应用名
  • Build构建方式: 这里可以选择:Maven/Gradle

而下面的Web部分:

则需要我们选择一个我们希望的Rest服务框架的实现方式:可以看到非常的多哈。

点击-Genrate your application,直接进行提交,就可以下载相关的代码骨架!

这与我们的Spring Initializer非常之相像。


开发工具构建Quarkus应用服务骨架

创建一个新的Quarkus工程项目

  • IDEA主菜单选择File -> New Project
  • 选择创建Quarkus应用程序
  • 选择default Server URL: https://code.quarkus.io.

[========] 翻页

IDEA安装Quarkus支持的插件

如果你的IDEA没有支持Quarkus功能那么需要进行安装插件,因为低版本是没有Quarkus项目的,我们可以选择图中的方式进行安装插件即可。


Quarkus应用程序的运行模式

首先呢 ,大家可以看到,Quarkus主要有三种运行模式,分别是开发模式、测试模式、生产模式!

Quarkus具有3种不同的启动模式:

  • Development(开发环境)
  • 直接运行quarkus:dev maven命令,则模式为DEVELOPMENT,这个我后面会详细介绍到的,特别方便我们的开发,可以实现改动的实时生效。
  • Test(测试环境)
  • 如果正在运行JUnit测试,则模式转为Test,例如:可以实现更加强大的Testcontainers或者原生可执行文件的测试等。
  • Normal(生产环境)
  • 出了以上的两种情况,都属于Normal模式,就是我们正式发布的可执行包文件。

Quarkus开发模式实现实时热部署

开发模式就像我刚才说的,它主要是对标Spring loader、Spring devtools、Jrebel等热部署机制

Quarkus的dev(开发模式)

如果使用开发模式,则后台编译实现热部署机制。

  • 当修改Java文件或者静态资源文件后,只需要刷新浏览器就会自动变更,实时很方便!

开启dev模式的Quarkus应用程序

如何启动开发模式的机制呢?

  • 在Maven项目根目录执行命令: mvnw quarkus:dev
  • Gradle项目根目录命令: gradlew quarkusDev
  • 也可以通过IDEA的Maven插件进行直接点击运行即可。
  • 注意:推荐使用Java11以上的JVM版本

Quarkus开发模式实现实时热部署

在上面左边的图中,显示了相关的,Quarkus资源服务接口代码:,返回的是一个Hello RESTEasy接口!

右边是我们执行curl命令调用服务接口的到的结果

此时当我们进行修改代码,将返回参数改为“hello”

重新进行调用后,可以看到结果是hello

可以说,真实非常的的方便!


Quarkus端点服务开发介绍

  • Quarkus框架对Restful Web服务的支持能力
  • Quarkus集成RestEasy框架,它是一个遵循Rest协议模式的JAX-RS,也是其定义REST端点的基础默认框架。
  • Quarkus框架对Restful Web服务的开发方式
  • Quarkus使用,通过使用JAX-RS注解进行修饰绑定,使用HTTP注解(@GET、@POST、@PUT、@DELETE、@PATCH等)声明端点服务的请求类型,并且通过@Path注解定义公共Path部分。
  • Quarkus框架对接收资源类型和输出资源类型
  • @Consumes注解可以定义端点服务的接收资源类型,例如:@Consumes(MediaType.TEXT_PLAIN)
  • @Produces注解可以定义端点服务的接收资源类型,例如: @Produces(MediaType.TEXT_PLAIN)

Quarkus端点服务注解介绍

  • Quarkus框架实现端点服务的基础开发结构
  • 定义当前资源的URI定位符路径:@Path注解
  • 设计Http请求的方法类型 @GET注解
  • 定义返回类型的资源相应类型 @Produces注解
  • 定义接收查询Http相关的参数信息
  • @QueryParam注解可以定义端点请求参数
  • @HeaderParam注解可以定义端点服务的请求参数
  • @FormParam注解可以定义端点服务的表单参数
  • @CookieParam注解可以定义端点服务的cookie参数
  • @PathParam注解可以定义端点服务的路径变量



如果本文对你有帮助,别忘记给我个3连 ,点赞,转发,评论,

咱们下期见!答案获取方式:已赞 已评 已关~

学习更多JAVA知识与技巧,关注与私信博主(666)

相关推荐

3分钟让你的项目支持AI问答模块,完全开源!

hello,大家好,我是徐小夕。之前和大家分享了很多可视化,零代码和前端工程化的最佳实践,今天继续分享一下最近开源的Next-Admin的最新更新。最近对这个项目做了一些优化,并集成了大家比较关注...

干货|程序员的副业挂,12个平台分享

1、D2adminD2Admin是一个完全开源免费的企业中后台产品前端集成方案,使用最新的前端技术栈,小于60kb的本地首屏js加载,已经做好大部分项目前期准备工作,并且带有大量示例代码,助...

Github标星超200K,这10个可视化面板你知道几个

在Github上有很多开源免费的后台控制面板可以选择,但是哪些才是最好、最受欢迎的可视化控制面板呢?今天就和大家推荐Github上10个好看又流行的可视化面板:1.AdminLTEAdminLTE是...

开箱即用的炫酷中后台前端开源框架第二篇

#头条创作挑战赛#1、SoybeanAdmin(1)介绍:SoybeanAdmin是一个基于Vue3、Vite3、TypeScript、NaiveUI、Pinia和UnoCSS的清新优...

搭建React+AntDeign的开发环境和框架

搭建React+AntDeign的开发环境和框架随着前端技术的不断发展,React和AntDesign已经成为越来越多Web应用程序的首选开发框架。React是一个用于构建用户界面的JavaScrip...

基于.NET 5实现的开源通用权限管理平台

??大家好,我是为广大程序员兄弟操碎了心的小编,每天推荐一个小工具/源码,装满你的收藏夹,每天分享一个小技巧,让你轻松节省开发效率,实现不加班不熬夜不掉头发,是我的目标!??今天小编推荐一款基于.NE...

StreamPark - 大数据流计算引擎

使用Docker完成StreamPark的部署??1.基于h2和docker-compose进行StreamPark部署wgethttps://raw.githubusercontent.com/a...

教你使用UmiJS框架开发React

1、什么是Umi.js?umi,中文可发音为乌米,是一个可插拔的企业级react应用框架。你可以将它简单地理解为一个专注性能的类next.js前端框架,并通过约定、自动生成和解析代码等方式来辅助...

简单在线流程图工具在用例设计中的运用

敏捷模式下,测试团队的用例逐渐简化以适应快速的发版节奏,大家很早就开始运用思维导图工具比如xmind来编写测试方法、测试点。如今不少已经不少利用开源的思维导图组件(如百度脑图...)来构建测试测试...

【开源分享】神奇的大数据实时平台框架,让Flink&Spark开发更简单

这是一个神奇的框架,让Flink|Spark开发更简单,一站式大数据实时平台!他就是StreamX!什么是StreamX大数据技术如今发展的如火如荼,已经呈现百花齐放欣欣向荣的景象,实时处理流域...

聊聊规则引擎的调研及实现全过程

摘要本期主要以规则引擎业务实现为例,陈述在陌生业务前如何进行业务深入、调研、技术选型、设计及实现全过程分析,如果你对规则引擎不感冒、也可以从中了解一些抽象实现过程。诉求从硬件采集到的数据提供的形式多种...

【开源推荐】Diboot 2.0.5 发布,自动化开发助理

一、前言Diboot2.0.5版本已于近日发布,在此次发布中,我们新增了file-starter组件,完善了iam-starter组件,对core核心进行了相关优化,让devtools也支持对IAM...

微软推出Copilot Actions,使用人工智能自动执行重复性任务

IT之家11月19日消息,微软在今天举办的Ignite大会上宣布了一系列新功能,旨在进一步提升Microsoft365Copilot的智能化水平。其中最引人注目的是Copilot...

Electron 使用Selenium和WebDriver

本节我们来学习如何在Electron下使用Selenium和WebDriver。SeleniumSelenium是ThoughtWorks提供的一个强大的基于浏览器的开源自动化测试工具...

Quick 'n Easy Web Builder 11.1.0设计和构建功能齐全的网页的工具

一个实用而有效的应用程序,能够让您轻松构建、创建和设计个人的HTML网站。Quick'nEasyWebBuilder是一款全面且轻巧的软件,为用户提供了一种简单的方式来创建、编辑...