微服务网关GateWay

2021-03-15  本文已影响0人  TZX_0710

SpringCloud Gateway

  • zuul1.x采用的是传统的 thread preconnection方式来处理请求,也就是针对每一个请求,会为这个请求专门分配一个线程来进行处理,直到这个请求完成之后才会释放线程,一旦后台服务器响应较慢,就会使得该线程被阻塞
  • Zuul本身存在一些性能问题不适合高并发的场景,虽然后面升级了zuul2x,但是2x的发布时间一直不确定,所以SpringCloud并没有打算集成进来。
    GateWay的原理分析:
  • 路由: 网关的基本组件,由ID、目标URL、Predicate集合、Filter集合组成
  • 谓语(Predicate):java8引入的函数式接口、提供了断言的功能。它可以匹配Http请求中的任何内容。如果Predicate未true则表示当前路由可以赚翻
  • 过滤器(Filter):为请求提供前置和后置的过滤
    SpringCloud Gateway启动时基于Netty Server监听一个指定的端口,当客户端发送一个请求到网关时,网关会根据一系列Predicate的匹配结果来决定访问哪个路由,然后根据过滤器链进行请求的处理。过滤器链可以在请求发送到后端服务器之前和之后执行,也就是根据首先执行Pre过滤器链,然后将请求转发到后端服务器。

SpringCloud Gateway集成Sentinel网关限流

  • 从Sentinel1.6版本开始,提供了SpringCloud Gateway模块 支持两种维度限流\
  • Route限流
  • 自定义维度限

网关限流原理

  • 通过GatewayRuleManager加载网关限流规则GatewayFlowRule时,无论是否针对请求进行限流,Sentinel底层都会将网关流控规则GateWayFlowRule转化为热点参数规则ParamFlowRule 存储在GatewayFlowManager中,与正常的热点参数规则进行隔离。在转化时候,Sentinel会根据请求属性配置,为网关流控规则设置参数索引idx,并添加到热点参数规则中
  • 在外部请求进入API网关时候,会先经过SentinelGatewayFilter,在该过滤器一次进行Router ID/API分组匹配,请求属性解析和参数组装
  • Sentinel根据配置的网管限流规则来解析请求属性,并依次参照索引顺序组装参数数组。最终传入SphU.entry中
  • 在Sentinel Api Gateway AdapterCommon模块中在Slot Chain中添加了一个GatewayFlowSlot,专门处理房管限流规则的检查
  • 如果当前限流规则并没有指定限流参数,则Sentinel会在参数最后一个位置置入一个预设的常量,最终实现普通限流
上一篇下一篇

猜你喜欢

热点阅读