我们目前正面临 spring webFlux 的性能问题。为了确定响应式编程的好处,我们实现了一个 Spring Boot 服务,该服务从 MongoDB 获取数据并通过 REST API 将其返回给消费者。
该服务有两种变体:
- Spring Boot 的非反应式实现,MongoRepository。此服务将数据作为列表返回
- 使用 Spring Boot、ReactiveMongoRepository、spring-boot-starter-webflux 的反应式实现。此服务以 Flux 形式返回数据。
在这两种实现中,REST 控制器直接从存储库中获取数据并将其作为列表返回。作为通量。不执行进一步的应用程序逻辑。
我们对 100 个调用该服务的用户进行了一次小型负载/性能测试,我们发现非响应式实现的性能远远好于响应式实现。
事实上,非响应式实现不仅具有更好的 HTTP 吞吐量,而且也许更有趣的是,它比响应式实现消耗的 CPU 和线程更少!这尤其与预期背道而驰,因为我们预计反应式版本可以使用少量线程进行扩展,如https://spring.io/blog/2016/07/28/reactive-programming-with-spring-5-0中所述-m1
我们需要在设置中调整什么吗?
有人遇到过类似的问题吗?