iT邦幫忙

2024 iThome 鐵人賽

DAY 1
3

在近期的一個專案中,由於工作需求,我開始接觸Quarkus這個Java框架。這個框架雖然相對冷門,但它的先進特性讓我產生了一點興趣。為了更好地掌握Quarkus,我想說初步研究它的各個方面理論,並整理了一系列筆記,期望能夠通過這些分享來幫助更多開發者理解和應用這個框架。

Quarkus:為何而生?

Quarkus由Red Hat主導開發,是一個專為雲原生應用設計的Java框架。目的在解決Java在現代雲環境中的一些瓶頸,特別是在微服務和容器化部分。Quarkus的設計目標包括:

1.極低的記憶體佔用 : Quarkus優化了內存使用,能夠在資源受限的環境下做高效運行,這對於大規模微服務部署至關重要。

2.快速啟動時間: 相較於傳統Java框架,Quarkus的啟動速度非常快,這使得它非常適合在Serverless架構中使用。

3.容器優先的設計理念 : Quarkus從一開始就考慮了容器化應用的需求,其生態系統內置了對Docker和Kubernetes的良好支持。

傳統的Java技術雖然功能強大,但在應對雲原生環境時,往往因為啟動時間長和內存佔用高而顯得力不從心。隨著容器技術和Kubernetes的廣泛應用,這些缺點成為了開發者面臨的主要挑戰。Quarkus的出現正是為了解決這些痛點,讓Java開發者能夠在不放棄既有優勢的情況下,創建適應現代雲原生世界的應用。

Quarkus:核心重點

  • Kubernetes原生:Quarkus基本上是為Kubernetes量身打造的,所以在此部署過程極為簡化。開發者不再需要手動創建複雜的YAML文件,因為Quarkus能自動生成所需的Kubernetes資源。此外,Quarkus還提供了與OpenShift等平台的深度整合,進一步提升了其在容器化環境中的應用價值。

  • 開發者友善:Quarkus不僅在生產環境中表現出色,還為開發者提供了極佳的開發體驗。例如,Quarkus支持熱重載功能,允許開發者在不重新啟動應用的情況下查看代碼變更效果,顯著縮短了開發周期。再者,Quarkus還內置了豐富的擴展和工具,幫助開發者更輕鬆地進行開發。

  • 命令式和響應式編程並存:在Quarkus中,命令式編程與響應式編程共存,這使得開發者能夠根據業務需求選擇最適合的編程模型。對於需要處理大規模並發請求的應用,響應式編程提供了高效的非阻塞解決方案;而對於傳統業務邏輯,命令式編程則更加直觀和易於維護。

  • 為GraalVM和HotSpot量身定制:Quarkus充分利用了GraalVM的優勢,特別是其本地映像(Native Image)生成功能,這使得應用的啟動時間和內存使用都得到了極大優化。此外,Quarkus同樣支持傳統的HotSpot JVM,這意味著開發者可以根據具體情況選擇最合適的運行環境。

Quarkus:選擇優勢

  1. 有感的超快啟動時間:啟動速度可以達到毫秒級,這使得它非常適合用於Serverless架構和容器化環境,在需要快速擴展或縮減資源的場景中表現尤為突出。

  2. 極低內存佔用:優化了應用的內存使用,使其在雲環境中的運營成本顯著降低。這對於那些需要同時運行大量服務的公司來說,無疑是一個巨大的優勢。

  3. 雲原生設計:從一開始就針對雲原生環境進行了優化,特別是在容器化和Kubernetes部署方面。它能夠與現代化的雲基礎設施無縫整合,提供穩定且高效的運行環境。

  4. 開發效率提升:Quarkus內置了如熱重載等功能,這使得開發者能夠更快地迭代應用代碼,提升開發效率。此外,Quarkus還支持多種常見的開發工具和IDE,進一步提高了開發體驗。

  5. 適應性強:無論是針對傳統單體應用,還是現代微服務架構,Quarkus都能很好地適應。它的模組化設計使得開發者可以根據需求選擇所需的功能,而不必承擔額外的負擔。

  6. 開源 : 遵循Apache License 2.0協議,是一個完全開源的項目。其社區活躍,並且持續快速發展,提供了大量的擴展和工具支持,這使得開發者能夠在社區的幫助下迅速解決問題。

Quarkus vs Spring Boot

