0
点赞
收藏
分享

微信扫一扫

gateway

DT_M 2022-03-12 阅读 73

gateway

为什么要用网关

如果不用网关

  • 客户端需要发起多次请求,增加网络通信的成本以及客户端处理的复杂性
  • 服务的鉴权会分布在每个微服务中处理,客户端对于每个服务的调用都需要重复鉴权。
  • 可能不同服务采用不同的协议,比如HTTP RCP,客户端需要调用多个服务,需要对不同协议进行适配。

网关的作用

  • 针对所有请求进行统一鉴权,限流,熔断,日志。
  • 协议转换。针对多种不同协议,在网关层可以统一处理后以HTTP对外提供服务。
  • 统一错误码处理。
  • 请求转发,并且可以基于网关实现内外网的隔离。

在网关层进行请求拦截,获取请求中附带的用户身份信息,调用统一认证中心对请求进行身份认证,在确认了身份之后再检查是否有资源的访问权限。

image-20210924182659011

网关的本质是对请求进行路由转发以及对请求前置和后置的过滤。

  • 请求的转发和路由:接收客户端的所有请求,并将请求转发到后端服务中,提供统一的业务接口给客户端
  • 过滤:网关会拦截所有的请求来完成一系列的横切工作,比如鉴权,限流。

配置文件

spring:
  cloud:
    gateway:
      routes:
        - id: define_filter
          predicates:
            - Path=/gateway/**
          filters:
            - name: xppDefine
              args:
                name: xpp
            - name: RequestRateLimiter
              args:
                denyEmptyKey: false
                emptyKeyStatus: SERVICE_UNAVAILABLE
                keyResolver: '#{@ipAddressKeyResolver}'
                redis-rate-limiter.replenishRate: 1
                redis-rate-limiter.burstCapacity: 2
            - StripPrefix=1
          uri: http://localhost:8080/say
  • id:自定义路由ID 保持唯一。

  • uri:目标服务地址,支持普通URI以及lb://应用注册服务名称,后者表示从注册中心获取集群服务地址。
  • predicates:路由条件,根据匹配的结果决定是否执行该请求路由。
  • filters:过滤规则,包含pre和post过滤。其中StripPrefix=1,表示gateway根据该配置的值去掉URL路径的部分前缀,1表示去掉一个前缀,即在转发的目标URI中去掉gateway

gateway相关概念:

  • 路由(Route):它是网关的基本组件,由ID,目标URI,predicates,filters集合组成
  • 谓词(Predicate):java8进入的函数式接口,提供断言功能。可以匹配HTTP请求中的任何内容。如果Predicate集合判断结果为true,则意味着请求会被当前Router进行转发。
  • 过滤器(Filter):为请求提供前置和后置过滤

当客户端发送一个请求到网关时,网关会根据一系列Predicate的匹配结果决定访问哪个Route路由,然后过滤器链进行请求的处理,过滤器链可以在请求发送到后端服务器前和后执行。

这就是网关的大体介绍了,网关可以鉴权、熔断、限流、路由转发。其实网关最重要的就是路由和谓词两部分。

举报

相关推荐

【Gateway】Gateway Filter Factories

Gateway

Gateway 应用

网关 Gateway

网关GateWay

网关gateway

Gateway指南

Gateway学习

Spring GateWay

0 条评论