当前位置: 首页 > 图灵资讯 > java面试题> Sentinel怎么实现限流的?

Sentinel怎么实现限流的?

来源:图灵教育
时间:2024-03-20 13:16:51
 

Sentinel通过动态管理限流规则,根据定义的规则对请求进行限流控制。具体实现步骤如下:

  1. 定义资源:在Sentinel中,资源可以是URL、方法等,用于标识需要进行限流的请求。
// 原本的业务方法.
@SentinelResource(blockHandler = "blockHandlerForGetUser")
public User getUserById(string id) {
    throw new RuntimeException("getUserById command failed");
}

// blockHandler 函数,原方法调用被限流/降级/系统保护的时候调用
public User blockHandlerForGetUser(String id, BlockException ex) {
    return new User("admin");
}
  1. 配置限流规则:在Sentinel的配置文件中定义资源的限流规则。规则可以包括资源名称、限流阈值、限流模式(令牌桶或漏桶)等。
private static void initFlowQpsRule() {
    List<FlowRule> rules = new ArrayList<>();   
    FlowRule rule1 = new FlowRule();  // 创建一个流控规则
    rule1.setResource(resource);   // 设置要限流的资源名称
    rule1.setCount(20);  // 设置最大 QPS 为 20
    rule1.setGrade(RuleConstant.FLOW_GRADE_QPS);  // 设置限流的维度为 QPS
    rule1.setLimitApp("default");  // 设置限制的应用名称为 "default"
    rules.add(rule1);  // 将规则添加到规则列表中
    FlowRuleManager.loadRules(rules);  // 加载规则列表,使限流规则生效
}
  1. 监控流量:Sentinel会监控每个资源的流量情况,包括请求的QPS(每秒请求数)、线程数、响应时间等。

Sentinel控制台

  1. 限流控制:当请求到达时,Sentinel会根据资源的限流规则判断是否需要进行限流控制。如果请求超过了限流阈值,则可以进行限制、拒绝或进行其他降级处理。

Sentinel采用的什么限流算法?

Sentinel使用滑动窗口限流算法来实现限流。

滑动窗口限流算法是一种基于时间窗口的限流算法。它将一段时间划分为多个时间窗口,并在每个时间窗口内统计请求的数量。通过动态地调整时间窗口的大小和滑动步长,可以更精确地控制请求的通过速率。

Sentinel怎么实现集群限流?

Sentinel利用了Token Server和Token Client的机制来实现集群限流。

开启集群限流后,Client向Token Server发送请求,Token Server根据配置的规则决定是否限流。

Token Server和Client