【问题标题】:How To Scale Spring Reactive Stack Using Netty如何使用 Netty 扩展 Spring Reactive Stack
【发布时间】:2020-01-16 16:24:34
【问题描述】:

我正在使用 spring webflux 反应堆栈开始一个项目,默认情况下使用 Reactor Netty 作为服务器。如果我错了,请纠正我,但我读到 Netty 只能将最大事件循环数作为实例上的处理器数量。 这意味着如果一个请求被阻塞了一秒钟(这不应该是我所知道的用例,例如),如果实例上只有 1 个处理器,我们将只能获得最大 1 Transaction Per Second。

我想知道 Netty 与 Tomcat 之类的 servlet 容器相比如何扩展?使用 Netty 与 Tomcat 的优缺点是什么?

我还想知道如何优化 Netty 配置以确保它可以投入生产。

【问题讨论】:

    标签: spring-boot tomcat netty project-reactor reactor-netty


    【解决方案1】:

    这意味着如果一个请求被阻止一秒钟(这不应该是我所知道的用例,只是举例)

    这个堆栈的全部目的是在有限的资源(这里是线程)上进行巨大的扩展。这一切都建立在每一步都是异步且非阻塞这一关键要求之上。

    所以你的“只是举例”没有任何意义。是的,如果您阻塞一秒钟,那么 CPU 将只在那一秒钟内处理该单个请求。你这样做也是完全错误的,堆栈中的所有内容都是为了帮助你避免阻塞。

    【讨论】:

    • 是的,但有时如果您正在使用 mysql db,那么这是不可避免的,对吧?这就是为什么他们还提供 publishOn 和调度程序来处理阻塞情况..无论如何我的问题更多是如何选择使用 netty 或 tomcat 以及优缺点是什么
    • 所以这是一个 netty 与 tomcat 的问题,与 spring 或 reactor 无关......请注意,bare netty 完全基于未来/回调,并且需要非阻塞用户代码才能正确执行,所以例如。将一些阻塞 JDBC 指令放在 netty ChannelHandler 中同样有问题。无论如何,在您的反应式堆栈中拥有一个阻塞组件将很快否定该堆栈的大部分好处。
    • 所以我想看看是否有任何理由在反应堆栈中使用 tomcat 而不是使用 netty?
    猜你喜欢
    • 1970-01-01
    • 2018-11-05
    • 1970-01-01
    • 1970-01-01
    • 2018-09-11
    • 2023-03-14
    • 1970-01-01
    • 2023-03-23
    • 2018-04-24
    相关资源
    最近更新 更多