服务容错Sentinel的流控规则探究

1. 流控模式–直接

控制台设置流控

image-20220107201358247

在这里插入图片描述

再次访问,QPS超过1就报异常

image-20220107201610866

2. 流控模式–关联

当关联的资源达到阈值,就限流自己

场景:内容中心有两个API,一个是查询share表,另一个是修改share表的数据,这是高并发的应用,所以查询接口的调用速度过快,就会影响修改接口的性能,相反也一样。这时可以根据业务需求来衡量优先读还是优先修改!

如何希望优先修改可以以下配置:

在这里插入图片描述

这样修改比较频繁的时候,查询接口就会被限流

3. 流控模式–链路

只记录指定链路上的流量

在这里插入图片描述

  • 图中针对来源。表示是针对某个微服务来限流。
  • 图中入口资源。针对API级别,指定的API达到一定阈值就限流。

测试示例

编写两个API同时调用一个Service,使用sentinel对其中一个API限流。

  1. 编写都请求的service
@Slf4j
@Service
public class TestService {
    @SentinelResource("common")
    public String common() {
        log.info("common....");
        return "common";
    }
}
  1. 写两个controller接口调用上述Service
@Autowired
private TestService testService;

@GetMapping("test-a")
public String testA() {
    this.testService.common();
    return "test-a";
}

@GetMapping("test-b")
public String testB() {
    this.testService.common();
    return "test-b";
}
  1. 启动项目分别访问两个接口

image-20220107203340828

image-20220107203355976

可以让sentinel控制台有他们的簇点

image-20220107203440160

  1. common设置流控

在这里插入图片描述

表示只对/test-a接口做流控。

发现并没有起到对/test-a接口限流的效果!!应该是版本更新的原因

参照这个官方项目的issue(https://github.com/alibaba/sentinel/issues/1213),加了个配置。

在这里插入图片描述

可以起到限流效果但是页面会报500,后端控制到报空指针

image-20220107205643678

com.alibaba.csp.sentinel.slots.block.flow.FlowException: null

看到网上和官方有挺多解决方案的,现在先不管了!以后项目具体使用到再去踩坑!

4. 流控效果–快速失败

直接失败,抛异常

相关源码

  • com.alibaba.csp.sentinel.slots.block.flow.controller.DefaultController

5. 流控效果–Warm Up

在这里插入图片描述

根据codeFactor(默认3)的值,从阈值/codeFactor,经过预热时长,才到达设置的QPS阈值

场景:比如一个秒杀微服务,平时访问不是很高,但活动秒杀的瞬间,流量激增,这是就可以使用Warm Up。让流量缓慢增加,在经过预热时间后才达到阈值,保护微服务。

官方的介绍文档:https://github.com/alibaba/Sentinel/wiki/限流—冷启动

相关源码:com.alibaba.csp.sentinel.slots.block.flow.controller.WarmUpController

6. 流控效果–排队等待

匀速排队,让请求以均匀的速度通过,阈值类型必须设成QPS,否则无效

场景:应对突发流量的场景。等突发时期过了,利用空闲时间处理请求。

官方介绍文档:https://qithub.com/alibaba/Sentinel/wiki/%E9%99%90%E6%B5%81—%E5%8C%80%E9%80%9F%E5%99%A8

相关源码:com.alibaba.csp.sentinel.slots.block.flow.controller.RateLimiterController

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值