spring clolud中的Gateway

Gateway(网关)

1.什么是网关

  • 网关字面意思就可以理解为网络的关卡,就是立在真正的服务与用户之间的一道关卡,隐藏了微服务的节点和ip,从而起到保护的作用.他的核心组件就是一系列的过滤器,通过过滤器将用户的请求转发到对应得微服务.

2.核心概念

  • 路由(route) 路由信息的组成:由一个ID、一个目的URL、一组断言工厂、一组Filter组成。如果路由断言为真,说明请求URL和配置路由匹配
  • 断言(Predicate) Spring Cloud Gateway中的断言函数输入类型是Spring 5.0框架中的
    ServerWebExchange。Spring Cloud Gateway的断言函数允许开发者去定义匹配来自于HTTP Request中的任何信息比如请求头和参数。
  • 过滤器(Filter) 一个标准的Spring WebFilter。 Spring Cloud Gateway中的Filter分为两种类型的Filter,分别是Gateway Filter和Global Filter。过滤器Filter将会对请求和响应进行修改处理

3.网关工作流程

spring clolud中的Gateway

  • 客户端向 Spring Cloud Gateway 发出请求。如果 Gateway Handler Mapping 中找到与请求相匹配的路由,将其发送到 Gateway Web Handler。Handler 再通过指定的过滤器链来将请求发送到我们实际的服务执行业务逻辑,然后返回。
  • 过滤器被虚线分隔的原因是过滤器可以在代理请求发送之前或之后执行逻辑。执行所有“pre”过滤逻辑,然后发出代理请求。在发出代理请求之后,将执行“post”过滤器逻辑。

4. Gateway和Feign

  • Gateway作为整个应用的流量入口,接收所有的请求,如app、网页等,并且将不同的请求转发至不同的处理微服务模块,其作用可视为nginx。
  • feign则是将当前微服务的部分服务接口暴露出来,并且主要用于各个微服务之间的服务调用。
  • Gateway也含有hystrix和ribbon,基于http通讯的,可以直接代理服务就行。在它和服务间增加feign只会增加通讯消耗,没有特别的意义。feign在服务互相调用的时候用就行了。
  • Feign主要作服务端流控,Feign的负载均衡是基于Eureka实现的
  • Gateway主要作客户端流控,并且Gateway的负载均衡结合Eureka实现易用性较好。
  • 两者虽然有很相似的功能,但是还是要看自己的自身情况,可以一起用,也可以不一起用,项目比较大时可以使用Feign来实现项目内微服务的互相调用.