spring cloud gateway

Spring Cloud Gateway是Spring Cloud官方推出的第二代网关框架,取代Zuul网关。算法

网关做为流量的,在微服务系统中有着很是做用。spring

网关常见的功能有:缓存

  一、路由转发、并发

  二、权限校验、框架

  三、限流控制、微服务

  四、日志监控post

  五、协议转换lua

  六、网关层缓存3d

总结:日志

  网关的本质,就是它能够实现功能的集合。

 

概览图:

  

 

关键的类:

  一、RouteLocator 路由的转发。

  二、predicate 请求与路由进行匹配

    

 

 

   三、filter 过滤与修改

    3.一、GatewayFilter : 须要经过spring.cloud.routes.filters 配置在具体路由下,只做用在当前路由上或经过spring.cloud.default-filters配置在全局,做用在全部路由上。

 

 

    3.二、GlobalFilter : 全局过滤器,不须要在配置文件中配置,做用在全部的路由上,最终经过GatewayFilterAdapter包装成GatewayFilterChain可识别的过滤器,它为请求业务以及路由的URI转换为真实业务服务的请求地址的核心过滤器,不须要配置,系统初始化时加载,并做用在每一个路由上。

    

 

 

  四、自定义过滤器,须要实现如下两个接口 :GatewayFilter, Ordered

  五、限流过滤器

    5.一、常见的限流算法:

      5.1.一、计数器算法:简单来讲,就是一分钟以内仅容许经过多少个请求。(缺点:突刺现象,没法解决某段时间并发高的问题)

      5.1.二、漏桶算法:无论流量瞬间并发多高,都保持匀速消费request。(弊端:没法应对短期的突发流量)

      5.1.三、令牌桶算法:从某种意义上讲,令牌桶算法是对漏桶算法的一种改进,桶算法可以限制请求调用的速率,而令牌桶算法可以在限制调用的平均速率的同时还容许必定程度的突发调用。在令牌桶算法中,存在一个桶,用来存放固定数量的令牌。算法中存在一种机制,以必定的速率往桶中放令牌。每次请求调用须要先获取令牌,只有拿到令牌,才有机会继续执行,不然选择选择等待可用的令牌、或者直接拒绝。放令牌这个动做是持续不断的进行,若是桶中令牌数达到上限,就丢弃令牌,因此就存在这种状况,桶中一直有大量的可用令牌,这时进来的请求就能够直接拿到令牌执行,好比设置qps为100,那么限流器初始化完成一秒后,桶中就已经有100个令牌了,这时服务还没彻底启动好,等启动完成对外提供服务时,该限流器能够抵挡瞬时的100个请求。因此,只有桶中没有令牌时,请求才会进行等待,最后至关于以必定的速率执行。

        

 

     5.二、GateWay的实现:Spring Cloud Gateway官方就提供了RequestRateLimiterGatewayFilterFactory这个类,适用Redis和lua脚本实现了令牌桶的方式。

 

注意:在“pre”类型的过滤器能够作参数校验、权限校验、流量监控、日志输出、协议转换等,在“post”类型的过滤器中能够作响应内容、响应头的修改,日志的输出,流量监控等。