Spring WebFlux WebClient 弹性和性能
2022-09-03 02:47:18
我只是通过示例PoC项目在简单的常见场景中测试一些阻塞/非阻塞解决方案。
场景:
- 有一些休息阻塞端点非常慢 - 每个请求需要200毫秒。
- 还有其他 - 客户端应用程序调用此慢速终结点。
我已经测试了当前(阻塞)Spring boot客户端(tomcat),Spring Boot 2.0(netty)与WebFlux - WebClient,Ratpack和Lagom。在每种情况下,我都通过gatling测试简单场景(100-1000个用户/秒)来强调客户端应用程序。
我已经测试了ratpack和lagom作为参考非阻塞io服务器,以将结果与spring boot(阻塞和非阻塞)进行比较。
在所有情况下,我都有预期的结果,除了弹簧靴2.0测试。它仅适用于小负载水平,但即使如此,也具有高延迟。如果负载级别上升 - 所有请求都将超时。
Web客户端用法:
@RestController
public class NonBlockingClientController {
private WebClient client = WebClient.create("http://localhost:9000");
@GetMapping("/client")
public Mono<String> getData() {
return client.get()
.uri("/routing")
.accept(TEXT_PLAIN)
.exchange()
.then(response -> response.bodyToMono(String.class));
}
}
我不知道出了什么问题,或者当前的快照版本只是工作。
所有来源均发表于 https://github.com/rutkowskij/blocking-non-blocking-poc
- 阻塞服务 - 慢速阻塞端点
- 非阻塞客户端 - Spring Boot 2.0 和基于 WebClient 的客户端
我刚刚创建了一个简单的Spring Boot应用程序,使用spring-boot-starter-webflux和版本2.0.BUILD-SNAPSHOT,它带来了spring-webflux版本5.0.0.BUILD-SNAPSHOT和Spring Core,Bean,Context等。