关于自动限流的思考 | 京东云技术团队
目标
保证系统不因流量过载而挂。
现状:人工限流
正常的微服务限流工具都需要人工配置:支持应用负责人事先配置限流规则(接口+调用方+限流阈值),流量在阈值以下可以正常响应,超过阈值的流量会快速失败。这种方案存在如下问题:
问题1. 接口多,无法全面覆盖
要想保证系统不因流量过载而挂,那就需要对所有中高频接口进行流量管控,不然任意接口的流量上升都可能成为“压倒骆驼的最后一根稻草”。假设存在a个应用,按每个应用平均b个中高频接口, 每个接口对应c个调用方,限流规则配置那数量为(axbxc),稍微有点规模的部门这个数量就能上万, 要想全面覆盖靠人工基本不可行。
问题2.限流阈值无法准确评估
当前限流阈值评估主要有2类:
- 历史流量峰值:比如近7天系统正常提供服务的流量峰值。但是这个值偏低,容易产生误杀。
- 压测:通过压测演练得出接口的容量上限。但是压测的方式很难模拟真实的线上环境,无论是数据质量,流量的参数质量,依赖方的性能,亦或同应用内不同接口的流量分布都很难与真实环境保持一致。
问题3. 限流阈值无法长期有效
限流阈值会随着环境的变化而变化。例如流程中新增了一个依赖、或者数据库的数据量增多、热点数据增多、其他接口流量上升占用了更多系统资源、底层的基础设施发生变化等都会导致真实容量降低,限流阈值失效。在这种情况下,持续评估阈值来匹配系统的最新状态根本无法通过人工进行保证。
解决方案:自动限流
针对如上问题解法如下:
- 问题1. 接口多,无法全面覆盖
- 解:系统自动配置
- 问题2.限流阈值无法准确评估
- 解:系统自动评估
- 问题3. 限流阈值无法长期有效
- 解:系统动态调整
具体方案如下:
系统资源到达使用率到达预警线的时候, 系统自动触发系统进行全面限流, 各接口的限流值根据应用当前的流量状态以及历史的流量状态而定。
- 什么时候限流:应用的容量取决于系统的资源瓶颈,当资源的使用率到达某一水平的时候才需要限流。资源包括数据库、缓存、应用服务器等。
- 谁来限:系统自动
- 限哪些接口:由于同一个应用不同接口都共享了数据库、缓存等、应用服务器等资源,接口之间的容量会相互影响,所以需要全部接口都限制才能保证资源的使用率不再上升。
- 各接口限多少?在资源使用率到达瓶颈的时候,所有的接口性能都会下降,对应的限流阈值也应该下调。具体的限流计算有两种方式:
- 可以把系统在当前状态下各接口能够正常完成的请求量作为限流的参考值,来保证资源利用率不在上升。比如接口A接受到的请求速率为100,其中50排队,20报错,30正常完成,那么该接口限流值可以参考30(为排除正常抖动,具体的值可以通过滑动窗口进行平滑)。
- 可以把上一同比周期的同时间(比如昨天的同一时间)的各接口的请求量作为限流的参考值。 可以看着一种回滚:我不知道问题出在哪个接口,但是按照上个周期同时刻的流量来是没问题的。
落地实践:
为防止自动限流的不可控性,可同时使用自动限流和人工限流两种方式,具体方法如下:
- 系统分为正常状态和戒严状态:正常状态下使用人工限流,戒严状态下使用自动限流。
- 正常情况下系统使用人工限流,开发人员可以针对重点接口进行限流配置。
- 当限流值失效或者未配置限流的时候导致系统资源到达预警值时,系统进入戒严状态,此时系统由自动限流接管,并通知开发人员。
- 开发人员收到通知后进行排查,确定导致资源利用率上升的原因,并针对相关接口进行人工限流值的调整(可以参考到达瓶颈前的qps),并使系统重新切换到正常状态。
备注
该方案还需更多场景验证,如有疏漏还请指出,欢迎有兴趣的小伙伴共同探讨。
作者:京东零售 马坚
来源:京东云开发者社区

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
云智慧x统信软件:智能化IT服务管理,提升客户服务价值
统信软件由中国领先的操作系统厂商于2019年联合成立,是全球主流的操作系统产品及服务提供商,致力于研发安全稳定、智能易用的操作系统产品,拥有统信UOS桌面版、服务器版、智能终端版在内的全栈基础设施,以及集中域管平台、企业级应用商店、平台迁移软件等自研产品矩阵。根据第三方权威数据,统信UOS桌面版市占率持续位居第一,服务器版增速行业第一。 随着数字化转型步伐的加快,越来越多的企业发现IT服务已成为获得竞争优势和管理效率的的重要推动者。统信软件非常重视客户服务质量及IT运营能力的体系建设,云智慧ITSM的正式上线运营标志着统信软件IT服务管理标准化、自动化、智能化能力的全面提升: 避免信息孤岛问题 信息孤岛会带来数据不一致、读写冲突、流程回退等一系列问题,ITSM作为重要的数据、流程通道,可以打通CRM和产研后台,实现CRM、ITSM、产研后台三位一体的IT解决方案,提供更加及时有效的业务持续性服务。 更容易通过root cause来解决共性问题 技术服务不会像平静的水面,而是会时时泛起涟漪。作为技术服务团队,每天都会收到并处理大量的客户问题。这些问题中,总会有一些是共性问题。ITSM可以...
- 下一篇
CosId 2.3.0 发布,支持 Spring-Boot-Actuator
CosId通用、灵活、高性能分布式 ID 生成器 更新内容 🎉 🎉 🎉 支持spring-boot-actuator 特性:新增CustomizeSegmentIdProperties/CustomizeSnowflakeIdProperties以支持通过编码形式配置Id定义 依赖:更新org.axonframework:axon-bom到v4.8.1 依赖:更新com.google.guava:guava到v32.1.2-jre 依赖:更新com.github.spotbugs到v5.1.0 特性:支持spring-boot-actuator 支持统计(Statistical)API 支持号段ID生成器统计(SegmentIdStat) 支持雪花ID生成器统计(SnowflakeIdStat) 新增CosIdEndpoint 新增CosIdGeneratorEndpoint 新增CosIdStringGeneratorEndpoint management: endpoints: web: exposure: include: - cosid - cosidG...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS8安装Docker,最新的服务器搭配容器使用
- Docker快速安装Oracle11G,搭建oracle11g学习环境
- SpringBoot2配置默认Tomcat设置,开启更多高级功能
- Jdk安装(Linux,MacOS,Windows),包含三大操作系统的最全安装
- Springboot2将连接池hikari替换为druid,体验最强大的数据库连接池
- SpringBoot2初体验,简单认识spring boot2并且搭建基础工程
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Windows10,CentOS7,CentOS8安装Nodejs环境
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19