1. 什么是网关?

网关相当于一个网络服务架构的入口,所有网络请求必须通过网关转发到具体的服务。常用的网关有 zuul和GateWay,zuul已经进行维护阶段,GateWay是一个全新的项目,其基于spring5.0 以及springboot2.0和项目Reactor等技术开发的网关,其主要的目的是为微服务架构提供一种简单有效的API路由管理方式。并且基于 Filter 链的方式提供了网关基本的功能,例如:安全性、监视/指标和弹性。.

2. zuul和spring cloud gateway的对比

zuul:是Netflix的,是基于servlet实现的,阻塞式的api,不支持长连接。
gateway:是springcloud自己研制的微服务网关,是基于Spring5构建,能够实现响应式非阻塞式的Api,支持长连接

3. 网关与nginx区别

相同点:都是可以实现对api接口的拦截,负载均衡、反向代理、请求过滤等,可以实现和网关一样的效果。
不同点:Nginx采用C语言编写,Gateway属于Java语言编写的, 能够更好让我们使用java语言来实现对请求的处理。
Nginx 属于服务器端负载均衡器。
Gateway 属于本地负载均衡器。

4. 过滤器和网关的对比

  • 过滤器:对单个服务器的请求进行拦截控制
  • 网关:对所有的服务器的请求进行拦截控制

    5. gateway的组成

  1. 路由 : 网关的基本模块,有ID,目标URI,一组断言和一组过滤器组成
  2. 断言:就是访问该旅游的访问规则,可以用来匹配来自http请求的任何内容,例如headers或者参数
  3. 过滤器:这个就是我们平时说的过滤器,用来过滤一些请求的,gateway有自己默认的过滤器,具体请参考官网,我们也可以自定义过滤器,但是要实现两个接口,ordered和globalfilter

    6. Gateway工作流程

  4. 客户端发送请求,会到达网关的DispatcherHandler处理,匹配到RoutePredicateHandlerMapping。

  5. 根据RoutePredicateHandlerMapping匹配到具体的路由策略。
  6. FilteringWebHandler获取的路由的GatewayFilter数组,创建 GatewayFilterChain 处理过滤请求
  7. 执行我们的代理业务逻辑访问。

    7. 如何写一个Gateway

    ```yaml spring: cloud: gateway:
    1. # 网关路由配置
    2. routes:
    3. - id: user-service # 路由Id,自定义,只要唯一即可
    4. # uri: http://127.0.0.1:8081 # 路由的目标地址 http就是固定地址
    5. uri: lb://userservice # 路由的目标地址 lb就是负载均衡,后面跟服务名称
    6. predicates: # 路由断言,也就是判断请求是否符合路由规则的条件
    7. - Path=/user/** # 这个按照路由匹配,只要以/user/开头就符合要求
    8. filters: # 路由过滤器
    9. # (?<segment>.*)表示所有请求,$\{segment}=替换路径 = /api/1 = /renrenfast/1
    10. - RewritePath=/api/(?<segment>.*),/renrenfast/$\{segment} # 重写请求路径

```

8. 如何实现负载均衡?

9. 如何修改分发策略?