知识卡片
用事务包装每个任务,比要求程序员自己判断加锁时机更可靠
内容
Darkstar让”任务服务”把每个任务自动包装进一个事务:多个任务同时想修改同一份数据时,只放行一个完整执行到底,其余的直接中止、稍后重新安排执行,程序员完全不需要手写锁或判断临界区。这个设计的巧妙之处在于,把”数据竞争”这种极难被人脑正确处理的问题,转化成了”事务提交成功或失败”这种简单的二元结果,程序员甚至不需要主动声明自己要修改哪些数据——系统会在提交时自动检测冲突。这提示一个更通用的工程原则:与其教会所有人正确使用某个危险的底层工具(比如锁),不如把这个工具封装进一个自动纠错的机制里,把”用错的可能性”直接从设计里删除,而不是靠培训和纪律去避免。
参考来源
《架构之美》第3章《伸缩性架构设计》