diff --git a/ch09.md b/ch09.md index ee9e4e6..7b3cb11 100644 --- a/ch09.md +++ b/ch09.md @@ -304,7 +304,7 @@ CAP 最初被提出只是一个为了激发数据库取舍讨论的模糊的取 - 在[第五章](https://ddia.qtmuniao.com/#/ch05),我们在单主模型中提到,主副本最重要的作用就是确定**复制日志**(replication log)中的**写入顺序**(order of writes),然后所有从副本都要遵从该顺序。如果不存在唯一的主节点作为权威来协调该顺序,则在并发的多个写入可能会产生冲突。(参见[处理写入冲突](https://ddia.qtmuniao.com/#/ch05?id=%e5%a4%84%e7%90%86%e5%86%99%e5%85%a5%e5%86%b2%e7%aa%81)) - 在[第七章](https://ddia.qtmuniao.com/#/ch07),我们讨论了**可串行化**(serializability),即保证所有并发的事务像以某种顺序一样串行执行(some sequential order)。可以通过物理上真的串行执行来实现,也可以通过并发执行但解决冲突(加锁互斥或者抛弃执行)来实现。 -- 在[第八章](https://ddia.qtmuniao.com/#/ch08),我们讨论了在分布式系统中使用时钟(参见[依赖同步时钟](https://ddia.qtmuniao.com/#/ch08?id=%e4%be%9d%e8%b5%96%e5%90%8c%e6%ad%a5%e6%97%b6%e9%92%9f),这也是一个试图对无序的真实世界引入某种顺序,以解决诸如哪个写入更靠后之类的问题。 +- 在[第八章](https://ddia.qtmuniao.com/#/ch08),我们讨论了在分布式系统中使用时钟(参见[依赖同步时钟](https://ddia.qtmuniao.com/#/ch08?id=%e4%be%9d%e8%b5%96%e5%90%8c%e6%ad%a5%e6%97%b6%e9%92%9f)),这也是一个试图对无序的真实世界引入某种顺序,以解决诸如哪个写入更靠后之类的问题。 **顺序性**(ordering)、**线性一致性**(linearizability)和**共识协议**(consensus)三个概念间有很深的联系。相比本书其他部分,尽管这几个概念更偏理论和抽象,但理解他们却有助于来厘清系统的功能边界——哪些可以做,哪些做不了。在接下来的几小节中,我们会对此进行详细探讨。 @@ -409,7 +409,7 @@ CAP 最初被提出只是一个为了激发数据库取舍讨论的模糊的取 1. **不同节点上处理操作的速率很难完全同步**。因此,如果一个节点使用奇数序号,另一个节点时用偶数序号,则两个序号消耗的速率也会不一致。此时,当你有两个奇偶性不同的序号时,就难以通过比较大小来确定操作发生的先后顺序。 2. **物理时间戳会由于多机时钟偏差,而不满足因果一致**。例如,在图 8-3 中(参见[时间戳以定序](https://ddia.qtmuniao.com/#/ch08?id=%e6%97%b6%e9%97%b4%e6%88%b3%e4%bb%a5%e5%ae%9a%e5%ba%8f)),就出现了发生在之后的操作被分配了一个较小的时间戳。 -3. 对于批量分配方式,有可能发生较早的操作被分配了 1001~2000 的序列号,而较晚的操作被分配了 1~1000 的序列号。如此一来,序列号的分配不满足因果一致。 +3. 对于批量分配方式,有可能发生较早的操作被分配了 1001-2000 的序列号,而较晚的操作被分配了 1-1000 的序列号。如此一来,序列号的分配不满足因果一致。 ### Lamport 时间戳