服务自适应降载保护设计

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

设计目的

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

设计考虑因素

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

相关文章
|
13天前
|
计算机视觉 Python
目标检测笔记(四):自适应缩放技术Letterbox完整代码和结果展示
自适应缩放技术Letterbox通过计算缩放比例并填充灰边像素,将图片调整为所需尺寸,保持原始比例不变,广泛应用于目标检测领域。
25 1
目标检测笔记(四):自适应缩放技术Letterbox完整代码和结果展示
|
3月前
|
图形学 开发者
U3D开发进阶:精细调整Collider与优化碰撞检测性能
【7月更文第11天】在Unity 3D(简称U3D)开发过程中,精确控制Collider(碰撞器)的设置与合理利用Layer Collision Matrix(层级碰撞矩阵)对于提升游戏性能、优化物理模拟至关重要。本文将深入探讨这两项技术的应用,通过实际案例和代码示例,帮助开发者构建更加高效、流畅的游戏体验。
309 2
|
3月前
|
机器学习/深度学习 计算机视觉
【YOLOv10改进-注意力机制】CoordAttention: 用于移动端的高效坐标注意力机制
YOLOv10专栏探讨了将位置信息融入通道注意力的创新方法,提出“坐标注意力”机制,改善移动网络性能。该机制通过两个1D特征编码捕捉空间依赖并保持位置细节,生成增强对象表示的注意力图。简单易整合到现有网络如MobileNet,几乎无额外计算成本,且在ImageNet及目标检测等任务中表现优越。实现代码展示了CoordAtt模块的工作流程。更多详情和配置见链接。
|
5月前
|
前端开发 C++ UED
​响应式设计 vs自适应式设计
​响应式设计 vs自适应式设计
|
5月前
|
前端开发 JavaScript UED
响应式设计与自适应设计有何不同
响应式设计与自适应设计有何不同
100 0
|
计算机视觉
【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)
【图像去噪】基于混合自适应(EM 自适应)实现自适应图像去噪研究(Matlab代码实现)
|
机器学习/深度学习 传感器 算法
自适应动态优化控制附matlab代码
自适应动态优化控制附matlab代码
An动画优化之补间形状与传统补间的优化
An动画优化之补间形状与传统补间的优化
839 0
An动画优化之补间形状与传统补间的优化
|
算法 知识图谱
GCA:基于自适应数据增强的图对比学习
GCA:基于自适应数据增强的图对比学习
612 0
GCA:基于自适应数据增强的图对比学习