請給Sprint Boot多一些記憶體

襄垣發表於2019-03-14

概述

SprintBoot總體來說,搭建還是比較容易的,特別是SpringCloud全家桶,簡稱親民微服務,但在發展趨勢中,容器化技術已經成熟,面對巨耗記憶體的SprintBoot,小公司表示用不起。如今,很多剛誕生的JAVA微服務框架大多主打“輕量級”,主要還是因為SprintBoot太重。

JAVA系微服務框架No1-Spring Cloud

介紹

有Spring大靠山在,更新、穩定性、成熟度的問題根本不需要考慮。在JAVA系混的技術人員大約都聽說過Spring的大名吧,所以不缺程式設計師……,而且這入手的難度十分低,完全可以省去一個架構師。 但是,你必然在伺服器上付出:

  • 至少一臺“服務發現 ”的伺服器;
  • 可能有一個統一的閘道器Gateway;
  • 可能需要一個用於“分散式配置管理”的配置中心;
  • 可能進行“服務追蹤”,知道我的請求從哪裡來,到哪裡去;
  • 可能需要“叢集監控”; 專案上線後發現,我們需要好多伺服器,每次在叢集中增加伺服器時,都感覺心疼;

壓測30秒

壓測前的記憶體佔用

請給Sprint Boot多一些記憶體
如圖,記憶體佔用304M。

壓測時的記憶體佔用

請給Sprint Boot多一些記憶體
如圖,記憶體佔用1520M(1.5G),CPU上升到321%

概覽

請給Sprint Boot多一些記憶體

總結

一個SprintBoot的簡單應用,最少1G記憶體,一個業務點比較少的微服務編譯後的JAR會大約50M;而SprintCloud引入的元件會相對多一些,消耗的資源也會相對更多一些。

啟動時間大約10秒左右: Started Application in 10.153 seconds (JVM running for 10.915)

JAVA系響應式程式設計的工具包Vert.x

介紹

背靠Eclipse的Eclipse Vert.x是一個用於在JVM上構建響應式應用程式的工具包。定位上與SprintBoot不衝突,甚至可以將Vert.x結合SprintBoot使用。眾多Vert.x模組提供了大量微服務的元件,在很多人眼裡是一種微服務架構的選擇。

華為微服務框架Apache ServiceComb就是以Vert.x為底層框架實現的,在"基準測試網站TechEmpower"中,Vert.x的表現也十分亮眼。

壓測30秒

壓測前的記憶體佔用

請給Sprint Boot多一些記憶體
如圖,記憶體佔用65M。

壓測時的記憶體佔用

請給Sprint Boot多一些記憶體
如圖,記憶體佔139M,CPU佔2.1%,給人的感覺似乎並沒有進行壓測。

概覽

請給Sprint Boot多一些記憶體

總結

Vert.x單個服務打包完成後大約7M左右的JAR,不依賴Tomcat、Jetty之類的容器,直接在JVM上跑。

Vert.x消耗的資源很低,感覺一個1核2G的伺服器已經能夠部署許多個Vert.x服務。除去編碼方面的問題,真心符合小專案和小模組。git市場上已經出現了基於Vert.x實現的開源閘道器- VX-API-Gateway幫助文件 對多語言支援,很適合小型專案快速上線。

啟動時間不到1秒:Started Vert.x in 0.274 seconds (JVM running for 0.274)

JAVA系其他微服務框架

SparkJava

  • jar比較小,大約10M
  • 佔記憶體小,大約30~60MB;
  • 效能還可以,與SprintBoot相仿;

Micronaut

  • Grails團隊新寵;
  • 可以用 Java、Groovy 和 Kotlin 編寫的基於微服務的應用程式;
  • 相比SprintBoot已經比較全面;
  • 效能較優,編碼方式與SprintBoot比較類似;
  • 啟動時間和記憶體消耗方面比其他框架更高效;
  • 多語言;
  • 依賴注入;
  • 內建多種雲本地功能;
  • 很新,剛釋出1.0.0

Javalin

  • 上手極為容易;
  • 靈活,可以相容同步和非同步兩種程式設計思路;
  • JAR小,4~5M;
  • 多語言;
  • 有KOA的影子;
  • 只有大約2000行原始碼,原始碼足夠簡單,可以理解和修復;
  • 符合當今趨勢;
  • 多語言;
  • 嵌入式伺服器Jetty;

Quarkus

  • 啟動快;
  • JAR小,大約10M;
  • 文件很少;

相關文章