服务自适应降载保护设计

简介: 服务自适应降载保护设计

设计目的

  • 保证系统不被过量请求拖垮
  • 在保证系统稳定的前提下,尽可能提供更高的吞吐量

设计考虑因素

  • 如何衡量系统负载
  • 是否处于虚机或容器内,需要读取cgroup相关负载
  • 用1000m表示100%CPU,推荐使用800m表示系统高负载
  • 尽可能小的Overhead,不显著增加RT
  • 不考虑服务本身所依赖的DB或者缓存系统问题,这类问题通过熔断机制来解决

机制设计

  • 计算CPU负载时使用滑动平均来降低CPU负载抖动带来的不稳定,关于滑动平均见参考资料
  • 滑动平均就是取之前连续N次值的近似平均,N取值可以通过超参beta来决定
  • 当CPU负载大于指定值时触发降载保护机制
  • 时间窗口机制,用滑动窗口机制来记录之前时间窗口内的QPS和RT(response time)
  • 滑动窗口使用5秒钟50个桶的方式,每个桶保存100ms时间内的请求,循环利用,最新的覆盖最老的
  • 计算maxQPS和minRT时需要过滤掉最新的时间没有用完的桶,防止此桶内只有极少数请求,并且RT处于低概率的极小值,所以计算maxQPS和minRT时按照上面的50个桶的参数只会算49个
  • 满足以下所有条件则拒绝该请求
  1. 当前CPU负载超过预设阈值,或者上次拒绝时间到现在不超过1秒(冷却期)。冷却期是为了不能让负载刚下来就马上增加压力导致立马又上去的来回抖动
  2. averageFlying > max(1, QPS*minRT/1e3)
  • averageFlying = MovingAverage(flying)
  • 在算MovingAverage(flying)的时候,超参beta默认取值为0.9,表示计算前十次的平均flying值
  • 取flying值的时候,有三种做法:
  1. 请求增加后更新一次averageFlying,见图中橙色曲线
  2. 请求结束后更新一次averageFlying,见图中绿色曲线
  3. 请求增加后更新一次averageFlying,请求结束后更新一次averageFlying
  • 我们使用的是第二种,这样可以更好的防止抖动,如图:
  • QPS = maxPass * bucketsPerSecond
  • maxPass表示每个有效桶里的成功的requests
  • bucketsPerSecond表示每秒有多少个桶
  • 1e3表示1000毫秒,minRT单位也是毫秒,QPS*minRT/1e3得到的就是平均每个时间点有多少并发请求

降载的使用

  • 已经在rest和zrpc框架里增加了可选激活配置
  • CpuThreshold,如果把值设置为大于0的值,则激活该服务的自动降载机制
  • 如果请求被drop,那么错误日志里会有dropreq关键字

参考资料

  • 滑动平均
  • Sentinel自适应限流

项目地址

https://github.com/tal-tech/go-zero

欢迎使用并 star 支持我们!👏

相关文章
|
1月前
|
计算机视觉 Python
目标检测笔记(四):自适应缩放技术Letterbox完整代码和结果展示
自适应缩放技术Letterbox通过计算缩放比例并填充灰边像素,将图片调整为所需尺寸,保持原始比例不变,广泛应用于目标检测领域。
39 1
目标检测笔记(四):自适应缩放技术Letterbox完整代码和结果展示
|
3月前
|
算法
基于小波变换的图像自适应增强算法
基于小波变换的图像自适应增强算法
17 0
|
4月前
|
图形学 开发者
U3D开发进阶:精细调整Collider与优化碰撞检测性能
【7月更文第11天】在Unity 3D(简称U3D)开发过程中,精确控制Collider(碰撞器)的设置与合理利用Layer Collision Matrix(层级碰撞矩阵)对于提升游戏性能、优化物理模拟至关重要。本文将深入探讨这两项技术的应用,通过实际案例和代码示例,帮助开发者构建更加高效、流畅的游戏体验。
486 2
|
6月前
|
机器学习/深度学习 人工智能 算法
深度探究自适应学习率调整策略在深度学习优化中的影响
【5月更文挑战第25天】 随着深度学习模型的复杂性逐渐增加,传统的固定学习率方法已不足以满足高效训练的需求。自适应学习率调整策略应运而生,通过动态调整学习率以加速收敛过程并提高模型性能。本文深入分析了几种主流的自适应学习率方法,包括Adam、RMSprop和AdaGrad等,并探讨了它们在不同深度学习场景中的应用效果。通过对比实验结果,我们揭示了这些策略在处理不同问题时的优势与局限,为未来深度学习优化算法的选择提供了理论依据。
|
6月前
|
算法
【MFAC】基于紧格式动态线性化的无模型自适应迭代学习控制
【MFAC】基于紧格式动态线性化的无模型自适应迭代学习控制
【MFAC】基于紧格式动态线性化的无模型自适应迭代学习控制
|
6月前
|
前端开发 C++ UED
​响应式设计 vs自适应式设计
​响应式设计 vs自适应式设计
|
6月前
|
前端开发 JavaScript UED
响应式设计与自适应设计有何不同
响应式设计与自适应设计有何不同
104 0
|
计算机视觉
【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)
【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)
|
机器学习/深度学习 传感器 算法
自适应动态优化控制附matlab代码
自适应动态优化控制附matlab代码