一、介绍
响应式的web框架,不同于传统的WebMVC,WebFlux其内部使用Netty,基于异步和事件驱动,用少量Loop线程处理request、response io操作,而业务中阻塞的操作交由Work线程处理。总的来说客户端感知(响应时间)没什么差别,但是服务器端线程数能减少不少,适合网关这种io密集型服务。
二、测试
测试用的windows系统,8核16线程cpu,1s内1000个请求(tomcat默认上限200线程),接口没考虑延迟
- WebFlux:
- WebMVC
三、大概聊聊
大致测试了下,虽然肯定是不全面的,所以后续又做了很多测试,就总结了下。
WebFlux这边,请求进来后,开了16个parallel线程,16个reactor线程,后续常驻内存,工作方式就是Netty那套,相当于并行处理请求,适合网关这种io密集型。
WebMVC那边,请求进来后,tomcat开了200个线程,由于每个线程都是持续等待,相当于线性处理请求,所以并发数高的时候,请求耗时长(无用等待),并且线程不是常驻内存,峰值过后,线程数维持在10左右,个人觉得由于WebFlux学习成本高,除了网关,还是都用WebMVC吧,必要时加集群。
SpringCloudGateway有集成WebMVC,通过RouteLocatorBuilder构建路由
然后有请求来了,DispatcherHandler会找到对应handler,
适配器模式运行。