账实对账与漂移巡检
L0 · 台账是真相、缓存是加速层:定时巡检两者的漂移、按阈值告警、可归因的自动写回补数,并将"恢复后校验"作为闭环的最后一关。
巡检作业
6个
每 30 min ~ 每日各频次
本期漂移行
128行
占 159.1 万行的 0.012%
自动写回补数
31行
8 行需人工确认
未解决漂移
2项
盘点未记账 1 行、门店退回在途 1 项
缓存新鲜度
1.2min
SLA ≤ 5 min
恢复后校验
7/7通过
行数/分区/新鲜度/下游一致全部通过
漂移巡检作业(缓存 ↔ 台账)
台账是唯一真相,缓存只是加速层:任何漂移都以台账为准写回| 作业 ID | 作业名称 | 调度频率 | 最近执行 | 耗时(s) | 扫描行数 | 漂移行数 | 漂移率 | 结论 | 对象 |
|---|---|---|---|---|---|---|---|---|---|
| RC-20251021-0930 | 缓存 ↔ 台账漂移巡检 | 每 30 min | 2025-10-21 09:30 | 2.4 | 1,591,400 | 128 | 0.012% | 告警 | 门店库存缓存 |
| RC-20251021-0900 | 门店库存缓存全量对账 | 每日 09:00 | 2025-10-21 09:00 | 46.8 | 1,204,860 | 42 | 0.003% | 正常 | 门店库存缓存 |
| RC-20251021-0800 | 在途缓存 ↔ 台账对账 | 每 2h | 2025-10-21 08:00 | 8.1 | 6,932 | 0 | 0.000% | 正常 | 在途缓存 |
| RC-20251021-0600 | 分区完整性巡检 | 每日 06:00 | 2025-10-21 06:00 | 12.6 | 92 个分区 | 0 | 0.000% | 正常 | 快照分区 |
| RC-20251021-0300 | WMS ↔ ERP 账实对账 | 每日 03:00 | 2025-10-21 03:00 | 138.4 | 386,540 | 21 | 0.005% | 警告 | 仓库台账 |
| RC-20251020-0930 | 缓存 ↔ 台账漂移巡检 | 每 30 min | 2025-10-20 09:30 | 2.6 | 1,582,360 | 96 | 0.006% | 正常 | 门店库存缓存 |
共 6 个巡检作业 · 漂移率 > 0.02% 自动告警,> 0.05% 自动触发全量对账每页
!架构原则(X14):台账为真相 + CDC 增量 → 缓存原子扣减。缓存用于实时展示与快速扣减,但一旦与台账发生漂移,必须以台账值写回并留痕。后台巡检是发现漂移的唯一手段 —— 没有巡检,漂移会一直累积到盘点上才暴露。
漂移差异台账
每条漂移必须给出根因与处理动作,"已自动修复"不算根因| 差异 ID | 发现时间 | 对象 | 缓存值 | 台账值 | 差异 | 根因 | 处理动作 | 状态 |
|---|---|---|---|---|---|---|---|---|
| DR-20251021-0031 | 2025-10-21 09:30 | 24AW-3890 / 浙江杭州奥莱店 / F | 缓存 2 | 台账 0 | -2 | 盘亏差异单未记账 | 已自动写回台账值 0 | 已恢复 |
| DR-20251021-0030 | 2025-10-21 09:30 | 24AW-3714 / 湖北武汉武商摩尔店 / S | 缓存 7 | 台账 8 | -1 | 调拨出库 CDC 事件晚到 11s | 已重放事件并写回 8 | 已恢复 |
| DR-20251021-0029 | 2025-10-21 09:30 | 25SS-1108 / 江苏南京新街口店 / M | 缓存 11 | 台账 9 | +2 | 调拨入库在缓存侧双写 | 已按台账写回 9,并登记重复事件 | 已恢复 |
| DR-20251021-0027 | 2025-10-21 09:00 | 在途汇总(直营仓) | 缓存 186 | 台账 186 | 0 | 门店退回在途,两侧口径已对齐 | 无需处理 | 一致 |
| DR-20251021-0021 | 2025-10-21 09:30 | 24AW-3520 / 浙江嘉兴八佰伴店 / XL | 缓存 1 | 台账 1 | 0 | 盘点差异单未审批,暂不改动 | 挂起至调整单审批后复核 | 挂起 |
| DR-20251021-0018 | 2025-10-21 09:30 | 24AW-3668 / 浙江杭州奥莱店 / M | 缓存 4 | 台账 4 | 0 | — | 无需处理 | 一致 |
| DR-20251020-0096 | 2025-10-20 09:30 | 门店库存缓存(华中) | 缓存 218,400 | 台账 218,412 | -12 | 华中 3 家门店 CDC 断流 6 分钟 | 已触发全量对账补数 | 已恢复 |
共 7 条漂移记录 · 已恢复 5 / 一致 1 / 挂起 1每页
漂移趋势(近 30 天 · 漂移行数)
趋势上升说明扣减链路或事件消费存在问题缓存与台账漂移行数 阈值 320 行(0.02%)10-19 断流事件 CDC 断流 6 分钟,漂移峰值 812 行
漂移根因分布
| 阈值项 | 当前值 | 阈值 |
|---|---|---|
| 漂移率 | 0.012% | 0.020% |
| 单批漂移行数 | 128 行 | 320 行 |
| 缓存新鲜度 | 1.2 min | 5 min |
| 连续告警次数 | 1 次 | 3 次升级 |
写回补数规则(自动 vs 人工)
自动写回仅限可归因的漂移;未知漂移必须冻结写入并人工介入,禁止盲目覆盖| 漂移类型 | 判定条件 | 处理方式 | 是否留痕 | 阈值告警 | 启用 |
|---|---|---|---|---|---|
| 事件晚到 / 乱序 | 缓存值 = 台账值 ± 单笔业务量,且差异可在事件流中找到对应事件 | 自动重放事件并写回台账值 | 是 | 单批 > 50 行告警 | |
| 缓存双写 | 缓存值 = 台账值 + 等量重复业务量(调拨入库最常见) | 自动写回台账值,并登记重复事件 ID | 是 | 同源事件 > 3 次告警 | |
| 差异单未记账 | 差异可由未闭环的盘点差异单解释 | 挂起,等调整单记账后自动复核 | 是 | 挂起 > 24h 告警 | |
| 口径差异 | 两侧对"在途/退回"的定义不同 | 不写回,登记为口径问题交数据治理组 | 是 | 立即通知 | |
| 未知漂移 | 无法归因到任何已知类型 | 冻结该 SKC 的缓存写入,转人工排查 | 是 | 立即告警(严重) |
恢复后校验清单(绿灯 ≠ 数据可信)
附录 D 第 15 条:恢复后必须校验行数、分区完整性、新鲜度、下游一致| 校验项 | 校验标准 | 实测 | 结论 | 不通过处理 |
|---|---|---|---|---|
| 行数校验 | 对账后行数 = 台账行数(门店 × SKC × 尺码) | 1,204,860 = 1,204,860 | 通过 | 阻断 |
| 分区完整性 | 当日 92 个分区全部存在且非空 | 92 / 92 | 通过 | 阻断 |
| 数据新鲜度 | 缓存最后更新时间 ≤ 5 min | 1.2 min | 通过 | 阻断 |
| 下游一致性 | 决策快照重算结果与冻结快照差异 = 0 | 差异 0 行 | 通过 | 阻断 |
| 聚合一致性 | 按门店/按 SKC 汇总与台账汇总一致 | 差异 0 件 | 通过 | 告警 |
| 抽样核对 | 随机 200 行与 ERP 页面逐行核对 | 200 / 200 一致 | 通过 | 告警 |
| 回写补数留痕 | 所有写回动作有 ID、时间、原值、新值、操作人 | 31 条记录完整 | 通过 | 告警 |
一次漂移事件的处置时间线
从发现到恢复 5 分钟,全链路可审计09:30:02 · 巡检发现
RC-20251021-0930 扫描 159.1 万行,命中漂移 128 行(0.012%)
09:30:41 · 根因归类
59 行 CDC 事件晚到、33 行盘亏差异未记账、22 行调拨入库缓存双写、10 行口径差异、4 行未知
09:31:05 · 自动写回
可归因的 124 行按台账值写回,登记 31 条写回记录(含原值/新值/ID/时间)
09:31:06 · 挂起 1 行
24AW-3520 / 浙江嘉兴八佰伴店 / XL 挂起至调整单审批
09:31:06 · 转人工 1 项
门店退回在途口径差异转数据治理组,冻结该节点缓存写入
09:34:20 · 恢复后校验
行数 1,204,860 = 台账;92 个分区完整;新鲜度 1.2 min;下游决策快照重算差异 0 行 → 全部通过
09:35:00 · 恢复监控
缓存写入解冻,恢复常规 30 min 巡检频率
巡检与写回参数配置
i互链:盘点差异见 盘点差异与调整单 幂等与重放见 幂等与外部回写日志 SLA 台账见 SLA 与任务运行台账