美文网首页
微服务网关GateWay

微服务网关GateWay

作者: TZX_0710 | 来源:发表于2021-03-15 21:02 被阅读0次
  • 网关的作用

    • 针对所有请求进行统一鉴权、限流、熔断、日志
    • 协议转化
    • 统一错误码处理
    • 请求转发

    Spring Cloud Zuul

    Zuul是Netflix开源的微服务网关,它的主要功能是路由转发和过滤。Zuul的核心是由一系列过滤器组成,它定义了4种标准类型的过滤器,这些会对应请求整个生命周期。

    * Pre Filters:前置过滤器,请求被路由之前调用,可以用于鉴权、限流等
    * Routing Filters:路由过滤器,请求路由到后端的微服务
    * Post Filters:后置过滤器,路由过滤器中远程调用结束后执行,可以用于做统计、监控、日志等
    * Error Filters:错误过滤器,任意一个过滤器出现异常或者远程服务调用超时会被调用
    

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会在参数最后一个位置置入一个预设的常量,最终实现普通限流

相关文章

网友评论

      本文标题:微服务网关GateWay

      本文链接:https://www.haomeiwen.com/subject/khllcltx.html