服务自适应降载保护设计

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

设计目的

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

设计考虑因素

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

相关文章
|
XML JavaScript Java
Java 中文官方教程 2022 版(四十)(4)
Java 中文官方教程 2022 版(四十)
162 0
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的在线摄影预约管理系统
基于Java+Springboot+Vue开发的在线摄影预约管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的在线摄影管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
226 8
基于Java+Springboot+Vue开发的在线摄影预约管理系统
|
8月前
|
UED 开发者
【HarmonyOS——ArkTS语言】计算器的实现【合集】
【ArkTS语言-HarmonyOS】计算器的实现【合集】组件,点击等号后计算函数高效解析表达式并给出准确结果,达成核心功能要求。错误提示不够详尽,难以助力用户快速定位输入错误;响应式设计不足,在不同屏幕规格下适配性差。总体而言,本次实验已成功构建起基本功能框架,后续将针对上述问题深入探究优化方案,不断打磨细节,在完善计算器功能与提升用户体验的道路上持续精进,进而提升自身编程与应用开发的综合能力水平。利用按钮组件顺利完成布局设计,数字、运算符及功能按钮排列有序,操作逻辑清晰直观。
359 8
|
10月前
|
Web App开发 移动开发 iOS开发
HTML5 Audio(音频)
HTML5 Audio 标准允许网页直接播放音频文件,无需依赖插件。通过 `<audio>` 标签,开发者可以在网页中嵌入音频,支持多种格式如 MP3、WAV 和 Ogg。主流浏览器如 IE9+、Firefox、Chrome、Safari 和 Opera 均支持此功能,但不同浏览器对音频格式的支持存在差异。使用 `<source>` 标签可指定多个源文件,确保兼容性。
|
10月前
|
存储 分布式计算 负载均衡
【赵渝强老师】基于ViewFS的HDFS联邦架构
本文介绍了HDFS联盟(Federation)的概念及其在大数据存储中的应用。HDFS联盟通过允许多个NameNode管理不同的命名空间,实现了负载均衡和NameNode的水平扩展。文章还详细解释了基于ViewFS的联盟架构,以及该方案的局限性。附带的视频进一步讲解了相关概念。
187 0
|
Python
Python 中 help() 和 dir() 函数的用法
【8月更文挑战第29天】
257 5
collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped
collect2: fatal error: ld terminated with signal 11 [Segmentation fault], core dumped
812 0
|
移动开发 jenkins 持续交付
解决jenkins、git拉取代码仓库失败Please make sure you have the correct access rights
解决jenkins、git拉取代码仓库失败Please make sure you have the correct access rights
443 3
|
云安全 域名解析 SQL
什么是云盾Web应用防火墙?阿里云服务器如何接入云盾Web应用防火墙?
本文介绍了阿里云 云盾Web应用防火墙是什么以及云服务器如何接入云盾Web应用防火墙。
1267 0
什么是云盾Web应用防火墙?阿里云服务器如何接入云盾Web应用防火墙?
|
开发者
华为手机如何进行ADB调试
华为手机如何进行ADB调试
1735 0