SpringDoc WebMvc 与 WebFlux
SpringDoc WebMvc vs. WebFlux
我正在使用 SpringDoc Open Api 3 休息 API。现在我正在使用 WebMvc 版本。切换到 WebFlux 版本有什么好处吗?在客户端使用 WebClient(或其他一些异步客户端)不是一回事,只是异步会发生在客户端吗?归根结底,Rest 方法可以在内部使用异步方法,但尝试将暴露的方法迁移到 WebFlux 是否值得。
不,这是完全不同的事情。 Spring MVC 在每个请求线程模型中运行。您有 100 个并发请求 = 您有 100 个线程来处理这些请求。 100 个线程已经很多了,现在想象 1k、10k 甚至 100k - 在这个模型中完全不可能。
要点是那些线程并非 100% 的时间都在工作。如果您调用数据库或其他服务,那么线程只是在等待响应,而不是执行它当时可以执行的工作。
这就是 Webflux 的方式,你使用更少的线程,因为不是等待来自外部服务的响应,线程在那个时间工作,使得处理 1k 并发请求没有太大问题成为可能。
为什么当时每个人都不这样做:使用更少的资源、更好的性能等等?首先,我认为最重要的是——这很难做到。程序流程不像同步编程那么容易,调试真的很难,堆栈跟踪变得基本无用,你需要非常小心不要阻塞一切。其次 - 好处在某个阈值变得值得,大多数应用程序不需要处理数千个并发用户。在这个阈值之前,不仅没有好处,而且在性能方面可能更差,同时要付出第一点提到的开发人员知识和经验的代价。三 - 为此,您需要整个流程是异步的,否则您只会阻塞事件循环 - 调用外部服务,最重要的是数据库 - 为此您需要异步数据库驱动程序,但并非每个数据库都支持它。
我正在使用 SpringDoc Open Api 3 休息 API。现在我正在使用 WebMvc 版本。切换到 WebFlux 版本有什么好处吗?在客户端使用 WebClient(或其他一些异步客户端)不是一回事,只是异步会发生在客户端吗?归根结底,Rest 方法可以在内部使用异步方法,但尝试将暴露的方法迁移到 WebFlux 是否值得。
不,这是完全不同的事情。 Spring MVC 在每个请求线程模型中运行。您有 100 个并发请求 = 您有 100 个线程来处理这些请求。 100 个线程已经很多了,现在想象 1k、10k 甚至 100k - 在这个模型中完全不可能。
要点是那些线程并非 100% 的时间都在工作。如果您调用数据库或其他服务,那么线程只是在等待响应,而不是执行它当时可以执行的工作。
这就是 Webflux 的方式,你使用更少的线程,因为不是等待来自外部服务的响应,线程在那个时间工作,使得处理 1k 并发请求没有太大问题成为可能。
为什么当时每个人都不这样做:使用更少的资源、更好的性能等等?首先,我认为最重要的是——这很难做到。程序流程不像同步编程那么容易,调试真的很难,堆栈跟踪变得基本无用,你需要非常小心不要阻塞一切。其次 - 好处在某个阈值变得值得,大多数应用程序不需要处理数千个并发用户。在这个阈值之前,不仅没有好处,而且在性能方面可能更差,同时要付出第一点提到的开发人员知识和经验的代价。三 - 为此,您需要整个流程是异步的,否则您只会阻塞事件循环 - 调用外部服务,最重要的是数据库 - 为此您需要异步数据库驱动程序,但并非每个数据库都支持它。