知识卡片

请求先转事务

普通读书笔记卡 · 1722.a

内容

ZooKeeper 不直接广播客户端请求,而是由 leader 结合当前数据库和 outstanding 请求,把请求转换成可重复投递的事务。发散:复制协议喜欢幂等状态变更,业务 API 往往不是幂等的,中间这层翻译很关键。

参考来源

- 位置:《分布式系统与一致性》第7章《协调服务ZooKeeper》事务转换一节(源文件:_epub-src/OEBPS/Text/chapter11.xhtml) - 结论依据:原文明确"请求处理器不会把客户端请求操作交给原子广播组件,而是会把转换之后的事务操作交给原子广播组件",因为原始客户端请求(如create)"是不能重复执行的……这种不能重复执行的操作被认为不是幂等的",而转换后的事务"可以被直接写入数据库中,并且可以被反复执行"。 - 原始内容:请求处理器会把客户端请求转换成名为状态变更(state change)的操作,也就是事务操作。请求处理器不会把客户端请求操作交给原子广播组件,而是会把转换之后的事务操作交给原子广播组件……事务是客户端请求执行之后的结果。事务可以被直接写入数据库中,并且可以被反复执行。