微服务网关Zuul和Gateway的对比
一、介绍ZuulZuul2源码分析底层是servlet,Zuul处理的是http请求Zuul的抽象写的非常简单易懂,易于扩展,易于debug提供了两种特殊的抽象类,用户使用起来,比较灵活zuul-core包不依赖Spring,依赖的包很少没有提供异步支持流控等均由hystrix支持GateWay推荐:详细介绍地址底层依然是servlet,但使用了webflux,多嵌套了...
·
一、介绍
Zuul
- 底层是servlet,Zuul处理的是http请求
- Zuul的抽象写的非常简单易懂,易于扩展,易于debug
- 提供了两种特殊的抽象类,用户使用起来,比较灵活
- zuul-core包不依赖Spring,依赖的包很少
- 没有提供异步支持
- 流控等均由hystrix支持
GateWay
- 底层依然是servlet,但使用了webflux,多嵌套了一层框架
- 理解filter、handler、locator就能灵活使用它,但其大量使用的流式编程容易让人懵逼
- 提供了非常丰富的filter实现和灵活的RoutePredicateFactory(route匹配规则)
- 依赖spring-boot-starter-webflux和spring-cloud-starter
- 提供了异步支持
- 提供函数式编程api,使用起来方便快捷
- 提供了抽象流控,并默认实现了RedisRateLimiter
- 提供了抽象负载均衡
- 支持HttpClient、WebClient代理请求
- ps.槽点就是作为Spring家族,注释竟然这么少!
二、相同点
- 底层都是servlet
- 两者均是web网关,处理的是http请求
三、不同点
- 内部实现
- gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件
- zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。
- 是否支持异步
- zuul仅支持同步
- gateway支持异步。理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定
- 框架设计的角度
- gateway具有更好的扩展性,并且其已经发布了2.0.0的RELESE版本,稳定性也是非常好的
- 编码
- zuul更加简洁易懂,注释规范清晰,而gateway作为Spring家族的一份子,竟然几乎不注释
- 性能
- WebFlux 模块的名称是 spring-webflux,名称中的 Flux 来源于 Reactor 中的类 Flux。Spring webflux 有一个全新的非堵塞的函数式 Reactive Web 框架,可以用来构建异步的、非堵塞的、事件驱动的服务,在伸缩性方面表现非常好。使用非阻塞API。 Websockets得到支持,并且由于它与Spring紧密集成,所以将会是一个更好的 开发 体验。
- Zuul 1.x,是一个基于阻塞io的API Gateway。Zuul已经发布了Zuul 2.x,基于Netty,也是非阻塞的,支持长连接,但Spring Cloud暂时还没有整合计划。
四、总结
- 总的来说,在微服务架构,如果使用了Spring Cloud生态的基础组件,则Spring Cloud Gateway相比而言更加具备优势,单从流式编程+支持异步上就足以让开发者选择它了。
- 对于小型微服务架构或是复杂架构(不仅包括微服务应用还有其他非Spring Cloud服务节点),zuul也是一个不错的选择。
五、springCloud搭建基于Gateway的微服务
Gateway网关拦截器的ServerWebExchange
六、springcloud搭建zuul网关服务
更多推荐
已为社区贡献1条内容
所有评论(0)