一、为什么需要网关?
假设我们要使用微服务构建一个电商平台,一般来说需要订单服务、商品服务、交易服务、会员服务、评论服务、库存服务等。
移动互联网时代,我们的系统不仅会通过 Web 端提供服务,还有 App 端、小程序端等,那么不同客户端应该如何访问这些服务呢?
如果不使用网关:
每个业务都会需要鉴权、限流、权限校验等逻辑,如果每个业务都各自为战,自己造轮子实现一遍,会很蛋疼,完全可以抽出来,放到一个统一的地方去做。
各个调用端单独去发起连接,会出现很多问题,比如不容易监控调用流量,出现问题不好确定来源,服务之间调用关系混乱等。
- Gate way网关作为所有API接口服务请求的接入点,实现了路由,过滤,流量控制,
二、Spring Cloud Gateway的核心概念
Route路由:gateway的基本构建模块。它由ID、目标URI、断言集合和过滤器集合组成。如果聚合断言结果为真,则匹配到该路由。
Predicate断言:谓词(predicate)是gateway内置的的一下关于请求相关的处理
Filter过滤器:GateWay提供了很多内置的过滤器让我们使用,具体的过滤器在spring-cloud-gateway-core-2.1.2.RELEASE.jar下的org.springframework.cloud.gateway.filter.factory包下。也可以自定义过滤器在返回请求之前或之后修改请求和响应的内容。
Prefilter:
PostFilter:
网关作用:授权,日志,限流
三、Spring Cloud Gateway工作流程
如上图所示,客户端向Spring Cloud Gateway发出请求。 如果Gateway Handler Mapping确定请求与路由匹配(这个时候就用到predicate),则将其发送到Gateway web handler处理。 Gateway web handler处理请求时会经过一系列的过滤器链。 过滤器链被虚线划分的原因是过滤器链可以在发送代理请求之前或之后执行过滤逻辑。 先执行所有“pre”过滤器逻辑,然后进行代理请求。 在发出代理请求之后,收到代理服务的响应之后执行“post”过滤器逻辑。这跟zuul的处理过程很类似。在执行所有“pre”过滤器逻辑时,往往进行了鉴权、限流、日志输出等功能,以及请求头的更改、协议的转换;转发之后收到响应之后,会执行所有“post”过滤器的逻辑,在这里可以响应数据进行了修改,比如响应头、协议的转换等。
四、GateWay与Zuul的区别
Gateway作为后出来的新一代网关,在功能吸收了zuul的基础上,底层做了更多的优化,并扩展了zuul的功能,最为核心的是,Gateway的底层通信采用了异步非阻塞的netty,相比目前的zuul的1.X版本,这个优势是明显的,可能因为这一点导致了Gateway成为技术选型的热门原因吧