服务自适应降载保护设计

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

设计目的

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

设计考虑因素

  • 如何衡量系统负载
  • 是否处于虚机或容器内,需要读取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 支持我们!👏

相关文章
|
2月前
|
计算机视觉 Python
目标检测笔记(四):自适应缩放技术Letterbox完整代码和结果展示
自适应缩放技术Letterbox通过计算缩放比例并填充灰边像素,将图片调整为所需尺寸,保持原始比例不变,广泛应用于目标检测领域。
53 1
目标检测笔记(四):自适应缩放技术Letterbox完整代码和结果展示
|
5月前
|
图形学 开发者
U3D开发进阶:精细调整Collider与优化碰撞检测性能
【7月更文第11天】在Unity 3D(简称U3D)开发过程中,精确控制Collider(碰撞器)的设置与合理利用Layer Collision Matrix(层级碰撞矩阵)对于提升游戏性能、优化物理模拟至关重要。本文将深入探讨这两项技术的应用,通过实际案例和代码示例,帮助开发者构建更加高效、流畅的游戏体验。
575 2
|
7月前
|
机器学习/深度学习 自然语言处理 算法
深度探索自适应学习率调整策略在深度学习优化中的应用
【5月更文挑战第17天】 在深度学习的复杂网络结构中,学习率扮演着至关重要的角色。一个合适的学习率可以加快收敛速度,避免陷入局部最小值,并提高模型性能。然而,固定的学习率往往难以适应不同阶段的训练需求。因此,自适应学习率调整策略应运而生,其通过动态调整学习率以响应训练过程中的变化,从而提升优化效率。本文将深入分析几种先进的自适应学习率方法,探讨它们的工作原理、优缺点及在实际问题中的应用效果。
|
7月前
|
前端开发 C++ UED
​响应式设计 vs自适应式设计
​响应式设计 vs自适应式设计
|
7月前
|
前端开发 JavaScript UED
响应式设计与自适应设计有何不同
响应式设计与自适应设计有何不同
107 0
|
机器学习/深度学习 传感器 算法
自适应动态优化控制附matlab代码
自适应动态优化控制附matlab代码
An动画优化之补间形状与传统补间的优化
An动画优化之补间形状与传统补间的优化
919 0
An动画优化之补间形状与传统补间的优化
|
编解码 人工智能 算法
最新代码开源!TartanCalib:自适应亚像素细化的广角镜头标定
作者测试了三种利用中间相机模型的关键方法:(1)将图像分解为虚拟针孔相机,(2)将目标重新投影到图像帧中,以及(3)自适应亚像素细化。将自适应子像素细化和特征重投影相结合,可将重投影误差显著提高26.59%,帮助检测到最多42.01%的特征,并提高密集深度映射下游任务的性能。最后,TartanCalib是开源的,并在一个易于使用的标定工具箱中实现。作者还提供了一个translation 层和其它最先进的工作,允许使用数千个参数回归通用模型或使用更稳健的求解器。为此,TartanCalib是广角标定的首选工具!
最新代码开源!TartanCalib:自适应亚像素细化的广角镜头标定
|
算法 知识图谱
GCA:基于自适应数据增强的图对比学习
GCA:基于自适应数据增强的图对比学习
648 0
GCA:基于自适应数据增强的图对比学习