Spring Boot Webflux性能分析

发布时间:2020-01-27 21:26:36   来源:文档文库   
字号:

Spring Boot Webflux性能分析



原始性能表格 - Spring Boot 2 Webflux vs. Spring Boot 1

对于IO繁重的工作负载,基于Spring Webflux应用程序的Spring Boot 2要优于基于Spring Boot 1的应用程序, 以下是负载测试的总结性结果 - 对于具有不同并发用户的IO繁忙事务的响应时间:

当并发用户数量很少(比如少于1,000)时,Spring Boot 1Spring Boot 2都能很好地处理负载,并且95%的响应时间仍然保持毫秒级,超过期望值300 ms

在更高的并发水平上,Spring Boot 2中的异步非阻塞IO和响应式的支持开始显示它们的能力 - 即使有5000个用户的重负载,95%的响应时间仍然在312毫秒左右!而 Spring Boot 1在这些并发级别上则记录了很多失败和高响应时间。

详细

我的性能测试设置如下:


示例应用暴露出一个端点 (/passthrough/message) ,该端点又顺序调用了下游服务,到端点的请求消息类似这样:

下游服务将根据消息中 "delay" 属性进行延迟(以毫秒为单位)。

Spring Boot 1 应用

我使用Spring Boot 1.5.8.RELEASE作为应用程序的Boot 1版本。 该端点是一个简单的Spring MVC控制器,该控制器使用SpringRestTemplate 进行下游服务的调用。 一切都是同步和阻塞的,并且在运行时我使用默认嵌入式的Tomcat容器。 这是下游调用的原始代码:

Spring Boot 2 应用


该应用程序的 Spring Boot 2 版本暴露出一个基于 Spring Webflux 的端点并且使用 WebClient , 这是RestTemplate 的新型非阻塞,响应式的替代方案,用于进行下游服务的调用,我还使用了 Kotlin 行实现,它不影响性能。 运行时服务是 Netty:

性能测试详细

测试很简单;对于不同组的并发用户量3001000150030005000),我发送一个延迟属性设 置为 300 毫秒的消息, 并且每个用户在请求之间以 1 2 秒的延迟重复该场景 30 次,我正在使用出色的 Gatling 工具来生成这个负载。

结果

这些是通过 Gatling 捕获的结果:




参考

示例应用和负载脚本在我的GitHub仓库 my GitHub repo 可用。

本文来源:https://www.2haoxitong.net/k/doc/a25d9d4f0342a8956bec0975f46527d3250ca676.html

《Spring Boot Webflux性能分析.doc》
将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档

文档为doc格式