竟然有5种微服务框架可以替代Spring Boot( 四 )

微服务由 YAML 文件配置:
spring:application:name: spring-boot-serviceserver:port: 8085application-info:name: ${spring.application.name}framework:name: Spring Bootrelease-year: 2014也可以使用properties文件进行配置(更多信息参考Spring Boot 配置文档) 。
启动微服务在启动微服务之前,你需要安装Consul和 启动代理-例如,像这样:consul agent -dev 。
你可以从以下位置启动微服务:

  • IDE中启动微服务IntelliJ IDEA 的用户可能会看到如下内容:要启动 Quarkus 服务,你需要启动quarkusDev的Gradle 任务 。
  • console中启动微服务在项目的根文件夹中执行:
java -jar helidon-service/build/libs/helidon-service-all.jar
java -jar ktor-service/build/libs/ktor-service-all.jar
java -jar micronaut-service/build/libs/micronaut-service-all.jar
java -jar quarkus-service/build/quarkus-service-1.0.0-runner.jar
java -jar spring-boot-service/build/libs/spring-boot-service.jar
启动所有微服务后,访问
http://localhost:8500/ui/dc1/services,你将看到:
竟然有5种微服务框架可以替代Spring Boot

文章插图
 
API测试以Helidon服务的API测试结果为例:
GET http://localhost:8081/application-info
{"name":"helidon-service","framework":{"name":"Helidon SE","releaseYear":2019},"requestedService":null}GET http://localhost:8081/application-info?request-to=ktor-service
{"name": "helidon-service","framework": {"name": "Helidon SE","releaseYear": 2019},"requestedService": {"name": "ktor-service","framework": {"name": "Ktor","releaseYear": 2018},"requestedService": null}}GET
http://localhost:8081/application-info/logo返回logo信息
你可以使用Postman 、IntelliJ IDEA HTTP 客户端 、浏览器或其他工具测试微服务的 API接口。
不同微服务框架对比不同微服务框架的新版本发布后,下面的结果可能会有变化;你可以使用此GitHub项目自行检查最新的对比结果。
程序大小为了保证设置应用程序的简单性,构建脚本中没有排除传递依赖项,因此 Spring Boot 服务 uber-JAR 的大小大大超过了其他框架上的类似物的大小(因为使用 starters 不仅导入了必要的依赖项;如果需要,可以通过排除指定依赖来减小大小):
备注:什么是 maven的uber-jar
在maven的一些文档中我们会发现 “uber-jar”这个术语,许多人看到后感到困惑 。其实在很多编程语言中会把super叫做uber (因为super可能是关键字),这是上世纪80年代开始流行的,比如管superman叫uberman 。所以uber-jar从字面上理解就是super-jar,这样的jar不但包含自己代码中的class,也会包含一些第三方依赖的jar,也就是把自身的代码和其依赖的jar全打包在一个jar里面了,所以就很形象的称其为super-jar,uber-jar来历就是这样的 。
微服务
程序大小(MB)
Helidon服务
17,3
Ktor服务
22,4
Micronaut 服务
17,1
Quarkus服务
24,4
Spring Boot服务
45,2
启动时长每个应用程序的启动时长都是不固定的:
微服务
开始时间(秒)
Helidon服务
2,0
Ktor服务
1,5
Micronaut 服务
2,8
Quarkus服务
1,9
Spring Boot服务
10,7
值得注意的是,如果你将 Spring Boot 中不必要的依赖排除,并注意设置应用的启动参数(例如,只扫描必要的包并使用 bean 的延迟初始化),那么你可以显著地减少启动时间 。
内存使用情况对于每个微服务,确定了以下内容:
  • 通过-Xmx参数,指定微服务所需的堆内存大小
  • 通过负载测试服务健康的请求(能够响应不同的请求)
  • 通过负载测试50 个用户 * 1000 个的请求
  • 通过负载测试500 个用户 * 1000 个的请求
堆内存只是为应用程序分配的总内存的一部分 。例如,如果要测量总体内存使用情况,可以参考本指南 。
对于负载测试,使用了Gatling和Scala脚本。
1、负载生成器和被测试的服务在同一台机器上运行(windows 10、3.2 GHz 四核处理器、24 GB RAM、SSD) 。2、服务的端口在 Scala 脚本中指定 。3、通过负载测试意味着微服务已经响应了所有时间的所有请求 。


推荐阅读