写点什么

gateway 网关

作者:周杰伦本人
  • 2022 年 8 月 22 日
    贵州
  • 本文字数:1292 字

    阅读完需:约 4 分钟

gateway 网关

为什么要用网关

如果不用网关


  • 客户端需要发起多次请求,增加网络通信的成本以及客户端处理的复杂性

  • 服务的鉴权会分布在每个微服务中处理,客户端对于每个服务的调用都需要重复鉴权。

  • 可能不同服务采用不同的协议,比如 HTTP RCP,客户端需要调用多个服务,需要对不同协议进行适配。

网关的作用

  • 针对所有请求进行统一鉴权,限流,熔断,日志。

  • 协议转换。针对多种不同协议,在网关层可以统一处理后以 HTTP 对外提供服务。

  • 统一错误码处理。

  • 请求转发,并且可以基于网关实现内外网的隔离。


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


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


  • 请求的转发和路由:接收客户端的所有请求,并将请求转发到后端服务中,提供统一的业务接口给客户端

  • 过滤:网关会拦截所有的请求来完成一系列的横切工作,比如鉴权,限流。


配置文件


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 路由,然后过滤器链进行请求的处理,过滤器链可以在请求发送到后端服务器前和后执行。


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

总结

这篇文章我们讲了为什么需要用网关,以及网关在微服务中的作用是什么,希望这篇文章能让你更好的了解网关。

❤️ 感谢大家

如果你觉得这篇内容对你挺有有帮助的话:


  1. 欢迎关注我❤️,点赞👍🏻,评论🤤,转发🙏

  2. 关注盼盼小课堂,定期为你推送好文,还有群聊不定期抽奖活动,可以畅所欲言,与大神们一起交流,一起学习。

发布于: 刚刚阅读数: 2
用户头像

还未添加个人签名 2020.02.29 加入

公众号《盼盼小课堂》,多平台优质博主

评论

发布
暂无评论
gateway网关_8月月更_周杰伦本人_InfoQ写作社区