知识卡片

源代码管理系统的自动合并策略是乐观锁威力的放大器

普通读书笔记卡

内容

源代码管理系统(SCM)是大家最熟悉的乐观离线锁应用场景:检测到冲突时,它通常会尝试自动合并双方的修改再重新提交。一个高效的合并策略能让乐观离线锁变得异常强大——不仅因为系统整体的并发度更高(多人可以同时改动重叠的文件而互不阻塞),更重要的是,即便真的发生了”冲突”,用户基本不需要重新做任何工作,合并本身就把冲突消化掉了。企业应用和SCM之间最大的差别在于:SCM只需要实现一种通用的文本合并算法,而企业应用面对的是形形色色的业务数据,理论上要为每一种数据结构各自实现专属的合并逻辑——数百种业务对象几乎意味着数百种合并规则。这意味着并非所有合并都值得投入实现:有些合并逻辑复杂到不值得编码;但也有一些足够简单、值得用任何手段实现出来。作者明确指出:合并业务数据完全是可能的,而具体怎么合并高度依赖业务本身,因此本书不再深入这个话题,但提醒读者认清一点——一旦在乐观离线锁的基础上叠加合并机制,这套并发控制手段的威力会被显著放大,代价则是重新回到”冲突判断和处理是领域问题”这条老路——合并规则本身同样得由业务规则来定义。可迁移启发:乐观并发控制常被简单地理解成”检测冲突后要么失败要么重试”,但SCM证明了还有第三条路——如果能针对特定数据结构设计出可靠的自动合并策略,冲突就可以被悄无声息地消化掉,用户完全感觉不到发生过冲突;这条路的代价是合并逻辑要针对具体数据结构定制,不是一套通用方案能覆盖所有场景。

参考来源

- 位置:《企业应用架构模式》第二部分"模式"之"第16章 离线并发模式"之"16.1 乐观离线锁"(源文件:_epub-src/OEBPS/Text/000190.html) - 结论依据:原文说明"一个高效的合并策略能使乐观离线锁非常强大,不仅因为系统的并发度很高,还因为用户基本上不需要重做任何工作……SCM与企业应用之间最大的差别在于SCM只需要实现一种合并而企业应用要实现数百种。有一些合并可能太复杂不值得编程实现。其他则可能值得用任何方式实现……合并业务数据与业务自身相关",直接支撑本卡结论。 - 原始内容:本书将不再讨论这个话题,但要明白在乐观离线锁中加入合并机制之后的强大功能。