Communitygithub.com

分布式数据正确性审查

审查复制、一致性、分区、事务和消息处理。适用于当写入可能重试、消费者可能崩溃、副本可能滞后或设计声称具有恰好一次效果时。

分布式数据正确性审查 是什么?

该技能(karlem/skills)为开发者提供了系统性地审查分布式数据正确性的框架。它专注于帮助AI代理或工程师在涉及复制、分区、事务和消息处理的系统中发现一致性漏洞、不变量违反和故障恢复缺陷。技能要求用户明确写入路径、故障窗口和排序范围,并利用故障分类账等参考工具生成最简反例来验证可疑的保证。该技能适用于Claude Code、Cursor和Codex等AI代理平台,通过结构化的步骤(从定义契约到生成审查输出)确保系统设计在面对节点崩溃、网络分区和重试时仍能维持关键不变量。它特别强调了如恰好一次语义、线性一致性和幂等性等常见声明的常见陷阱,并指引用户检查重试复用操作ID、过期租约提供陈旧值或墓碑在重放视窗前过期等场景。该技能基于《数据密集型应用系统设计》(第2版)中概述的原则,并提供了详细的参考文档供进一步阅读。

兼容平台~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/karlem/skills/tree/HEAD/architecture/distributed-systems

在你喜欢的 AI 中提问

打开一个已预加载此 Agent Skill 的新对话。

文档

分布式数据正确性

从契约开始

写下不变量、其作用范围以及它必须承受的故障。“一个订单最多只扣费一次”是有效的;“强一致性”则不够充分。确定权威记录、派生视图、参与者和每个提交/确认边界。询问客户端是否需要读己之写、因果顺序、线性化操作、可序列化事务,还是仅仅最终一致性。

审查流程

  1. 绘制写入路径,包括数据库提交、代理确认和外部副作用。记录每个成功响应在进程崩溃、机器故障或副本故障转移后保证了什么。超时意味着结果未知,不一定是执行失败。
  2. 列举每个持久化步骤之前和之后的崩溃窗口。针对每个窗口,重放操作并检查不变量。同时测试并发尝试和顺序重试。使用故障分类账。
  3. 当业务效果及其去重标记共享一个数据库时,将它们放在同一事务中。对于外部事件,考虑使用事务性发件箱。对于远程效果,要求提供持久化的提供者幂等性契约或协调状态机。代理传递保证在其记录的事务边界处停止。
  4. 确定排序范围:键、分区、流或全局。选择能维护不变量最窄的范围。分区日志对其分区内的消息排序;它不会自动排序不同分区中的相关事件。
  5. 对于复制和故障转移,检查选举、隔离、确认策略和恢复。R + W > N 在固定成员关系下提供集合交集;它本身并不建立线性一致性。参见一致性。
  6. 对于分片,验证事务局部性、热点键、再平衡和唯一性强制执行。衡量最繁忙的分片,而不仅仅是聚合吞吐量。
  7. 针对可疑的保证,生成最简反例以及一个能执行该反例的测试。区分必需的保证和可接受的陈旧性。

审查输出

返回:不变量 → 假设 → 故障时间线 → 违反的保证 → 最小修复 → 代价 → 验证。包含针对已经不一致数据的恢复路径。指出任何依赖于特定数据库、代理或提供者版本的行为。

推荐前检查

  • 重试的请求能否使用不变的参数复用其稳定的操作ID?
  • 租约持有者是否需要由资源强制执行的单调递增的隔离令牌?仅靠租约过期无法阻止暂停的进程。
  • 副本能否在成功写入后立即提供陈旧值?
  • 墓碑记录或去重记录是否在重放视窗之前过期?
  • 多记录不变量是否需要事务或显式协调?

范围和参考

部分覆盖范围与数据密集型应用系统设计(第2版,Kleppmann和Riccomini)一致。这些原始程序使用了作者的公开课程笔记和额外的原始文档;完整书籍不可用。请阅读来源以获得准确的归属。本技能不提供共识实现,也不假设拜占庭容错。

Individual skills in this repo

This repo contains 1 individual skill — each has its own dedicated page.

相关技能