风控的决策不能等:交易的瞬间要判断是否放行、登录的时刻要判断是否放行——毫秒级的风险决策链在操作的路径上实时拦截。决策链的设计要点是规则的缓存、判短的顺序与降级的兜底。
---实时风控:规则的快速评估
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 实战帖,语法、参数与示例一篇讲透。进入文章地图 · 查看全部 →
设计初衷 行会招人的门槛是双刃剑:无门槛的行会人满为患却乌合之众,高门槛的行会精英云集却关死了普通玩家的归属感。分层准入的目…
设计初衷 副本钥匙是副本经济的闸门:钥匙太贱,副本门口排大队、产出洪水冲垮经济;钥匙太贵,副本冷清、核心玩法没人体验。密钥平…
设计初衷 节日活动是在线峰值的引爆点:春节回城烟花一放,比奇主城同屏人数冲上日常的三倍,卡顿、掉线、排队接踵而至。峰值预案的…
底层原理 单线程的 Lua 没有并发,却有"重入":玩家的一次操作还没走完,同一次点击的第二个触发又进来了(双击、连点、宏)…
底层原理 一条业务链路往往穿越四五个函数:入口触发 → 校验 → 结算 → 通知。玩家对象、来源渠道、事务单号这些"全程都要…
业务场景 拜师系统的人数规则:一师最多三徒,出师空位才可再收。申请侧痛点:师父一次收到十几份申请无从挑起,口头答应后被人抢先…