Spring Boot Webflux性能分析
对于IO繁重的工作负载,基于Spring Webflux应用程序的Spring Boot 2要优于基于Spring Boot 1的应用程序, 以下是负载测试的总结性结果 - 对于具有不同并发用户的IO繁忙事务的响应时间:
当并发用户数量很少(比如少于1,000)时,Spring Boot 1和Spring Boot 2都能很好地处理负载,并且95%的响应时间仍然保持毫秒级,超过期望值300 ms。
在更高的并发水平上,Spring Boot 2中的异步非阻塞IO和响应式的支持开始显示它们的能力 - 即使有5000个用户的重负载,95%的响应时间仍然在312毫秒左右!而 Spring Boot 1在这些并发级别上则记录了很多失败和高响应时间。
我的性能测试设置如下:
示例应用暴露出一个端点 (/passthrough/message) ,该端点又顺序调用了下游服务,到端点的请求消息类似这样:
下游服务将根据消息中 "delay" 属性进行延迟(以毫秒为单位)。
我使用Spring Boot 1.5.8.RELEASE作为应用程序的Boot 1版本。 该端点是一个简单的Spring MVC控制器,该控制器使用Spring的 RestTemplate 进行下游服务的调用。 一切都是同步和阻塞的,并且在运行时我使用默认嵌入式的Tomcat容器。 这是下游调用的原始代码:
该应用程序的 Spring Boot 2 版本暴露出一个基于 Spring Webflux 的端点并且使用 WebClient , 这是对 RestTemplate 的新型非阻塞,响应式的替代方案,用于进行下游服务的调用,我还使用了 Kotlin 进行实现,它不影响性能。 运行时服务是 Netty:
测试很简单;对于不同组的并发用户量(300,1000,1500,3000,5000),我发送一个延迟属性设 置为 300 毫秒的消息, 并且每个用户在请求之间以 1 到 2 秒的延迟重复该场景 30 次,我正在使用出色的 Gatling 工具来生成这个负载。
这些是通过 Gatling 捕获的结果:
示例应用和负载脚本在我的GitHub仓库 my GitHub repo 可用。
本文来源:https://www.2haoxitong.net/k/doc/a25d9d4f0342a8956bec0975f46527d3250ca676.html
文档为doc格式