后台一天从几百条涨到几万条,人工审核队列越堆越长,用户在等、工单在炸,而你又不敢把审核整个关掉。这篇不讲审核该审什么,只讲高并发下这套流程怎么搭:怎么把同步等审核改成异步出结果、哪些请求可以先放行后抽查、积压到什么程度该触发降级。
后台一天从几百条涨到几万条,人工审核队列越堆越长,用户在等、工单在炸,而你又不敢把审核整个关掉。这篇不讲审核该审什么,只讲高并发下这套流程怎么搭:怎么把同步等审核改成异步出结果、哪些请求可以先放行后抽查、积压到什么程度该触发降级。
先说一个容易被忽略的前提:审核架构的目标不是「审得更多」,而是「让必须审的那部分,不拖垮不必审的那部分」。只要你的接口还在同步等审核结果,那审核员的每一次卡顿都会直接变成你的接口超时,跟你后端性能没关系。下面按四块讲,顺序就是建议的落地顺序。
先把审核从同步链路里摘出去
同步等审核的写法在低并发下没问题,QPS 一上来就是排队放大器:审核慢一秒,上游连接就多占一秒,最终卡的是你自己的服务,而不是审核员。判断是否该异步的标准很直白:单条审核平均耗时乘以峰值速率,只要超过你能接受的接口响应时间,就该摘出去。
- 结果先落库再返回请求进来先写入业务表,状态置为处理中,接口立刻返回一个请求标识;审核走独立队列异步消费。验证方式是压测时看接口 P99 是否还随审核耗时波动,不波动才算摘干净。
- 设置幂等键用业务主键加操作类型拼成幂等键,审核通过的回调、前端轮询的补拉、重试投递都可能重复触达同一条记录;没有幂等键就会出现重复放行、重复扣款这类事故。验证方式是故意把同一条审核结果投递两次,看终态是否只生效一次。
- 终态回推通过后由回调或前端轮询把终态推给前端,两条路都要有;只做回调在客户端断线时用户会一直看到处理中,只做轮询则在高并发下白白增加查询压力。
自动放行的规则该按什么维度写
自动放行不是「把审核关掉」,而是把请求按风险分档、按动作类型分流。低风险读操作直接放行,写操作、对外发送、涉及资金流转的才进人工队列。这套规则的价值在于可解释、可回滚,而不是判断得多准。
- 每条自动放行都记下命中哪条规则,出问题时按规则批量回溯,而不是一句「模型判断的」就完事
- 设一条抽样比例,让被自动放行的请求里有一部分仍进人工队列,用来验证规则有没有放太松
- 规则上线和下线都走配置,不写死在代码里,否则流量高峰想临时收紧只能重新发版
- 给每条规则记一个触发量,长期不触发的规则就该删,留着只会让排查时的分支越来越多
| 维度 | 放行倾向 | 例外 |
|---|---|---|
| 动作类型 | 读、查询类直接放行 | 写、代发、涉及资金进队列 |
| 风险分档 | 低分档放行 | 高分档一律人工 |
| 用户等级 | 老用户高信任度可放宽 | 新注册、异常登录收紧 |
| 时段 | 低峰期可放宽 | 高峰拥堵时反而要收紧 |
什么情况下不适用:规则刚上线、样本量还不够时,宁可先全量人工,跑一段时间再逐步开自动。另外模型侧输出不稳定时也别急着上自动放行,规则再漂亮也架不住输入本身在漂。
队列积压了怎么处理:分级与降级
积压本身不可怕,可怕的是所有请求排在同一条队里。先给队列分优先级,不同业务线、不同用户等级的请求分开排,否则低价值请求会拖死高价值请求,而高价值请求往往是你在意的那些。
| 积压信号 | 先动哪一步 | 不要先做的事 |
|---|---|---|
| 入队速率持续大于出队速率 | 提高自动放行比例 | 直接对上游限流 |
| 平均等待时长超阈值 | 缩小人工审核范围 | 关掉整个审核通道 |
| 队列长度还在涨但斜率放缓 | 维持现状并扩容审核产能 | 临时加人手硬扛 |
| 出队速率骤降接近零 | 先查审核侧系统是否故障 | 继续调降级参数 |
要注意的是,积压指标要看速率而不是绝对值。队列当前长度很长但增长已经趋缓,说明审核产能在追上;长度不长但斜率一直往上,那才是真要出事。如果积压来自审核侧系统故障而不是流量突增,降级只会掩盖故障,先把审核通道修好再谈别的。
日志与指标:让「审核跟不上」变成可定位的数字
「审核跟不上」是个感受,不是指标。要让它变成可定位的数字,至少记四个量:入队速率、出队速率、平均等待时长、自动放行占比。这四个数两两一对,就能区分是流量涨了还是审核产能掉了,优化方向不至于跑偏。
- 每次放行决策都能复盘:请求标识、命中规则、审核人、耗时,缺一个事后都很难追责
- 把审核耗时和上游接口耗时分开埋点,别把排队时间算进接口延迟
- 阈值放配置中心,流量高峰能临时调,不用重新发版
- 给降级动作本身也记一条日志,事后能看出当时系统做了什么
- 自动放行占比要和抽样复核的误放率一起看,只看占比会越放越松
审核架构的上限不是审核员的手速,而是你在积压时敢不敢让一部分请求先通过、再回头看。下一步如果你正在选后端依赖的中转站或模型通道,先看它们的限流和重试策略会不会在你降级时雪上加霜;站内的中转站可信度检测和价格追踪有当时的实测数字,值得对照着你自己的峰值速率一起看。→
常见问题
自动放行会不会把风险放出去?
会,所以它本质是概率取舍而不是消除风险。做法是把自动放行限制在低风险动作上,保留抽样复核,并且每条放行记录命中规则,出问题能按规则批量回捞。高风险动作、涉及资金或对外发送的,仍应留在人工队列里,不要为了消化积压一刀切全放。
审核队列该用消息队列还是数据库轮询?
并发不高时数据库轮询够用,改起来也快。一旦入队速率稳定超过审核消费速率,就该换成正经的消息队列,靠消费组横向扩审核工人,同时天然带上重试和死信。判断依据是积压能否在可接受时间内消化,而不是技术偏好。
高峰期能不能干脆关掉审核?
不建议整体关,那样等于把风险决策交给运气。更稳的做法是按动作风险分级,高峰只关最低风险那一档,并同步提高抽样比例;同时给上游限流,让进入系统的量落在审核产能之内。关审核和限流最好是配套动作,只做一半通常会把问题推到下一个环节。