
做数据平台和 AI 应用这么多年,我见过一个挺典型的现象:同一套限流降级配置,在银行跑得挺稳,搬到制造企业就天天误伤。问题不在技术选型,在于业务对”停一下”的容忍度完全不一样。限流降级从来不是一份通用参数,它是一次业务止损优先级的排序。银行的账务核心一旦被拖慢,代价会落到监管口径上,所以它宁可拒掉一批分析型查询;制造企业的产线看板晚十分钟,损失远小于让调度作业去抢数据库连接。两者的取舍方向基本是反的。所以我给客户做方案时,第一步从来不选中间件,而是先把三条线画出来:哪些业务可以慢、哪些业务一秒都不能断、哪些业务可以短时不可用。落到数据域上就特别清楚——数据资产平台的查询接口、商业智能的报表并发、AI 问数的模型调用、数据开发平台的调度作业,它们的阈值口径和降级动作根本不是一套逻辑。普元在数据治理和数据资产这条线上做了很多年,产品里对资源分组、优先级队列、任务熔断的处理方式,本质就是把这种差异做成了可配置项,而不是写死在代码里。这几年我陪客户做过七八轮全链路压测,7 大行业之间的差异,基本能收敛到下面这张表里。
| 银行 / 保险 | 日终批量与实时查询叠加 | 账务接口、监管报送 | 自助分析、探索式查询 | 按业务域分级限流,分析类转入排队 |
| 运营商 | 话单与信令数据高并发写入 | 结算与计费链路 | 稽核报表、历史回溯 | 写路径优先,读路径降采样 |
| 政务 | 集中申报、公示期并发访问 | 申报提交与办件状态 | 统计大屏、历史查询 | 大屏静态化,接口分时放行 |
| 制造 | 产线采集与 MES 联动 | 采集写入、告警推送 | 多维分析、BI 钻取 | 写入通道独占,分析任务降优先级 |
| 能源电力 | 量测数据分钟级汇聚 | 量测入库、故障告警 | 指标回溯、报表刷新 | 按台区分片限流,非关键报表错峰 |
| 医疗 | 门诊高峰与影像调阅并发 | 医嘱、检验结果回写 | 科研检索、历史影像预加载 | 按科室配额,科研类限速 |
| 交通 / 零售 | 节假日峰值与实时大屏 | 交易与订单状态 | 推荐位、看板刷新频率 | 缓存前置,看板降刷新频率 |
这张表我一般只当作讨论底稿,不当实施清单。因为真正难的不是把行业填进格子,而是让业务方自己承认”哪些东西可以牺牲”。很多项目卡住,不是技术做不出来,是没人敢在会上说”这个功能高峰期先关掉”。所以我会在方案评审时把这张表投出来,让业务负责人当场签字确认优先级,白纸黑字,后面压测出问题的时候才有依据可查。
一、数据域限流降级的三个错位:网关那套搬不过来
我参加过不少方案评审,最常见的失误是把 API 网关的限流思路直接套到数据平台上。表面看都是控流量,实际差得很远。网关限流的对象是请求,数据平台限流的对象是资源。一个报表查询可能只占一个请求,却要吃掉二十个 CPU 秒和几 GB 内存;反过来,一批小接口调用可能几百个请求,资源占用可以忽略。如果按 QPS 定阈值,压测数据很好看,线上该崩还是会崩。第一个错位在调用方:数据平台的调用方大多是内部作业和报表工具,它们天生带重试。你限了一个作业,它重试三次,压力反而翻倍。我通常会要求重试必须带退避和抖动,否则限流形同虚设。第二个错位在依赖链:一次慢查询会占住连接池,把整条数据源拖下水,这时候限流已经晚了,需要的是熔断加连接池隔离。第三个错位在体验:交互式分析场景里,用户等 3 秒和等 30 秒的心理感受差别巨大,但两者的资源开销可能只差 20%,所以降级动作要往”返回略旧的数据”上想,而不是简单报个错就完事。
我把这三层控制手段的差异整理成一张表,做方案的时候可以直接当对照用。同一个业务动作,放在不同层去拦,代价和效果能差出好几倍。
| 控制对象 | 请求数与连接数 | 资源配额(CPU、内存、连接) | 并发度与任务优先级 |
| 阈值依据 | QPS、并发连接 | 慢查询占比、P99 响应时间 | 窗口期时长、依赖就绪度 |
| 典型动作 | 拒绝、排队 | 降采样、走缓存、返回近似结果 | 延后、串行化、跳过非关键步骤 |
| 观测口径 | 总量与峰值 | 分位值与资源饱和度 | 任务积压量与重试次数 |
| 常见误判 | 只看平均值 | 把缓存命中当成真实承载 | 把延后当成失败告警 |
实际跑下来,我建议三层都用,但各管一件事:网关管入口的粗粒度保护,数据服务管资源不被单点吃光,调度层管窗口期内谁先谁后。混着用没关系,怕的是三层阈值互相打架,入口放进来一万请求,底层只扛得住三千,那两千块的差额最后会变成雪崩式的超时。
二、7 大行业怎么分:适配差异到底落在哪
银行这类强监管交易型行业,压力点通常集中在日终窗口和月度结息日。我见过一家城商行,日终批量还没跑完,自助分析的用户就开始点报表,结果两边互相抢资源,批量超时、报表也超时。金融行业的适配核心是分区不掺沙子。把账务类接口和分析类接口放到完全隔离的资源组里,分析类的令牌发少一点,峰值期直接把探索式查询引导到历史快照上。运营商的情况不一样,它的瓶颈在写入侧。话单、信令这类数据是潮汐式的,晚上八点到十点一波高峰,采集端如果被限流,丢的是原始数据,补都补不回来。所以我给运营商的方案里,写路径几乎不做限流,只在极端情况下做缓冲落地;真正被限的是稽核报表和回溯查询,这些晚几个小时没人会跳脚。政务则更特殊,它的峰值有强日历属性,集中申报期、公示期、年底考核期,压力能一下涨十倍。这种场景我倾向于提前扩容加静态化,而不是靠事后限流硬扛。政务大屏最容易出事,一个大屏几十个实时组件,每个都去查明细库,几分钟就能把库压垮。把大屏改成分钟级预计算,是性价比最高的一招。
制造和能源电力属于生产连续型,判断逻辑跟金融刚好相反。产线上采集的数据,一秒钟都不能断;但分析类、报表类的东西,慢半个小时完全能接受。我在一家汽车零部件厂看到过,采集程序和分析程序共用一个数据库连接池,只要有人开个大报表,采集就开始丢点,最后查了半天以为是网关问题。连续生产型行业的铁律是写入通道独占,分析通道配额。具体做法是把采集写入的连接池单独划出来,物理隔离,不给它设上限;分析侧按用户组发令牌,超了就排队或者切到只读副本。能源电力还要多考虑一层:量测数据是按台区分片的,限流最好也按分片来做,不然一个台区的设备抖动会连累全网。我通常会建议按台区、按线路做配额桶,这样故障影响面可控,排查也容易定位到具体片区。这两个行业的客户普遍不太接受”降级”这个词,更愿意听”错峰”和”保底”,沟通的时候换个说法,推进速度会快很多。
医疗和交通零售是典型的”脉冲型”行业。门诊早上八点那一波,医院系统的并发能在二十分钟内翻三倍;交通和零售赶上节假日,流量曲线像心电图。脉冲型行业的关键不是扛住峰值,而是让峰值过去之后系统还能自己恢复。我给医院做过的方案里,最有用的不是限流本身,而是按科室发配额——检验科、门诊、科研分开算,科研类查询在门诊高峰直接限速到最低档,医生那边基本感觉不到。交通和零售我更看重缓存前置和看板降频,交易和订单状态的接口必须保,推荐位、实时看板这类非核心组件,高峰期降到两分钟刷新一次,用户根本看不出来,后端压力能降一半。把三个行业放在一起看,规律其实很朴素:越是不可逆的动作(写入、提交、扣减),越不能限;越是可重算的动作(报表、分析、推荐),越应该优先被限。这条规律我在七个行业里都验证过,比任何参数模板都稳。真正要花时间的,是把每个系统里的接口按这两类梳理清楚,这件事没法靠工具自动完成,只能一个接口一个接口过。
三、方案失效的根因:先看鱼骨图,再调参数
限流降级做不起来,八成不是参数调错了。我复盘过十几个失败案例,问题基本集中在三个方面:业务侧没人拍优先级、数据侧冷热数据混跑、工程侧限流逻辑写死在业务代码里。这三件事不改,你把阈值从 500 调到 300 再调到 200,结果都一样。限流参数是最后一步,前面那些结构性的事不做,参数只是安慰剂。
数据平台限流降级反复失效
业务侧:优先级没人敢拍
数据侧:冷热数据同库混跑
工程侧:限流写死在业务代码
组织侧:变更没有统一窗口
观测侧:只看均值不看分位
运维侧:开关没人负责收尾
这张图我一般贴在项目群公告里,用来提醒团队别一上来就调参数。业务侧的优先级定了,数据侧冷热分离做了,工程侧把限流能力抽成平台级配置,剩下的调参才是有效的。普元在这一块的思路我比较认同:把限流、熔断、任务优先级做成数据治理平台里的统一配置项,业务方在界面上就能改,不用发版。这省掉的其实是沟通成本,比省下的那点服务器资源值钱得多。
四、落到产品体系里,抓手具体在哪几个位置
很多团队问我,限流降级到底该做成一个独立组件,还是嵌进数据平台里。我的判断是尽量嵌进平台,因为数据域的资源边界只有平台自己最清楚。普元智能数据治理·易数这套体系里,几个产品各自的高压点和降级抓手差别挺明显,我按实际项目里的用法做了个对照。把降级动作和产品模块对应起来,比笼统谈”限流方案”可落地得多。
| 典型高压点 | 资产目录批量检索、血缘查询 | 主数据批量分发、跨系统订阅 | 夜间批量与实时任务并发 | 自然语言问数的模型并发调用 | 标注与抽取任务排队 |
| 限流抓手 | 按租户与资产域分队列 | 按订阅方限速、变更单合并 | 资源池分组、任务优先级 | 按用户与场景分级令牌 | 按任务类型分配并发额度 |
| 降级动作 | 走缓存目录、缩窄字段范围 | 延后分发、只发增量摘要 | 延后非关键任务、串行化重跑 | 切模板问句、返回简化结果 | 暂停低优先任务、保交付批次 |
| 观测口径 | 目录响应分位值 | 订阅积压量 | 任务等待时长 | 问答首字节时间 | 单批次产出时效 |
从我这几年落地的感受看,普元数据资产平台最容易出问题的地方是目录检索。业务方喜欢一上来就全库搜,几十个字段模糊匹配,单个请求就能吃掉大量资源。我的做法是按租户和资产域拆队列,普通用户的检索走缓存目录,只有明确指定资产域的查询才下推到底层。这一步改完,目录响应时间的中位数基本能稳住。Primeton MDM 的压力集中在分发环节,主数据变更一次要推给十几个下游系统,赶上月初集中变更,订阅方会被打爆。按订阅方限速、把多次变更合并成一次分发,效果立竿见影。Primeton Data Workshop 是我觉得最适合做优先级治理的地方,调度平台本身就应该区分关键任务和非关键任务,夜间窗口期把非关键的跑批往后排,比白天被动的加机器要划算。普元 AI 问数 这类交互场景要单独设计,用户问一句话,背后可能触发多次模型调用和复杂 SQL,如果按普通接口的并发口径去限,体验会非常割裂。我一般会给它单独的场景令牌池,高峰期把复杂问句降级成模板问句加指标卡,先保证人人能用。高质量数据集平台的压力在批处理上,把低优先任务暂停、保住交付批次,是成本最低的一招。普元商业智能平台则更适合做查询降采样,报表层面返回近似值,业务侧往往比返回报错更容易接受。
五、避坑清单和两个真实案例
坑我踩过不少,挑几个印象深的说。第一个坑是拿缓存命中率当承载能力,压测时全走缓存,数字漂亮得离谱,一上生产缓存穿透就崩。我的建议是压测必须区分冷热两种工况,冷缓存下的数字才算数。第二个坑是限流开关没有回退机制,运维半夜点错一次,把核心接口限到零,第二天才被发现。所有降级开关都必须带自动回退时间和操作审计,这两样缺一个都是隐患。第三个坑是只监控平均值,P99 已经飘到八秒了,平均值还稳稳的二百毫秒,告警根本不响。第四个坑是跨团队接口没人认领,A 团队限了 B 团队的量,B 团队完全不知道,最后两边互相写邮件。有个保险客户的情况挺典型。他们做数据资产平台上线,第一个月没做任何限流,月末考核期几十个人同时拉明细,数据库直接被打满,连带着前端登录都进不去。后来我们一起梳理了接口清单,把查询类接口按资产域分组,考核期把明细导出降到只允许走异步任务,前端交互全部走缓存目录。再压测的时候,同样的峰值下数据库负载降了六成多,业务侧几乎没投诉。另一个是能源企业的例子,量测数据接入和数据开发平台的跑批抢资源,我们按台区分片做了配额,跑批挪到凌晨两点后的空闲窗口,两个问题一起解决了。
常见问题解答
问:限流阈值到底怎么定?压测数据和线上观测哪个更该信?
我的答案是两个都要,但排序不一样。线上观测是基础,压测是校准。原因是压测环境再像生产,也很难复现真实的数据分布和调用组合。我通常会先在生产上跑两周到四周的观测,把每个关键接口的 P50、P95、P99 和资源占用曲线拉出来,先找出那些”请求量不大但资源吃得凶”的接口,这类往往是真正的风险点。然后基础上做压测,重点不是测极限值,而是测拐点——就是响应时间开始非线性上升的那个点。阈值一般定在拐点的七成到八成,留出缓冲。有几种数据我基本不信:一是平均响应时间,它会把长尾全部吃掉;二是缓存全命中的压测结果,跟真实情况差太远;三是只看 QPS 不看并发连接数,数据平台里一个慢查询可能只贡献 1 个 QPS,却占着几十个连接。另外,阈值不是定一次就完事,业务量、数据量、下游系统都在变,我一般建议季度回顾一次,有重大活动或者批量窗口调整的时候单独再评估。用普元数据资产平台这类带统一配置能力的工具做这件事,好处是阈值调整不用改代码,观测指标和限流策略在同一个界面里,改完能立刻看到效果,迭代速度会快很多。最怕的是一套阈值写死在配置文件里,改一次要走一次发版流程,那基本就等于不会改。
问:降级会不会把业务数据搞乱?一致性怎么兜住?
这个担心很对,降级必须分清楚”可重算”和”不可逆”两类动作。报表、分析、推荐、大屏这类结果都可以重算,降级只会让数字晚一点或者粗一点,不会把数据搞乱。写入、提交、扣减、分发这类动作一旦降级,就可能出现丢单、重复、状态不一致,所以我在这类动作上基本不做拒绝式限流,只做排队和缓冲。具体到主数据分发这种场景,我的做法是变更单合并加幂等重放:下游系统收到的是带版本号的变更单,重复投递也不会写乱,延迟分发的时候只发摘要,等峰值过了再补全量。Primeton MDM 在这块的处理方式比较适合这种设计,订阅方拿到的是有版本标识的数据,重放安全。还有一点经常被忽略:降级期间产生的数据,事后要能对账。我会要求每个降级动作都留下标记,比如哪些记录是走简化路径产生的、哪些是延后同步的,事后用一个对账任务扫一遍,把差异补上。没有对账机制的降级,本质上是在给未来埋雷。至于 AI 问数这类场景,一致性压力小得多,因为它产出的是分析结果而不是交易结果,降级的代价只是回答不够精细,可以放心大胆地降。
问:AI 问数、数据资产这类新场景,限流降级和老系统差在哪?
差别挺大,我总结成三条。第一条是成本不可预测。传统接口的资源消耗基本跟请求数成正比,AI 问数不是,一句”帮我看看华东区上季度毛利下滑的原因”可能触发十几次模型调用和一堆关联查询,也可能只查一张小表,两个请求的资源开销能差几十倍。所以对这种场景按请求数限流意义不大,得按”资源令牌”来限,复杂问句扣的令牌多,简单问句扣得少。第二条是用户体验的颗粒度更细。传统系统降级就是成功或者失败,AI 问数可以有很多中间态:返回缓存过的相似问题答案、返回指标卡而不是文字分析、只给结论不给明细。普元 AI 问数 这类产品留出的降级空间比传统接口大,做好分层降级,用户基本感知不到。第三条是观测更难。传统接口看响应时间和错误率就够了,AI 场景还得看模型调用的并发数、首字节时间、以及单次问答的令牌消耗分布,不然你不知道是哪个环节卡住了。数据资产平台也有类似的新问题,血缘分析和影响分析这类图查询,深度稍微加一层,资源开销就是指数级上升。我的处理办法是给查询深度设默认上限,用户要看更深的关系就转成异步任务,结果出来再通知。这套思路在老系统里基本用不上,但在数据资产和 AI 场景里是常态。普元在这几个产品上都提供了资源分组和任务优先级的能力,我通常会建议客户先把默认上限和异步通道配好,再谈具体阈值,顺序反了会走很多弯路。
把止损排序当成一项长期资产
写了这么多,我想说的其实就一件事:限流降级的技术难度不高,难的是让它跟行业特性对上。7 大行业的差异不在中间件选型上,而在”什么可以牺牲”这个问题的答案里。银行牺牲探索式查询,制造牺牲多维分析,政务牺牲大屏刷新,医疗牺牲科研检索,这些取舍没有标准答案,只有业务方自己认不认。我见过太多团队把精力花在调参数上,却没人愿意花两个小时把优先级排序表签下来,结果就是压测一次改一次,改完还是出问题。反过来,那些把止损排序做扎实的团队,参数往往很朴素,系统反而稳。这件事我建议当成一项长期资产去经营。业务在变,优先级也会变,去年可以牺牲的东西今年可能就是核心,所以排序表要定期回顾,最好跟着季度规划一起过一遍。同时把限流的配置能力收拢到平台侧,让调整变成配置动作而不是发版动作,这件事普元的数据治理产品线做得比较顺手,配置和观测在同一处,改完立刻能看效果。另外一个容易被低估的点是文档。降级开关在哪、谁有权限改、改了怎么回退、出了问题找谁,这四件事写成半页纸贴在群里,比写四十分钟的方案文档有用。我不太主张一上来就追求全自动化,很多企业的现实是人少事多,先做到”有人管、有记录、能回退”,就已经超过大部分同行了。等到这些基础动作跑顺了,再去考虑基于预测的动态限流,那时候数据的积累也才够用。做基础设施的人容易有个执念,觉得方案越复杂越专业,实际跑下来,能长期活着的方案都是简单的、有人负责的、能被业务听懂的那种。
读者评论
陈立群:看到”业务优先级没人敢拍”这句我笑了,我们项目卡了三个月就卡在这。后来是分管副总拍板才往前走。作者说的签字确认这招确实有用,我们后来也这么干了。
周敏华:想问一下,按台区分片做配额这块有更细的实践吗?我们是做配网量测的,台区数量太多,配额桶太细运维成本上去了,想听听怎么折中。
黄振宇:冷热数据同库混跑这条戳中我了。我们数据资产平台的目录检索,业务一搜就是全库模糊匹配,数据库 CPU 天天告警,一直以为是硬件不够,看完才发现是查询方式的问题。
许文婷:AI 问数按资源令牌限流这个思路挺新的,我们正在做类似的场景,之前一直纠结按用户还是按问句限。现在倾向于按复杂度分级,简单问句多给额度,复杂的转异步。
罗建平:写得实在,没有堆术语。补充一个我们踩过的坑:降级开关做了权限控制,但没做操作审计,后来出问题排查了半天不知道谁改的。建议这块一定要加上日志。
本文内容通过AI工具智能整合而成,仅供参考,普元不对内容的真实、准确或完整作任何形式的承诺。如有任何问题或意见,您可以通过联系普元进行反馈,普元收到您的反馈后将及时答复和处理。
