首页 > 其他分享 >关于自动限流的思考 | 京东云技术团队

关于自动限流的思考 | 京东云技术团队

时间:2023-08-03 12:37:08浏览次数:33  
标签:阈值 系统 接口 限流 自动 流量 思考 京东

目标

保证系统不因流量过载而挂。

现状:人工限流

正常的微服务限流工具都需要人工配置:支持应用负责人事先配置限流规则(接口+调用方+限流阈值),流量在阈值以下可以正常响应,超过阈值的流量会快速失败。这种方案存在如下问题:

问题1. 接口多,无法全面覆盖

要想保证系统不因流量过载而挂,那就需要对所有中高频接口进行流量管控,不然任意接口的流量上升都可能成为“压倒骆驼的最后一根稻草”。假设存在a个应用,按每个应用平均b个中高频接口, 每个接口对应c个调用方,限流规则配置那数量为(axbxc),稍微有点规模的部门这个数量就能上万, 要想全面覆盖靠人工基本不可行。

问题2.限流阈值无法准确评估

当前限流阈值评估主要有2类:

  1. 历史流量峰值:比如近7天系统正常提供服务的流量峰值。但是这个值偏低,容易产生误杀。
  2. 压测:通过压测演练得出接口的容量上限。但是压测的方式很难模拟真实的线上环境,无论是数据质量,流量的参数质量,依赖方的性能,亦或同应用内不同接口的流量分布都很难与真实环境保持一致。

问题3. 限流阈值无法长期有效

限流阈值会随着环境的变化而变化。例如流程中新增了一个依赖、或者数据库的数据量增多、热点数据增多、其他接口流量上升占用了更多系统资源、底层的基础设施发生变化等都会导致真实容量降低,限流阈值失效。在这种情况下,持续评估阈值来匹配系统的最新状态根本无法通过人工进行保证。

解决方案:自动限流

针对如上问题解法如下:

  • 问题1\. 接口多,无法全面覆盖
  • 解:系统自动配置
  • 问题2.限流阈值无法准确评估
  • 解:系统自动评估
  • 问题3\. 限流阈值无法长期有效
  • 解:系统动态调整

具体方案如下:

系统资源到达使用率到达预警线的时候, 系统自动触发系统进行全面限流, 各接口的限流值根据应用当前的流量状态以及历史的流量状态而定。

  1. 什么时候限流:应用的容量取决于系统的资源瓶颈,当资源的使用率到达某一水平的时候才需要限流。资源包括数据库、缓存、应用服务器等。
  2. 谁来限:系统自动
  3. 限哪些接口:由于同一个应用不同接口都共享了数据库、缓存等、应用服务器等资源,接口之间的容量会相互影响,所以需要全部接口都限制才能保证资源的使用率不再上升。
  4. 各接口限多少?在资源使用率到达瓶颈的时候,所有的接口性能都会下降,对应的限流阈值也应该下调。具体的限流计算有两种方式:
  1. 可以把系统在当前状态下各接口能够正常完成的请求量作为限流的参考值,来保证资源利用率不在上升。比如接口A接受到的请求速率为100,其中50排队,20报错,30正常完成,那么该接口限流值可以参考30(为排除正常抖动,具体的值可以通过滑动窗口进行平滑)。
  2. 可以把上一同比周期的同时间(比如昨天的同一时间)的各接口的请求量作为限流的参考值。 可以看着一种回滚:我不知道问题出在哪个接口,但是按照上个周期同时刻的流量来是没问题的。

落地实践:

为防止自动限流的不可控性,可同时使用自动限流和人工限流两种方式,具体方法如下:

  1. 系统分为正常状态和戒严状态:正常状态下使用人工限流,戒严状态下使用自动限流。
  2. 正常情况下系统使用人工限流,开发人员可以针对重点接口进行限流配置。
  3. 当限流值失效或者未配置限流的时候导致系统资源到达预警值时,系统进入戒严状态,此时系统由自动限流接管,并通知开发人员。
  4. 开发人员收到通知后进行排查,确定导致资源利用率上升的原因,并针对相关接口进行人工限流值的调整(可以参考到达瓶颈前的qps),并使系统重新切换到正常状态。

备注

该方案还需更多场景验证,如有疏漏还请指出,欢迎有兴趣的小伙伴共同探讨。

作者:京东零售 马坚

来源:京东云开发者社区

标签:阈值,系统,接口,限流,自动,流量,思考,京东
From: https://blog.51cto.com/u_15714439/6947957

