知识卡片
基于事件日志的集成优于分布式事务的衍生数据方法
内容
保持不同数据系统彼此一致有两条抽象层面截然不同的路径,殊途同归。[[原子提交问题与两阶段提交的机制及两个不归路]]所属的分布式事务通过锁的互斥机制决定写入顺序、用原子提交确保变更只生效一次;[[变更数据捕获的实现方式与日志压缩机制]]与事件溯源则用日志本身的顺序来排序、用确定性重试和幂等性确保生效一次。两者最大差异在于事务系统通常提供线性一致性(包含读己之写这类有用保证),而衍生数据系统默认异步更新,不提供相同的时序保证——若你能通过单个系统来决定所有写入的排序(状态机复制的一种应用),衍生其他数据表示就会容易得多,这也解释了为什么”是否只有一处能决定写入顺序”是判断集成方案是否可靠的关键问题。作者的判断是:XA这类分布式事务协议的容错能力和性能表现不佳,严重限制了实用性,而设计更好的分布式事务协议虽然可行、但让现有工具广泛采纳它并非易事;在缺乏这种协议的现状下,基于日志的衍生数据是集成不同系统的最有前途的方法——但这不代表”最终一致性是不可避免的,忍一忍并学会和它打交道”就是合理答案,缺乏”如何应对”的具体指导,光劝人接受弱一致性并无建设性。
参考来源
- 位置:《数据密集型应用系统设计》第十二章《数据系统的未来》"衍生数据与分布式事务"(源文件:_epub-src/ch12_split_000.html)
- 结论依据:原文对比分布式事务用锁与原子提交、衍生数据系统用日志与幂等性两种保持一致性的方式,指出前者提供线性一致性而后者默认异步,并给出对XA容错性能不佳的批评及基于日志方法更有前途的判断,直接支撑本卡片结论。
- 原始内容:分布式事务通过锁进行互斥来决定写入的顺序……而CDC和事件溯源使用日志进行排序……我认为XA的容错能力和性能很差劲……在没有广泛支持的良好分布式事务协议的情况下,我认为基于日志的衍生数据是集成不同数据系统的最有前途的方法。