首页 > 图灵资讯 > java面试题>正文
Sentinel怎么实现限流的?
2024-03-20 13:16:51
Sentinel通过动态管理限流规则,根据定义的规则对请求进行限流控制。具体实现步骤如下:
- 定义资源:在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");
}
- 配置限流规则:在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); // 加载规则列表,使限流规则生效
}
- 监控流量:Sentinel会监控每个资源的流量情况,包括请求的QPS(每秒请求数)、线程数、响应时间等。
Sentinel控制台
- 限流控制:当请求到达时,Sentinel会根据资源的限流规则判断是否需要进行限流控制。如果请求超过了限流阈值,则可以进行限制、拒绝或进行其他降级处理。
Sentinel采用的什么限流算法?
Sentinel使用滑动窗口限流算法来实现限流。
滑动窗口限流算法是一种基于时间窗口的限流算法。它将一段时间划分为多个时间窗口,并在每个时间窗口内统计请求的数量。通过动态地调整时间窗口的大小和滑动步长,可以更精确地控制请求的通过速率。
Sentinel怎么实现集群限流?
Sentinel利用了Token Server和Token Client的机制来实现集群限流。
开启集群限流后,Client向Token Server发送请求,Token Server根据配置的规则决定是否限流。
Token Server和Client