完整课程入口:996 全套课程体系 | Lua 学习路径 | 幂尔框架 mirs.cn
配置表更新后,"这次改了什么"需要一份准确的说明:公告要引用、测试要按变更点验证、出问题要回溯。人肉对比两张大表必然遗漏。配置表 diff 工具对比新旧两版,自动输出结构化变更清单:新增了哪些 id、删除了哪些 id、哪些 id 的哪些字段从什么值改成了什么值。
local function diffTable(old, new)
local changes = {}
for id, nRow in pairs(new) do
local oRow = old[id]
if not oRow then
changes[#changes + 1] = { type = "ADD", id = id, row = nRow }
else
for k, v in pairs(nRow) do
if oRow[k] ~= v then
changes[#changes + 1] = { type = "MOD", id = id, field = k, old = oRow[k], new = v }
end
end
end
end
for id in pairs(old) do
if not new[id] then changes[#changes + 1] = { type = "DEL", id = id } end
end
return changes
end
三类变更(ADD/MOD/DEL)分别输出,MOD 类带字段名与前后值。数值字段的变更额外输出差值(new - old),涨跌一目了然。
diff 结果生成两份:人读的 Markdown 报告(按变更类型分组、MOD 按字段排序),机器读的 JSON(进版本库与变更历史)。每次配置更新,diff 报告与配置一起提交,形成完整的变更历史链。回溯某次线上问题的时候,按日期找到对应 diff 报告,几分钟内就能确认"那次更新动了哪些数值"。
diff 工具还能反向使用:上线前把本次变更清单发给各系统负责人确认(涉及本系统的变更打勾确认),把"改配置影响别的系统"的事故消灭在发布前。再进一步,对 MOD 类变更按字段名分类统计(价格类变更 N 条、爆率类变更 M 条),数值调整的集中度一眼可见——集中在单一系统的批量变更,往往就是那次事故的源头。diff 工具一百来行代码,是配置管理里投入最小、收益最直接的自动化。
diff 报告的字段名用中文别名列对照(配置字段名加策划可读名),策划自查时不需要记忆程序字段名。报告头部加变更摘要统计(新增几条、修改几条、删除几条),一眼掌握本次更新的规模。