ZuulGateway与Nginx的区别

Posted 流楚丶格念

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ZuulGateway与Nginx的区别相关的知识,希望对你有一定的参考价值。

文章目录

导言

首先Zuul、Gateway是一类,都是web servlet网关,处理的是http请求

而Nginx属于服务器web网关,处理的也是http请求

nginx 和 网关 的区别

下面的网关都用Zuul替代,Nginx与Gateway也是大同小异

相同点:

  1. 可以实现负载均衡 (Zuul使用的是Ribbon实现负载均衡)

  2. 可以实现反向代理 (即隐藏真实ip地址)

  3. 可以过滤请求,实现网关的效果

不同点:

  1. 首先 , Nginx是C语言开发,而 Zuul 是Java语言开发

  2. 其次,Nginx负载均衡实现,采用服务器实现负载均衡,而Zuul负载均衡的实现是采用 Ribbon + Eureka 来实现本地负载均衡.

  3. Nginx适合于服务器端负载均衡,Zuul适合微服务中实现网关

  4. Nginx相比Zuul功能会更加强大,因为Nginx整合一些脚本语言( Nginx + lua )

  5. Nginx 是一个高性能的HTTP 和反向代理服务器, 也是一个 IMAP / POP3 /SMIP 服务器.
    Zuul是 Spring Cloud Netflix 中的开源的一个API Gateway 服务器,本质上是一个web servlet 应用, 提供动态路由,监控,弹性,安全等边缘服务的框架. Zuul 相当于是设备和Netflix 流应用的 Web 网站后端所有请求的前门

Zuul 与 Gateway

Zuul:

使用的是阻塞式的 API,不支持长连接,比如 websockets。
底层是servlet,Zuul处理的是http请求
没有提供异步支持,流控等均由hystrix支持
依赖包spring-cloud-starter-netflix-zuul。

Gateway:

Spring Boot和Spring Webflux提供的Netty底层环境,不能和传统的Servlet容器一起使用,也不能打包成一个WAR包。
依赖spring-boot-starter-webflux和/ spring-cloud-starter-gateway
提供了异步支持,提供了抽象负载均衡,提供了抽象流控,并默认实现了RedisRateLimiter

相同点

1、底层都是servlet

2、两者均是web网关,处理的是http请求

不同点

1、内部实现:

gateway对比zuul多依赖了spring-webflux,在spring的支持下,功能更强大,内部实现了限流、负载均衡等,扩展性也更强,但同时也限制了仅适合于Spring Cloud套件

zuul则可以扩展至其他微服务框架中,其内部没有实现限流、负载均衡等。

2、是否支持异步

zuul仅支持同步
gateway支持异步。

理论上gateway则更适合于提高系统吞吐量(但不一定能有更好的性能),最终性能还需要通过严密的压测来决定

3、框架设计的角度

gateway具有更好的扩展性,并且其已经发布了2.0.0的RELESE版本,稳定性也是非常好的

4、性能

gateway中的 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也是一个不错的选择。

以上是关于ZuulGateway与Nginx的区别的主要内容,如果未能解决你的问题,请参考以下文章

nginx+uwsgi 和nginx+gunicorn区别、如何部署

SQL内连接与外连接的区别

Zuul 网关 - setSendZuulResponse & removeRouteHost

SQL中的左连接与右连接,内连接有啥区别

apache与nginx区别

nginx那点事儿——nginx中关于rootalias及localtionproxy_pass后面是否有/的区别