sentinel实现分析

系统自适应保护是什么意思?

https://sentinelguard.io/zh-cn/docs/system-adaptive-protection.html

1
2
3
4
5
6
7
8
9
10
// total thread
int currentThread = Constants.ENTRY_NODE.curThreadNum();
...
private static boolean checkBbr(int currentThread) {
if (currentThread > 1 &&
currentThread > Constants.ENTRY_NODE.maxSuccessQps() * Constants.ENTRY_NODE.minRt() / 1000) {
return false;
}
return true;
}

qps * rt==当前的线程数就是最佳的负载。如果当前线程数据>qps * rt可以认为新进来的请求会产生积压。
qps * rt 就是当前系统的消费能力。线程数就是当前的生产能力。

正常还是需要组合其他策略使用。

只能在入口使用是因为需要当前cpu负载激发。

1
2
3
4
5
if (highestSystemLoadIsSet && getCurrentSystemAvgLoad() > highestSystemLoad) {
if (!checkBbr(currentThread)) {
throw new SystemBlockException(resourceWrapper.getName(), "load");
}
}

但实际上是不是也可以对下游也这么干?现在都是微服务架构,如何根据下游的能力实时的进行出口限流?

  1. 系统自适应保护是什么意思?