Spring Boot與Micronaut比較

banq發表於2018-11-13

當我們觀察企業應用程式開發領域的最新架構趨勢時,我們發現微服務成為事實上的架構標準。與此同時,Spring Boot成為最受歡迎和廣泛使用的框架,用於在Java領域實現微服務。多年來,Spring Boot在微服務的實現數量方面贏得並保持其最高位置。最近,OCI(https://objectcomputing.com)提出了一個Micronaut框架,其主要目標是簡化微服務開發生命週期。
本文將介紹微服務的某些重要屬性,並提供這兩個框架之間的比較分析。

1.易於安裝
兩個框架都有命令列工具來快速開始開發,我們可以安裝相關的命令列工具並建立示例Spring Boot / Micronaut應用程式並對其進行測試。
我們也可以使用SDKMAN安裝Spring Boot或Micronaut,我們可以使用SDKMAN維護不同版本的SDK。
兩個框架都需要以下先決條件:

  • 最喜歡的文字編輯器或IDE
  • JDK 1.8或更高版本
  • Gradle或Maven最新版本

透過CLI工具生成的程式碼可以直接匯入IDE:
  • Spring Tool Suite(STS) - Spring Boot
  • IntelliJ IDEA - Spring Boot和Micronaut

“Spring Boot和Micronaut的安裝都不復雜,可以按照安裝說明輕鬆安裝,所以這裡競爭非常激烈。”

2.原生雲
在這裡,Micronaut具有優勢,因為預設情況下支援最流行的雲功能,而不依賴於任何第三方雲服務。這些功能將成為應用程式本身的一部分。
Micronaut的口號是“Natively cloud-native app development”。
以下雲特定功能列表直接整合到Micronaut執行時:

  • 服務發現:
  • 正在支援Eureka,Consul或ZooKeeper服務發現伺服器
  • 預設情況下支援Kubernetes容器執行時。
  • 客戶端負載均衡:
  • Netflix功能區可用於負載平衡
  • 分散式配置
  • 分散式跟蹤
  • 無伺服器功能

“當談到Spring Boot時,為了支援上面討論的特定於雲的功能,我們需要依賴第三方雲服務或庫,預設情況下它不支援上面列出的任何功能,因此Micronaut具有優勢這裡。”

3.無伺服器功能
無伺服器架構,開發人員將部署該功能。從那時起,它們完全由雲環境管理,即呼叫,執行,控制和放下。
但Micronaut的快速啟動時間,編譯時方法和低記憶體佔用使該框架成為開發功能的理想選擇,事實上,Micronaut功能為AWS Lambda和任何支援執行的FaaS系統實現和部署功能提供專用支援作為容器。
“當我們與Micronaut進行比較時,Spring Boot應用程式的記憶體使用和啟動時間會略高,因此將鼓勵Micronaut選擇無伺服器功能實現。“

4.語言支援
兩個框架都支援三種程式語言:

  • Java
  • Groovy
  • Kotlin


5.應用程式配置
Micronaut從Grails和Spring Boot中獲得靈感,將來自不同來源的配置屬性直接整合到核心IoC容器中。預設情況下,可以在YAML,JSON,Java屬性或Groovy檔案中提供配置。慣例是搜尋名為application.yml,application.properties,application.json或application.groovy的檔案。
就像Grails和Spring一樣,Micronaut也允許透過系統屬性或環境變數覆蓋任何屬性。
Micronaut預設具有PropertySourceLoader的實現,它們將從指定的位置及其序列載入屬性:

  • 命令列引數
  • 來自SPRING_APPLICATION_JSON的屬性(僅當存在任何Spring依賴項時)
  • 來自MICRONAUT_APPLICATION_JSON的屬性
  • Java系統屬性
  • OS環境變數
  • 每個特定於環境的屬性,如application- {environment}。{extension}(可能是.properties,.json,.yml或.groovy)
  • 來自應用程式的特定於應用程式的屬性。{extension}(可能是.properties,.json,.yml或.groovy)
  • 特殊屬性(隨機值)

Spring Boot支援上述所有屬性位置,除此之外,它還支援其他屬性位置:
  • Spring Boot devtools全域性設定屬性
  • 測試中的@TestPropertySource註釋
  • 測試中的@ SpringBootTest#properties annotation屬性。
  • ServletConfig初始化引數。
  • ServletContext init引數。
  • 來自java:comp / env的JNDI屬性。
  • @Configuration類上的@PropertySource註釋。
  • 預設屬性(透過設定SpringApplication.setDefaultProperties指定)。

“當我們將它與Micronaut進行比較時,Spring Boot提供了更多處理屬性的方法。”


6.訊息系統支援
Spring Boot支援外部Messaging系統的整合,它們是:

  • RabbitMQ
  • Apache Kafka
  • ActiveMQ
  • Artemis

Micronaut還支援流行的訊息傳遞系統,例如:
  • RabbitMQ
  • Apache Kafka

“Micronaut擁有對Apache Kafka的嵌入式支援。”
“這兩個框架都得到了流行的Messaging系統的支援,但Spring Boot支援更多的工具。”

7.安全
Spring Boot預設支援以下安全機制:

  • MVC安全
  • WebFlux安全
  • OAuth2
  • 執行器安全

預設情況下,Micronaut支援以下安全機制:
  • 身份驗證提供商
  • 安全規則
  • IP模式規則
  • 安全註釋
  • 攔截URL對映
  • 內建端點安全性
  • 認證策略
  • 基本認證
  • 會話認證
  • JSON Web令牌
  • 內建安全控制器
  • 檢索經過身份驗證的使用者
  • 安全事件

“兩個框架都有不同的安全機制,每個框架都有自己的優勢,所以在這種情況下我是中立的。”

8.日誌
Spring Boot和Micronaut都支援類似的日誌記錄,它們是:

  • logback
  • Log4j


9.快取​​​​​​​
Spring Boot支援以下快取提供程式:

  • Redis
  • Couchbase
  • Generic
  • JCache(JSR-107)
  • EhCache 2.x
  • Hazelcast
  • Infinispan
  • Caffeine


於Micronaut支援以下快取提供程式列表:
  • Caffeine - 預設情況下Micronaut支援它。
  • Redis

“顯然,Spring Boot在支援快取提供商方面處於領先地位”


10.管理和監控
Micronaut受Grails,Spring Boot和Micronauts管理依賴項的啟發,增加了透過端點監控應用程式的支援,特殊的URI返回有關應用程式狀態和執行狀況的詳細資訊。

  • 建立端點
  • 內建端點

但Spring Boot不僅支援端點的應用程式管理和監控,還有更多方法:
  • 透過HTTP監控和管理
  • 自定義管理端點路徑
  • 自定義管理伺服器埠
  • 配置特定於管理的SSL
  • 自定義管理伺服器地址
  • 禁用HTTP端點
  • JMS的監控和管理

“與Micronaut相比,Spring Boot提供了監控應用程式的其他選項。”


總結:
我們全面地比較了Micronaut和Spring Boot框架的不同特性。一開始,Spring Boot在許多方面仍處於領先地位,並且多年來在處理微服務方面獲得了豐富的經驗。但是Micronaut(Young chap)很有希望並且很有前途,可以給Spring Boot帶來激烈的競爭。
我希望這種比較可以幫助您在決定微服務開發框架時做出更明智的決策。​​​​​​​


相關文章