Spring Boot与Micronaut比较

18-11-13 banq
                   

当我们观察企业应用程序开发领域的最新架构趋势时,我们发现微服务成为事实上的架构标准。与此同时,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带来激烈的竞争。

我希望这种比较可以帮助您在决定微服务开发框架时做出更明智的决策。​​​​​​​