知识卡片

用事务包装任务把并发冲突转化为自动重试

普通读书笔记卡 · 1805.d

内容

多任务并发访问同一数据必然撞车,Darkstar把每个任务整体包进事务:要么全生效要么全不生效,两个任务同改一个对象时只放行一个、另一个中止后重试。价值在于程序员不用手写加锁代码——任务代码看起来顺序执行,真正的冲突检测重试都被任务服务和数据服务在幕后处理,是[[把分布式复杂性隐藏起来需要严格限定的编程模型|隐藏分布式复杂性]]在并发控制上的落地。

参考来源

- 位置:《架构之美》第3章《伸缩性架构设计》3.3.2节《基本服务》(源文件:程序之美系列套装(6册)团队之美、项目管理之美、架构之美、数据之美、测试之美、安全之美/_epub-src/OEBPS/Text/part0120.xhtml) - 结论依据:原文明确"'任务服务'调度的每个任务都包装在一个事务中。这个事务确保了任务中的所有操作要么全部完成,要么都不完成……如果有多个任务试图改变相同的数据对象,只有一个任务会执行,其他任务都会中止,并安排在稍后执行"。 - 原始内容:"任务服务"调度的每个任务都包装在一个事务中。这个事务确保了任务中的所有操作要么全部完成,要么都不完成……如果有多个任务试图改变相同的数据对象,只有一个任务会执行,其他任务都会中止,并安排在稍后执行。