Gateway结合sentinel限流简介

Gateway结合sentinel限流简介

在springcloud的微服务架构中,通过Gateway将资源对象藏在内网,只将Gateway暴露在外网服务中,所有的服务从外部到Gateway以后经过路由的转发,发送到各个微服务平台,此时需要Gateway可能将面临大量流量的访问,在某一刻的访问流量过大将导致网关服务不可用,那么将出现宕机的情况,并且从系统稳定性角度考虑,在处理请求的速度上,也有非常多的讲究。任意时间到来的请求往往是随机不可控的,而系统的处理能力是有限的。我们需要根据系统的处理能力对流量进行控制。流量控制的解决方案有多种,此处写一下使用Springcloud Gateway和Sentinel的结合进行限流操作。
Sentinel是面向分布式服务架构的高可用流量防护组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。Sentinel具有以下特性:丰富的应用场景、完备的实时监控、广泛的开源生态、完善的SPI扩展点。Sentinel是阿里巴巴自研开源组件,支撑了阿里近10年的双十一促流量的核心场景,例如秒杀、消峰、集群限流,具备完善的实时监控系统。
sentinel图释

在具体讲述之前首先明确几个名词的定义

资源:资源是Sentinel的关键概念。它可以是 Java 应用程序中的任何内容,例如,由应用程序提供的服务,或由应用程序调用的其它应用提供的服务,甚至可以是一段代码。在此次我们可以简单的理解为一个Restful服务接口。
规则:围绕资源的实时状态设定的规则,可以包括流量控制规则、熔断降级规则以及系统保护规则。所有规则可以动态实时调整。
在Gateway的限流规则中,可以根据Gateway中已经配置的route资源名称或者用户的自定义的API分组这2中情况进行限流。若2者均有匹配的情况下以后者的匹配为准。
每个请求在Gateway中经过一个过滤器链的处理,可以对URL连接进行一些修改操作,例如PrefixPathGateFilterFactory在url地址前拼接固定的字符串,StriprefixGatewayFilterFactory把url字符串根据“/”分割,默认去掉几个字符,SentinelGateWayFilter中进行路由规则、自定义规则根据url路径拦截,调用Sentinel的规则进行流量控制。
此处注意:当一个请求访问服务网关时,若开启限流,限流规则通过,将直接在地NettyRoutingFilter中通过Netty发送http请求访问后端微服务。若限流不通过,同样此Filter中发送请求,请求地址还是访问网关的服务,在前面的Filter—NettyWriteResponseFilter中接收此请求,继续过滤器链。
Sentinel限流使用的规则是滑动窗口的原理,统计某一个时间窗口内的请求数量,通过Slots插槽(类似于过滤器链的模式)来统计流量进行控制。
Slots链的工作方式如下图所示:
Slotl连接槽

重要的2个Slot为StatisticSlotFlowSlot和FlowSlot,前者通过滑动窗口统计数量,FlowSlot对流量进行分析控制,判断是否允许通过。具体的统计信息均由ClusterBuilderSlot进行统计,具体的信息放在了一个Map【clusterNodeMap】中,此处不是源码解析,感兴趣的推荐一篇源码解析,受益匪浅。Sentinel源码解析之滑动窗口

后记

学习记录,不足之处,请指正。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值