计算 CPU 负载时使用滑动平均来降低 CPU 负载抖动带来的不稳定,关于滑动平均见参考资料
时间窗口机制,用滑动窗口机制来记录之前时间窗口内的 QPS 和 RT(response time)
满足以下所有条件则拒绝该请求
当前 CPU 负载超过预设阈值,或者上次拒绝时间到现在不超过 1 秒(冷却期)。冷却期是为了不能让负载刚下来就马上增加压力导致立马又上去的来回抖动
averageFlying > max(1, QPS*minRT/1e3)
averageFlying = MovingAverage(flying)
在算 MovingAverage(flying)的时候,超参 beta 默认取值为 0.9,表示计算前十次的平均 flying 值
取 flying 值的时候,有三种做法:
我们使用的是第二种,这样可以更好的防止抖动,如图:
QPS = maxPass * bucketsPerSecond
1e3 表示 1000 毫秒,minRT 单位也是毫秒,QPS*minRT/1e3 得到的就是平均每个时间点有多少并发请求
dropreq
关键字https://github.com/tal-tech/go-zero
如果觉得文章不错,欢迎 github 点个 star 🤝
1
laminux29 2020-12-09 02:12:45 +08:00
在流量暴增时要让服务保持稳定,那就需要:
1.精准计算现有服务需要的算力。以前的 FC 游戏、工业控制等业务,还能勉强做做,但在互联网业务面前,很难做到。互联网这类复杂业务,一般是通过提供冗余算力供应来达到目的。 2.对超出算力与冗余供应的请求进行不服务,或者降低服务维度比如队列排队。 你那些什么滑动法、冷却期,不仅监测上需要浪费额外算力,冷却期更会造成空闲的 CPU 周期。 |