Sentinel流量控制
- 1、Sentinel微服务限流
- 2、QPS限流
- 2.1 配置QPS限流
- 2.2 测试
- 3、线程数限流
- 3.1 配置线程数限流
- 3.2 测试
- 4、流控模式
- 4.1 流控模式说明
- 5、流控效果(只适用于QPS限流):
1、Sentinel微服务限流
Sentinel流量控制(flow control)的原理是监控应用流量的QPS或并发线程数等指标,当达到指定的阈值时对流量进行控制,以避免被瞬时的流量高峰冲垮,从而保障应用的高可用性。
QPS:每秒的请求数。当每秒请求数超过指定阈值之后对当前请求进行限流。
并发线程数:当服务器中创建线程数超过指定阈值之后对当前请求进行限流。
2、QPS限流
2.1 配置QPS限流
2.2 测试
每秒最大只能接收2个请求,超过2个报错
3、线程数限流
3.1 配置线程数限流
3.2 测试
这里使用压力测试工具apache-jmeter-5.2
下载链接:javascript:void(0) 配置线程组:
配置http请求:
发起请求并在察看结果树中查看
可以看出,有一个请求没来得及处理。
4、流控模式
4.1 流控模式说明
- 直接:标识流量控制规则到达阈值直接触发流量控制
- 关联: 当两个资源之间具有资源争抢或者依赖关系的时候,这两个资源便具有了关联。比如对数据库同一个字段的读操作和写操作存在争抢,读的速度过高会影响写得速度,写的速度过高会影响读的速度。如果放任读写操作争抢资源,则争抢本身带来的开销会降低整体的吞吐量。可使用关联限流来避免具有关联关系的资源之间过度的争抢,举例来说,read_db 和 write_db 这两个资源分别代表数据库读写,我们可以给 read_db 设置限流规则来达到写优先的目的:设置 strategy 为 RuleConstant.STRATEGY_RELATE 同时设置 refResource 为 write_db。这样当写库操作过于频繁时,读数据的请求会被限流。
- 链路:https://github.com/alibaba/Sentinel/wiki/%E6%B5%81%E9%87%8F%E6%8E%A7%E5%88%B6
5、流控效果(只适用于QPS限流):
- 直接拒绝:默认的流量控制方式,当QPS超过任意规则的阈值之后,新的请求就被立即拒绝,拒绝方式为抛出FlowException。
- Warm Up:预热/冷启动方式。在系统长期处于低水位的情况下,当流量突然增加时,直接把系统拉升到高水位可能瞬间把系统压垮。通过冷启动让通过的流量缓慢增加,在一定时间内逐渐增加到阈值上限,给冷系统一个预热的时间,避免冷系统被压垮。
- 匀速排队:严格控制请求通过的间隔时间,即让请求以均匀的速度通过,对应的是漏桶算法。