與 Java 生態系統中的主流框架 Spring Boot 進行比較。兩者都致力於簡化 Java 應用程序的開發,但在設計理念和性能特點上有著顯著差異。整理如下

  • 啟動時間和內存佔用

    • Quarkus:啟動時間極快,能夠在毫秒級內完成,並且內存佔用極低,非常適合在資源有限的環境中運行。特別是在需要頻繁啟動和停止服務的Serverless環境中,Quarkus的優勢尤為明顯。
    • Spring Boot:相對來說,Spring Boot的啟動時間較長,通常在秒級,且內存佔用也相對較高。這使得Spring Boot更適合用於長時間運行的大型企業應用,但在資源受限的雲環境中則可能表現不如Quarkus。
  • 容器和雲原生支持

    • Quarkus:Quarkus自設計之初就針對容器和Kubernetes環境進行了優化,提供了原生的支持。無論是Docker映像的構建,還是Kubernetes資源的自動生成,Quarkus都能極大地簡化開發和部署過程。
    • Spring Boot:Spring Boot主要通過Spring Cloud來提供雲原生功能,這意味著需要進行額外配置才能實現與雲環境的良好整合。雖然它的生態系統豐富,但對於初學者來說,配置過程可能較為複雜。
  • 性能優化

    • Quarkus:Quarkus在構建階段進行了大量的性能優化,特別是支持GraalVM的原生編譯功能,能夠生成高效的本地映像,大幅度提升了應用的啟動速度和運行性能。
    • Spring Boot:Spring Boot則更依賴於運行時的動態加載機制,這使得它在傳統JVM環境下表現良好,但在面對高並發或極端資源限制的場景時,可能不如Quarkus高效。
  • 適用場景

    • Quarkus:Quarkus的設計目標是解決Java應用在現代雲環境中的瓶頸,特別適合微服務、Serverless和容器化應用。
    • Spring Boot:Spring Boot是一個通用的Java框架,適用於從小型到大型企業級應用的廣泛場景。其成熟的生態系統和豐富的擴展庫,讓它在多種業務需求中都能輕鬆應對。
  • 社區和生態系統

    • Quarkus:新興但快速成長的社區
    • Spring Boot:成熟、龐大的社區和生態系統

最後稍微簡易比較一下Metric,讓數據說話,這裡引用Baeldung的Spring Boot vs Quarkus比較實驗結果如下

  • Native模式在啟動時間和內存使用上有顯著優勢(Starup time)。
  • Quarkus在內存管理和資源使用效率方面表現出色(CPU,Used heap )。
  • 不過Spring Boot在處理請求的性能上略勝一籌(Request)。

對於需要快速啟動和低記憶體消耗的微服務,Quarkus可能更合適。而對於需要高吞吐量的應用,Spring Boot可能是更好的選擇。Native模式雖然在某些方面表現優秀,但構建時間長且產物大小大,需要權衡使用。

Metrics Spring Boot JVM Quarkus JVM Spring Boot Native Quarkus Native
Startup time (sec) 5.395 4.075 0.082 0.142
Build artifact time (sec) 1.759 5.243 113 91
Artifact size (MB) 30.0 31.8 94.7 80.5
Loaded classes 8861 8496 21615 16040
CPU usage max (%) 100 100 100 100
CPU usage average (%) 82 73 94 92
Heap size startup (MB) 1048.57 1056.96 - -
Used heap size startup (MB) 193.31 157.066 84.574 60.41
Used heap max (MB) 604.1 567.854 144.984 519.526
Used heap average (MB) 434.155 362.46 114.779 289.968
RSS memory startup (MB) 197.7 159.1 90.5 57.1
Max Threads 77 47 73 42
Requests per Second 319 240 395 236

Spring Boot 與 Quarkus 在性能指標上各有千秋,但Quarkus 在多個關鍵領域展現出其獨特優勢:

啟動時間:Quarkus Native 模式(0.142秒)較傳統 JVM 應用快速數十倍,為微服務和 Serverless 環境提供了顯著優勢。
記憶體效率:Quarkus 在 JVM 和 Native 模式下都表現出色,特別是 Native 模式下的堆記憶體使用量最低(60.41 MB),為資源受限環境帶來巨大效益。
資源利用:Quarkus JVM 模式平均 CPU 使用率最低(73%),體現出優異的資源管理能力。
靈活性:Quarkus 在 JVM 和 Native 模式間提供了靈活選擇,適應不同的部署需求。

基於這些優勢,選擇 Quarkus 不僅能幫助我們應對現代應用架構中的挑戰,更能在這個快速變化的技術時代中保持競爭力。無論是對微服務、Serverless,還是對容器化技術的探索,Quarkus 都提供了強大的支持。讓我們攜手踏上這段Quarkus 學習之旅,共同探索 Java 技術。在這條路上,每一步都是對效能的精進,每一次實踐都是對現代應用架構的重新定義。


下一篇
Quarkus環境設置
系列文
微服務奇兵:30天Quarkus特訓營30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言