Sentinel-限流规则(流控模式:直接、关联、链路)

  • QPS Queries Per Second 是每秒查询率 ,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准, 即每秒的响应请求数,也即是最大吞吐能力。

img

一、流控模式-直接

添加规则:

img

img

测试例子分析:

img

启动测试

img

点击 察看结果树

img

上面测试例子,到Sentinel控制台的实时监控可以看到img

img

二、流控模式-关联

关联模式:统计与当前资源相关的另一个资源,触发阈值时,对当前资源限流

使用场景:比如用户支付时需要修改订单状态,同时用户要查询订单。查询和修改操作会争抢数据库锁,产生竞争。业务需求是有限支付和更新订单的业务,因此当修改订单业务触发阈值时,需要对查询订单业务限流。

img

当**/write资源访问量触发阈值时,就会对/read**资源限流,避免影响/write资源。

案例:

​ 需求:

​ •在OrderController新建两个端点:/order/query和/order/update,无需实现业务

​ •配置流控规则,当/order/update资源被访问的QPS超过5时,对/order/query请求限流

1. 编写测试controller方法:

img

2. 添加规则(想给谁限流,就给谁添加规则)

img

img

img

3. 借助JMeter进行测试:

img

img 4. 去网页访问验证:img

query被限流 img

5. 总结: 满足下面条件可以使用关联模式

  1. 两个有竞争关系的资源

  2. 一个优先级较高,一个优先级较低(优先级高的触发阈值时(本案例的order),对优先级低的限流(本案例的query))

三、流控模式-链路

img

案例:

img

1. 编写测试代码:

img

img

img

2. 注意:

Sentinel默认只标记Controller中的方法为资源,如果要标记其它方法,需要利用@SentinelResource注解

去配置文件里配置,关闭contextM,就可以让controller里的方法单独成为一个链路;不关闭context的话,controller里的方法都会默认进去sentinel默认的根链路里,这样就只有一条链路,无法流控链路模式

img

3. 启动之后,并到网页里分别访问了/order/query和/order/save接口后

img

4. 添加规则:(对query做限制,save没有做限制)

img

img

5. 借助JMeter来测试:

img

img

启动测试 img

img

img