目标保证系统不因流量过载而挂 。
现状:人工限流【关于自动限流的思考】正常的微服务限流工具都需要人工配置:支持应用负责人事先配置限流规则(接口+调用方+限流阈值),流量在阈值以下可以正常响应,超过阈值的流量会快速失败 。这种方案存在如下问题:
问题1. 接口多,无法全面覆盖要想保证系统不因流量过载而挂,那就需要对所有中高频接口进行流量管控,不然任意接口的流量上升都可能成为“压倒骆驼的最后一根稻草” 。假设存在a个应用,按每个应用平均b个中高频接口, 每个接口对应c个调用方,限流规则配置那数量为(axbxc),稍微有点规模的部门这个数量就能上万, 要想全面覆盖靠人工基本不可行 。
问题2.限流阈值无法准确评估当前限流阈值评估主要有2类:
- 历史流量峰值:比如近7天系统正常提供服务的流量峰值 。但是这个值偏低,容易产生误杀 。
- 压测:通过压测演练得出接口的容量上限 。但是压测的方式很难模拟真实的线上环境,无论是数据质量,流量的参数质量,依赖方的性能,亦或同应用内不同接口的流量分布都很难与真实环境保持一致 。
解决方案:自动限流针对如上问题解法如下:
- 问题1. 接口多,无法全面覆盖
- 解:系统自动配置
- 问题2.限流阈值无法准确评估
- 解:系统自动评估
- 问题3. 限流阈值无法长期有效
- 解:系统动态调整
- 什么时候限流:应用的容量取决于系统的资源瓶颈,当资源的使用率到达某一水平的时候才需要限流 。资源包括数据库、缓存、应用服务器等 。
- 谁来限:系统自动
- 限哪些接口:由于同一个应用不同接口都共享了数据库、缓存等、应用服务器等资源,接口之间的容量会相互影响,所以需要全部接口都限制才能保证资源的使用率不再上升 。
- 各接口限多少?在资源使用率到达瓶颈的时候,所有的接口性能都会下降,对应的限流阈值也应该下调 。具体的限流计算有两种方式:
- 可以把系统在当前状态下各接口能够正常完成的请求量作为限流的参考值,来保证资源利用率不在上升 。比如接口A接受到的请求速率为100,其中50排队,20报错,30正常完成,那么该接口限流值可以参考30(为排除正常抖动,具体的值可以通过滑动窗口进行平滑) 。
- 可以把上一同比周期的同时间(比如昨天的同一时间)的各接口的请求量作为限流的参考值 。可以看着一种回滚:我不知道问题出在哪个接口,但是按照上个周期同时刻的流量来是没问题的 。
- 系统分为正常状态和戒严状态:正常状态下使用人工限流,戒严状态下使用自动限流 。
- 正常情况下系统使用人工限流,开发人员可以针对重点接口进行限流配置 。
- 当限流值失效或者未配置限流的时候导致系统资源到达预警值时,系统进入戒严状态,此时系统由自动限流接管,并通知开发人员 。
- 开发人员收到通知后进行排查,确定导致资源利用率上升的原因,并针对相关接口进行人工限流值的调整(可以参考到达瓶颈前的qps),并使系统重新切换到正常状态 。
作者:京东零售 马坚
来源:京东云开发者社区
推荐阅读
- 关于人工智能的5个常见误解
- 通过Docker和Kubernetes实现容器化的自动伸缩
- 关于翡翠的飘花,你知道多少呢
- 究竟是什么限制了电池容量?
- 新会陈皮多少年最好 新会陈皮年限区分
- 2022年男生有担当敏锐的好名字 关于男人勇于担当的网名
- 高丽菜是什么菜?重庆高家花园大桥限号不 高丽菜是什么菜
- 洗衣机清洗小妙招 自动洗衣机清洗小妙招
- 快手什么是限流 什么是限流
- 男生名字好听的网名 男生名字好听网名