风控的决策不能等:交易的瞬间要判断是否放行、登录的时刻要判断是否放行——毫秒级的风险决策链在操作的路径上实时拦截。决策链的设计要点是规则的缓存、判短的顺序与降级的兜底。
---实时风控:规则的快速评估
function RiskEngine.evaluate(uid, action)
-- 先查缓存:短窗口内不重复评估
local cached = RiskCache.get(uid, action)
if cached ~= nil then return cached end
-- 规则链按优先级依次评估
for _, rule in ipairs(RiskEngine.rules) do
local hit = rule.check(uid, action)
if hit then
RiskCache.set(uid, action, rule.result)
return rule.result
end
end
RiskCache.set(uid, action, 'pass')
return 'pass'
end
决策链的评估用缓存的短路:短窗口内的重复评估直接取缓存的结果——缓存的 TTL 5 秒,同一玩家的连续操作不重复跑规则链。规则的评估按优先级排序:高优先级的规则(黑名单、冻结)先评估、低优先级的(频控、画像)后评估——风险的拦截在第一道就完成。评估的耗时预算 5 毫秒:超预算的规则链降级为仅黑名单校验,风控的延迟不能拖慢业务的响应。
---决策链的降级:规则引擎异常时的兜底
function RiskEngine.safeEvaluate(uid, action)
local ok, result = pcall(RiskEngine.evaluate, uid, action)
if not ok then
-- 规则引擎异常:降级为仅黑名单
Ops.alert('风控降级', uid)
return Lists.check('black', uid) == false
end
return result
end
规则引擎的异常用 pcall 兜底:规则链的任何异常降级为仅黑名单校验——黑名单是最简单也最可靠的防线,规则引擎的复杂逻辑可以降级但黑名单不能省。降级的事件告警进值班的群,风控的降级意味着防御的缺口存在——降级的时长要短,修复要快。风控的决策日志全量留痕:评估的输入、命中的规则、返回的结果,误判的追溯有完整的链路。
决策链的延迟分位监控:P99 的评估耗时不超过 5 毫秒;降级的频次与时长监控,降级的常态化提示规则引擎需要扩容或优化。
规则的缓存曾经不按动作区分,登录的缓存结果被交易复用,缓存的键加动作类型。降级的黑名单校验曾经不查过期,过期的黑名单条目仍然拒绝,过期的校验补上。决策的日志曾经全量打印,高峰期的日志量拖慢 IO,日志的采样率按风险等级分级。
决策链的预算与降级策略进配置,性能的退化自动触发降级。风控的规则变更走审批,变更的影响评估在灰度环境验证。决策的延迟进性能的看板,风控的速度与精度同时可见。
全站技术干货持续更新:996 引擎 / Lua 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
实战应用:用在哪里 悬赏捕杀把玩家之间的恩怨变成可托付的系统行为:仇家难以亲自复仇时,花费金条发布悬赏,全服玩家接单击杀目标…
实战应用:用在哪里 策划改表是日常动作,漏填字段、引用了不存在的编号、数值越界这三类问题占了配表故障的绝大多数。等玩家报错再…
实战应用:用在哪里 行会擂台给中小行会提供了固定的对抗出口:挑战方击败守擂方后接管擂台,连胜次数决定每日结算奖励档位。接口层…
实战应用:用在哪里 世界首领战里玩家最关心的是伤害前十名:榜单要求随时插入、随时能按序取出,每来一条伤害记录都重新排序一次太…
实战应用:用在哪里 百人同屏的攻城战里,把每条移动、施法消息广播给全地图是最常见的性能失误。九宫格视野的做法是把地图切成等大…
实战应用:用在哪里 留言板、行会招募语、邮件标题这类字段会被玩家自由填写,并写入角色变量或转发给持久层。拼接式的写法一旦遇到…