TomEE、Spring Boot與Quarkus比較 - Baptista

banq發表於2019-03-13

Java世界中有一個新的框架:Quarkus。我決定比較它與Apache TomEESpring Boot相關的行為方式。我將在使用Java 8和Maven時測量偽像大小,編譯,測試和部署時間。
為了比較框架,我將建立一個具有一組現實功能的應用程式。它將使用REST端點,Fault Tolerance和記憶體資料庫與JPA。原始碼可以在Java-framework-compare專案的Github上找到。

每個專案的起點:
Apache TomEE 8.0.0-M2 Microprofile風格來自MicroProfile Starter,它選擇Config和Fault Tolerance API。
Spring Boot 2.1.3應用程式來自Spring Initializr頁面,它新增了web,jpa和H2依賴項。
Quarkus 0.11.0應用程式的起點更加明顯。它來自quarkus-quickstarts捆綁中捆綁的rest-json示例。

基線
所有入門專案都具有不同的捆綁依賴項。只是出於好奇,這些是開箱即用的大小,構建和啟動時間,沒有執行應用程式:

平臺              構建時間    啟動時間    大小(MB)
Apache TomEE 8.0.0-M2    5454    3,789      44
Spring-boot 2.1.3       2248    2936      16,7
Quarkus0.11.0          1890     0623      10,5


在實際專案中,這對於稍後評估我們的更改對基線的影響非常重要。

加入應用程式
首先,我使用了來自Quarkus rest-json快速啟動示例的實現。這捆綁了一組測試和REST端點,我能夠成功移植到SpringBoot和TomEE。
整合測試使用的是RestAssured和JUnit 5 Jupiter,在3個專案中是等效的。他們需要對SpringBoot進行一些調整。獲取隨機埠並配置RestAssured序列化並不明顯。
在TomEE上我必須使用JUnit 4,因為Arquillian,那裡常用的整合測試框架,還不支援JUnit 5。
我已經為方法新增了Timeout和Fallback Fault tolerance功能。在使用MicroProfile的Quarkus和TomEE以及使用Netflix的Hystrix的SpringBoot上。在SpringBoot中常用的Hystrix處於維護模式我不知道Spring方面的替代品。作為比較,Microprofile Spec增加了對CompletionStage的支援,並將儘快解決反應程式碼問題。
我試圖將JPA與H2資料庫一起使用,但是無法在Quarkus中使用它,所以我也把它放在其他的但保留了所有依賴項。文件仍然是粗略的,我需要更多的研究時間。

平臺               構建時間    透過測試構建時間    啟動時間    大小(MB)
Apache TomEE 8.0.0-M2    6,178    15304              4,993    44
Spring-boot 2.1.3       3,358    13,348              6,799    46,9
Quarkus0.11           2,533    7153               0767    23.4


在所有專案中,沒有測試的構建時間增加了約1秒。

使用Quarkus進行測試的構建需要花費一半的時間,大小也是其他兩個版本的大小的一半。啟動時間幾乎 是一個數量級。這非常重要。請注意,使用GraalVM的本機程式碼可以進一步減少此開始時間。

當您向其新增實際功能時,SpringBoot啟動時間和超級war大小會顯著增加(> 2x)。

TomEE的啟動速度比SpringBoot快,而且這個用例的超級jar大小非常穩定。沒變。
如果與TomEE或SpringBoot相比,Quarkus的線上資源很少,有大量的試驗和錯誤。




 

相關文章