Quarkus學習使用總結
quarkus官網:https://quarkus.io
極客搜索:https://s.geekbang.org/search/c=0/k=quarkus/t=
書籍也有幾本了,這個看個人接受程度了,大家自己可以去找,
另外我這邊有quarkus技術群qq(871808563)和微信(weirweiwei)
都有,如果大家感興趣可以找我加入討論,
在介紹quarkus是什么之前,你可以了解下云原生的相關知識和這篇文章(https://www.infoq.cn/article/IlPLGzhfWB1v7TejQIs5),
當然還有紅帽官方的一些介紹畢竟是親兒子,
(https://www.redhat.com/zh/topics/cloud-native-apps/what-is-quarkus)
(https://developers.redhat.com/articles/2021/11/04/boost-throughput-resteasy-reactive-quarkus-22#)
如果你能看YouTube視頻那可以去這里看quarkus的官方頻道(https://www.youtube.com/c/Quarkusio/videos)
如果你沒法FQ看可以去這個地方看我把一部分視頻搬到了B站(https://space.bilibili.com/36507008),這里不但有quarkus官方的視頻,還有我總結的一些實踐經驗,
更多的參考資料還有:https://gitee.com/quarkus-microservice
https://gitee.com/weir_admin/weirblog-quarkus
公眾號:愛威爾 會不定期的發布技術最近動態
那么quarkus有什么是非常吸引人的:啟動速度,記憶體占用小,利用graalvm可以做到把jar應用轉成二進制的可執行檔案即native鏡像,還有就是開發環境對開發人員的友好體現在只要代碼保存就會快速生效,在開發測驗環境的一鍵部署,更關鍵的是性能的極大提升(這個是相對的),
為什么會有quarkus出現?其實它不是孤獨的存在還有很多類似的框架,oracle的helidon,由Grails框架的創建者開發的Micronaut等等,那么這些框架的理念底層都是什么呢?
首先說理念,我認為是性能和前后端分離帶來的后端服務的極簡主義的需求,換句話說就是快速回應能力,一方面golang確實沖擊了java的領域,另一方面java這么多年的發展使其太臃腫,Java在跟上時代的同時也要甩開包袱,比如jsp、servlet、j2ee的詬病,其實java早已看出自生的問題,vert.x、MicroProfile的出現就說明了這一點,
再說說反應式編程,也可以叫做回應式編程,叫什么名字不重要,重要的是異步編程范式走上了時代的舞臺,golang的發展讓java開始著手自己的協程(https://wiki.openjdk.java.net/display/loom/Main),這是一個大工程,但是不要忘了java的殺手锏天花板級別的框架netty,即便沒有協程Java也不畏懼任何語言,vert.x的出色表現就證明了這一點,
而quarkus的出現正是站在vert.x和MicroProfile等一批異步編程范式的工具(SmallRye RESTEasy Hibernate Reactive)的肩膀上,可以這么說從技術的角度來看quarkus那就是被java寵上天的兒子,quarkus利用的技術沒有一個不是java語言里面的佼佼者,他們加在一起就是你在官網所看到的卓越的表現,
當然對一個技術光有吹捧是不行的,我們關心的還是落地的問題,只要能落地就能普及這個道理我想都能想明白,那我就說說我目前的一些實踐看法:
1.單應用部署:
1.1如果是前后端不分離,就需要用到quarkus里面的模板qute,這個我的博客已經用上了大家可以去看原始碼,代碼層面我用到的程度就是基于Hibernate ORM with Panache + qute這是主要的技術支撐,還有一些比如圖片的匯入、展示(這里涉及到上傳下載的技術),對于我這個博客系統來說用到的技術點還真不多,如果要用到excel的匯入匯出還需要引入第三方的jar來實作,還比如快取redis我所了解的目前對于#user.id這種方式的快取獲取方式還不支持,mongdb是支持的,訊息這塊kafka、amqp都是支持的,但是具體的操作是有待驗證的,
1.2如果是讀寫分離的,jwt是沒問題的,這個我開源出來的幾個專案里面都有,其他方面跟上面情況一樣,更多的是目前確實需要一個一個去踩坑,其實就是照這你們各自已有的技術體系看看quarkus能不能實作,
2.微服務應用:
https://gitee.com/quarkus-microservice 這個是我專門開的專題,用來實驗quarkus微服務這條路的,目前跑通的一個技術架構是結合istio來實作quarkus的微服務化,這個在B站我有分享,還有就是公眾號:愛威爾 也會不定期發布一些技術成果,
那么對于沒有istio 甚至沒有kubernetes的環境來說微服務這條路也可以玩,那就是用上consul和spring cloud gateway(http://www.loveweir.com/view/112)這是我寫的實踐例子可以參考,當然微服務涉及的技術點很多比如分布式事務,這也是老大難的問題,我的建議是能不用就不用能規避就規避,在quarkus這種框架下如果非要用分布式事務可以考慮基于訊息的最終一致性方案,另外也有些開源的中間件可以參考(https://github.com/eventuate-tram),
雖說quarkus為云原生而生但是支撐云原生的基礎可能是要成本的,大廠就不說了財大氣粗,對于沒有云基礎設施的大部分公司來說那只能是通過購買云服務的方式來運為自己的專案,這恐怕也是云原生呼聲大的原因,如果你們公司恰好是基于紅帽的基礎設施拿quarkus的優勢還是很明顯的,如果你們已經有kubernetes上quarkus也不是很難,如果你們連istio都掌握了quarkus更是錦上添花,相比spring springcloud也是有非常大的優勢,
quarkus目前最大的問題是推廣和研究學習,把spring里面成熟的技術,對開發幫助大的技術點都用quarkus實作一下,比如redis key的獲取方式不能用#user.id這種獲取方式顯然是對實際需求考慮的不到位,
所以我在這里還是再次邀請一下,只要你感興趣咱都可以成為朋友,
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/354822.html
標籤:Java
