计算 CPU 负载时使用滑动平均来降低 CPU 负载抖动带来的不稳定,关于滑动平均见参考资料
时间窗口机制,用滑动窗口机制来记录之前时间窗口内的 QPS 和 RT(response time)
满足以下所有条件则拒绝该请求
当前 CPU 负载超过预设阈值,或者上次拒绝时间到现在不超过 1 秒 (冷却期)。冷却期是为了不能让负载刚下来就马上增加压力导致立马又上去的来回抖动
averageFlying > max(1, QPS*minRT/1e3)
averageFlying = MovingAverage(flying)
QPS = maxPass * bucketsPerSecond
maxPass
表示每个有效桶里的成功的 requests
bucketsPerSecond
表示每秒有多少个桶QPS*minRT/1e3
得到的就是平均每个时间点有多少并发请求rest
和 zrpc
框架里增加了可选激活配置
CpuThreshold
,如果把值设置为大于 0 的值,则激活该服务的自动降载机制drop
,那么错误日志里会有 dropreq
关键字https://github.com/tal-tech/go-zero