代码之家  ›  专栏  ›  技术社区  ›  Kristof

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

  •  4
  • Kristof  · 技术社区  · 7 年前

    Spring Webflux,使用project Reactor在以更高效的方式使用资源方面非常有前景。然而,如何计算支持一定数量的用户所需的资源还很不清楚。

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

    这个问题的解决方案是什么?因为很难“销售”一个反应式解决方案,当它不是一个非常确定的解决方案时,它可能会崩溃。

    1 回复  |  直到 7 年前
        1
  •  3
  •   Brian Clozel    7 年前

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

    • 像服务器发送事件这样的持久连接?
    • “慢客户端”,读取HTTP响应真的很慢?
    • 等待阻塞I/O的线程(例如执行远程REST调用)

    在这种情况下,您正在使用服务器线程,但服务器资源并没有真正被使用。然后,您可以越来越多地增加这个数字,直到您的服务器在线程之间切换上下文比实际工作更繁忙。

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

    TL;博士

    没有什么比使用 实际流量 看看第95个百分点的延迟。