微服务网关Zuul和Gateway的区别

网关概念

1.路由网关

网关是系统的唯一对外的入口,介于客户端和服务器端之间的中间层,处理非业务功能 提供路由请求、鉴权、监控、缓存、限流等功能。它将”1对N”问题转换成了”1对1”问题。

通过服务路由的功能,可以在对外提供服务时,只暴露 网关中配置的调用地址,而调用方就不需要了解后端具体的微服务主机。

2. 为什么要使用微服务网关

不同的微服务一般会有不同的网络地址,而客户端可能需要调用多个服务接口才能完成一个业务需求,若让客户端直接与各个微服务通信,会有以下问题:

  • 客户端会多次请求不同微服务,增加了客户端复杂性。

  • 存在跨域请求,在一定的场景下处理相对复杂。

  • 认证复杂,每个服务都需要独立认证。

  • 难以重构,随着项目的迭代,可能需要重新划分微服务,可能将多个服务可能将会合并成一个或将一个服务拆分成多个。

3、网关的优点

微服务网关介于服务端与客户端的中间层,所有外部服务请求都会先经过微服务网关客户只能跟微服务网关进行交互,无需调用特定微服务接口,使得开发得到简化。

  • 易于监控。可以在微服务网关中收集监控数据,并将其推送到外部系统进行分析。
  • 易于认证。可以在微服务网关中进行认证,认证通过后,再将请求转发到后端微服务,而无须在每个微服务中进行认证。
  • 减少客户端与各个微服务之间的交互次数。

Zuul网关简介

Zuul是Netfiix开源的微服务网关,可以和Eureka、Ribbon、Hystrix等组件配合使用。Zuul的核心原理是一系列的过滤器(PRE、ROUTING、POST、ERROR),主要功能如下:

  • 身份认证与安全。识别每个资源的验证要求,并拒绝那些不符合要求的请求。
  • 审查与监控。将请求的资源的数据进行统计分析。
  • 动态路由。动态的将请求的资源路由到不同的后端服务。
  • 压力测试。逐渐增加指向集群的流量,以了解性能。
  • 负载分配。为每一种负载类型分配对应容量,并弃用超出限定值的请求。
  • 静态响应处理。在边缘位置直接建立部分响应,从而避免其转发到内部集群。
  • 多区域弹行。

GateWay网关简介

Spring Cloud Gateway是Spring官方基于Spring 5.0,Spring Boot 2.0和Project Reactor等技术开发的网关,Spring Cloud Gateway旨在为微服务架构提供一种简单而有效的统一的API路由管理方式。Spring Cloud Gateway作为Spring Cloud生态系中的网关,目标是替代ZUUL,其不仅提供统一的路由方式,并且基于Filter链的方式提供了网关基本的功能,例如:安全,监控/埋点,和限流等。

  • 动态路由。能够匹配各种请求属性。
  • 可以对路由指定Predicate(断言)和Filter(过滤器)。
  • 集成Hystrix的断路由功能。
  • 集成Spring Cloud的服务发现功能。
  • 请求限流的功能。
  • 支持路径重写。

区别

Zuul

  • 使用的是阻塞式的 API,不支持长连接,比如 websockets。

  • 底层是servlet,Zuul处理的是http请求

  • 没有提供异步支持,流控等均由hystrix支持。

  • 依赖包spring-cloud-starter-netflix-zuul。

Gateway

  • 底层是servlet,但使用了webflux,多嵌套了一层框架

  • 依赖spring-boot-starter-webflux和/ spring-cloud-starter-gateway

  • 提供了异步支持,提供了抽象负载均衡,提供了抽象流控,并默认实现了RedisRateLimiter。

Spring WebFlux是随Spring 5推出的响应式Web框架。

  1. spring-webflux支持两种开发模式:
  • 类似于Spring WebMVC的基于注解(@Controller、@RequestMapping)的开发模式;

  • Java 8 lambda风格的函数式开发模式。

  1. WebFlux是基于响应式流的,可以用来建立异步、非阻塞、事件驱动的服务。默认采用Reactor作为响应式流的实现库,也提供对RxJava的支持。

微服务网关Zuul和Gateway的区别
http://www.wangxiaohuan.com/2020/02/02/2020-02-02/
作者
吃素的左撇子
发布于
2020年2月2日
许可协议