标准答案

  1. MVC 代码模型简单,结合有界线程池、连接池和超时可以稳定承载大量常规服务。
  2. WebFlux 适合连接多、I/O 异步且上下游都支持响应式的场景。
  3. 阻塞调用放入 boundedElastic 等隔离资源只能控制影响,不能把无限阻塞变成非阻塞。
  4. 选择要看团队熟悉度、依赖生态、调试成本、延迟目标和真实负载。

题目解析

MVC 与 WebFlux 的差异是执行模型和生态边界,不是“新旧框架”的速度排名。MVC 配合有界线程、连接池和超时可以稳定处理阻塞依赖,WebFlux 只有端到端非阻塞时才可能减少等待线程。

在 WebFlux 事件循环里执行 JDBC、文件或同步 SDK,会阻塞其他连接。放入 boundedElastic 只能隔离并限制影响,线程池、队列和下游连接仍需容量边界。

选型要看连接规模、依赖驱动、团队调试能力、取消传播和实际 P99。只把 Controller 返回值改成 Mono,不会改变底层阻塞行为。

常见误区

  • 误区:在事件循环里直接执行 JDBC。改正:使用响应式驱动,或把阻塞调用放入有界隔离执行器。
  • 误区:认为 WebFlux 天然比 MVC 快。改正:用真实负载比较端到端延迟、吞吐、CPU、内存和下游等待。
  • 误区:没有限制阻塞隔离线程池。改正:设置队列、并发、超时和拒绝策略,防止阻塞任务拖垮服务。

作者信息