了解一下同步阻塞和异步非阻塞
同步阻塞式IO模型
异步非阻塞式IO模型
通过这种方式可以用少量的容器线程来支撑大量的并发访问,webflux优点,能够提升吞吐量和伸缩性,但是结果的响应时间并不会缩短,它的后续处理还是得等worker线程组处理完后返回给请求在处理
webflux应用场景
springcloud的getaway就是使用的webflux这项技术
webflux与springmvc的异同点
netty简单了解
netty(nio编程首选框架)优点
- API使用简单易上手
- 功能强大,支持多种主流协议
- 定制能力强,可扩展性高
- 性能高、综合性能最优
- 成熟稳定、久经考验
- 社区活跃、学习资料多
netty selector模型
SPringMvc处理流程
webflux使用建议
官方回答
我们建议您考虑以下具体要点:
如果您有一个运行良好的 Spring MVC 应用程序,则无需更改。命令式编程是编写、理解和调试代码的最简单方法。您有最多的库选择,因为从历史上看,大多数都是阻塞的。
如果您已经在购买非阻塞 Web 堆栈,Spring WebFlux 提供与该领域中的其他人相同的执行模型优势,并且还提供服务器选择(Netty、Tomcat、Jetty、Undertow 和 Servlet 3.1+ 容器)、选择编程模型(带注释的控制器和功能性 Web 端点),以及选择反应库(Reactor、RxJava 或其他)。
如果您对用于 Java 8 lambdas 或 Kotlin 的轻量级功能性 Web 框架感兴趣,可以使用 Spring WebFlux 功能性 Web 端点。对于较小的应用程序或具有较低复杂要求的微服务,这也可能是一个不错的选择,可以从更高的透明度和控制中受益。
在微服务架构中,您可以混合使用 Spring MVC 或 Spring WebFlux 控制器或 Spring WebFlux 功能端点的应用程序。在两个框架中都支持相同的基于注释的编程模型,可以更轻松地重用知识,同时还可以为正确的工作选择正确的工具。
评估应用程序的一种简单方法是检查其依赖性。如果您要使用阻塞持久性 API(JPA、JDBC)或网络 API,那么 Spring MVC 至少是通用架构的最佳选择。 Reactor 和 RxJava 在单独的线程上执行阻塞调用在技术上是可行的,但您不会充分利用非阻塞 Web 堆栈。
如果您有一个调用远程服务的 Spring MVC 应用程序,请尝试响应式 WebClient。您可以直接从 Spring MVC 控制器方法返回反应类型(Reactor、RxJava 或其他)。每个调用的延迟或调用之间的相互依赖性越大,好处就越大。 Spring MVC 控制器也可以调用其他反应式组件。
如果您有一个大型团队,请记住向非阻塞、函数式和声明式编程转变的陡峭学习曲线。在没有完全切换的情况下启动的一种实用方法是使用反应式 WebClient。除此之外,从小处着手并衡量收益。我们预计,对于广泛的应用程序,这种转变是不必要的。如果您不确定要寻找什么好处,请先了解非阻塞 I/O 的工作原理(例如,单线程 Node.js 上的并发)及其影响。
如果当前项目跑的好好的,就没必要切换了,切换的话也要切换整套技术栈
webflux技术栈
webflux技术依赖
- Reactive Streams:反应式编程标准和规范
- Reactor:基于Reactive Streams的反应式编程框架
- webFlux:以Reactor为基础实现web领域的反应式编程框架