相关文章

  • 关于自动限流的思考
    目标保证系统不因流量过载而挂。现状:人工限流正常的微服务限流工具都需要人工配置:支持应用负责人事先配置限流规则(接口+调用方+限流阈值),流量在阈值以下可以正常响应,超过阈值的流量会快速失败。这种方案存在如下问题:问题1.接口多,无法全面覆盖要想保证系统不因流量过载而......
  • iPhone 15的OLED面板订单传已落定,京东方退出? | 百能云芯
    苹果(Apple)将于4日公布第2季财报,外界关注iPhone15系列制程进展,韩国媒体报道,三星显示器已获准生产iPhone15全4款所需有机发光二极管(OLED)面板,LGDisplay也获得有条件生产iPhone15Pro所需OLED面板的许可。韩国TheElec科技媒体1日引述消息人士报道,除了三星显示器(SamsungDisplay)外,......
  • 一种轻量级定时任务实现 | 京东云技术团队
    现在市面上有各式各样的分布式定时任务,每个都有其独特的特点,我们这边的项目因为一开始使用的是分布式开源调度框架TBSchedule,但是这个框架依赖ZK,由于ZK的不稳定性和项目老旧无人维护,导致我们的定时任务会偶发出现异常,比如:任务停止、任务项丢失、任务不执行等;每逢618大促,在单量很大......
  • 分布式服务高可用实现:复制 | 京东物流技术团队
    1\.为什么需要复制我们可以考虑如下问题:当数据量、读取或写入负载已经超过了当前服务器的处理能力,如何实现负载均衡?希望在单台服务器出现故障时仍能继续工作,这该如何实现?当服务的用户遍布全球,并希望他们访问服务时不会有较大的延迟,怎么才能统一用户的交互体验?这些问题其实都能通过......
  • 南京东路社区--社区信息
    http://www.njjd.gov.cn:8088/njd/text.jsp?id=19&aid=238 直属单位和居委会街道所属居委和直属单位南京东路街道居委会一览表居委职务姓名办公地址云中书记朱蕙娟贵州路131弄16号主任何瑞琼贵州书记方皖瑾北京东路830弄22号主任刘佩娟厦门书记宋雁亮厦门路136弄84号主任曹红娟龙......
  • 京东又开源一个新框架,用起来真优雅!
    DripTable是京东零售推出的一款用于企业级中后台的动态列表解决方案,项目基于React和JSONSchema,旨在通过简单配置快速生成页面动态列表来降低列表开发难度、提高工作效率。DripTable目前包含以下子项目:drip-table、drip-table-generator。各个子项目具体介绍如下:drip-tab......
  • 请求示例curl获取淘宝1688京东等电商平台商品详情数据API接口,批量采集
    获得页面使用命令:curlhttp://curl.haxx.se这是最简单的使用方法。用这个命令获得了http://curl.haxx.se指向的页面,同样,如果这里的URL指向的是一个文件或者一幅图都可以直接下载到本地。如果下载的是HTML文档,那么缺省的将只显示文件头部,即HTML文档的header。要全部显示,请加参数......
  • 如何用python语言获得淘宝1688京东商品详情数据API 返回值说明
    前言item_get-获得商品详情搜索商品接口,可以通过关键词请求接口拿到商品列表页面的商品标题,商品价格,商品优惠价,商品视频,商品图片,商品sku属性,商品sku属性描述,发货地,库存,商品销量,店铺优惠券,店铺促销信息等页面上有的数据均可以拿到,以上的数据可以用于行业数据分析,商品搬家业务,商品......
  • 淘宝天猫1688拼多多京东API接口,亲测有效
    Api接口也就是所谓的应用程序接口,api接口的全称是ApplicationProgramInterface,通过API接口可以实现计算机软件之间的相互通信,开发人员可以通过API接口程序开发应用程序,可以减少编写无用程序,减轻编程任务,API同时也是一种中间件,为各种不同平台提供数据共享。根据单个或分布式平台......
  • 多种语言请求【淘宝京东1688拼多多API】平台数据的方式
    首先我们以taobao商品页面采集商品详情数据为例:请求方式:HTTPS POST GET请求地址:API接口请求参数请求参数:num_iid=669646899650&is_promotion=1参数说明:num_iid:淘宝商品IDis_promotion:是否获取取促销价请求示例Python#coding:utf-8"""Compatibleforpython2.xandpyt......