为Netty服务器上的Spring反应式Web应用程序定义最大并发用户数

为Netty服务器上的Spring反应式Web应用程序定义最大并发用户数,netty,project-reactor,spring-webflux,Netty,Project Reactor,Spring Webflux,SpringWebFlux,使用ProjectReactor在以更高效的方式使用资源方面是非常有希望的。然而,如何计算支持一定数量的用户所需的资源还很不明显 在构建将在Tomcat上运行的标准web应用程序(非反应式)时,您可以简单地定义支持用户所需的webthreads数量。然而,这似乎并不适用于Spring反应式Web应用程序。使用的线程数量少,占用的内存也少,但在过去,您只需定义“每台服务器可用的X个webthreads”,这似乎是不可能的。让我们的sysops和devops朋友有点不高兴

SpringWebFlux,使用ProjectReactor在以更高效的方式使用资源方面是非常有希望的。然而,如何计算支持一定数量的用户所需的资源还很不明显

在构建将在Tomcat上运行的标准web应用程序(非反应式)时,您可以简单地定义支持用户所需的webthreads数量。然而,这似乎并不适用于Spring反应式Web应用程序。使用的线程数量少,占用的内存也少,但在过去,您只需定义“每台服务器可用的X个webthreads”,这似乎是不可能的。让我们的sysops和devops朋友有点不高兴


这个问题的解决方案是什么?因为很难“销售”一个反应式解决方案,因为它在什么时候会发生故障并不十分确定。

我知道服务器线程可以像任何其他指标一样衡量您想要分配给服务器的资源量。这适用于“每个线程一个请求模型”,但也有其自身的限制。您如何通过以下方式衡量效率:

  • 像服务器发送事件这样的持久连接
  • “慢客户端”,读取HTTP响应真的很慢吗
  • 等待阻塞I/O的线程(例如执行远程REST调用)
在这些情况下,您使用的是服务器线程,但没有真正使用服务器资源。然后,您可以越来越多地增加这个数字,直到您的服务器在线程之间切换上下文比实际工作更忙

最后,您将使用该度量来表示“这是一个服务器实例可以与之交谈的用户数量,同时对于我们的用例来说仍然有一个合理的延迟”

根据您的使用情况,Spring MVC应用程序可能比WebFlux应用程序性能更好:例如,延迟和客户端速度慢在您的应用程序中不是一个真正的问题。或者WebFlux应用程序可能比SpringMVC应用程序更具预测性:您的应用程序在负载下可以很好地扩展,并且当达到某个并发级别时,延迟不会突然爆发

TL;博士 没有什么比用真实流量对应用程序进行基准测试和查看第95百分位延迟更好的了