本文,我们来谈谈呼应式编程。
什么是呼应式编程?
呼应式编程是一种编写异步、非堵塞、根据事情驱动的应用程序的编码模式。
呼应式编程旨在进步应用程序的功能和可伸缩性,以应对高并发和高负载的场景。
在传统的恳求呼应模型中,每个客户端恳求会分配一个线程,这些线程会一直等待直到恳求完结,这可能导致资源的浪费和功能瓶颈。呼应式编程使用异步非堵塞的方法,经过订阅和处理事情流来处理恳求。
什么是 WebFlux
Spring Boot
中选用的是呼应式编程模型为 Spring WebFlux
。
WebFlux
是一个呼应式的 Web
框架。WebFlex
能够在资源有限的情况下进步体系的吞吐量和伸缩性(不是进步功能)。
比较 MVC 和 WebFlux
Spring MVC
选用命令编程的方法,代码被一句句执行,便利开发者理解与调试代码。 WebFlux
则是根据异步呼应式编程。
它们在作业方法上的区别:
MVC 作业方法
MVC
的作业流程是:主线程接收到恳求 -> 预备数据 -> 回来数据。
整个作业流程是单线程堵塞,用户会感觉等待时间长。由于在成果处理之后才回来数据给浏览器。假如恳求许多,则吞吐量跟不上去。
WebFlux 作业方法
WebFlux
的作业流程是:主线程接收到恳求 -> 当即回来数据和函数的组合(Mono 或 Flux,不是成果) -> 敞开一个新 Work 线程去做实践的数据预备作业,进行真正的事务操作 -> Work 线程完结作业 -> 回来给用户实在的数据(成果)。
这种方法给人的感觉就是呼应时间很短,由于回来的是不变的常数,它不跟着用户数量的添加而改变。
其他区别比照
比照项 | Spring MVC | Spring WebFlux |
---|---|---|
地址(路由)映射 |
@Controller 、@RequestMapping 等标准的 Spring MVC 注解 |
1. Router Functions ,提供一套函数式风格的 API ,用于创立 Router 、Handler 和 Filter 2. @Controller 、@RequestMapping 等标准的 Spring MVC
|
数据流 | Serlet API |
Reactive Streams :一种支撑背压的异步数据流处理标准,干流完成有 RxJava 和 Reactor 。 Spring WebFlux 默认集成的是 Reactor
|
容器 |
Tomcat 、Jetty 、Undertow
|
Netty 、Tomcat 、Jetty 、Undertow
|
I/O 模式 |
同步堵塞的 I/O 模式 |
异步非堵塞的 I/O 模式 |
吞吐功能 | 低 | 高 |
事务处理能力 | 相同 | 相同 |
支撑数据库 |
NoSQL 、SQL
|
支撑 noSQL ,不支撑 MySQL 等关系型数据库 |
恳求和呼应 |
HttpServletRequest 和 HttpServeletResponse
|
ServerRequest 和 ServerResponse
|
Spring WebFlux 支撑
noSQL
,不支撑MySQL
等关系型数据库。这有点尴尬
参阅
- 《Spring Boot 实战派》