Merge pull request #244 from Axlgrep/master

Update ch9.md
This commit is contained in:
YIN, Gang 2022-06-05 16:03:35 +08:00 committed by GitHub
commit 675d9b4b93
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

2
ch9.md
View File

@ -451,7 +451,7 @@ CAP 定理的正式定义仅限于很狭隘的范围【30】它只考虑了
### 全序广播
如果你的程序只运行在单个 CPU 核上,那么定义一个操作全序是很容易的:可以简单就是 CPU 执行这些操作的顺序。但是在分布式系统中,让所有节点对同一个全局操作顺序达成一致可能相当棘手。在上一节中,我们讨论了按时间戳或序列号进行排序,但发现它还不如单主复制给力(如果你使用时间戳排序来实现唯一性约束,就不能容忍任何错误,因为你必须要从每个节点都获取到最新的序列号)。
如果你的程序只运行在单个 CPU 核上,那么定义一个操作全序是很容易的:可以简单认为就是 CPU 执行这些操作的顺序。但是在分布式系统中,让所有节点对同一个全局操作顺序达成一致可能相当棘手。在上一节中,我们讨论了按时间戳或序列号进行排序,但发现它还不如单主复制给力(如果你使用时间戳排序来实现唯一性约束,就不能容忍任何错误,因为你必须要从每个节点都获取到最新的序列号)。
如前所述,单主复制通过选择一个节点作为主库来确定操作的全序,并在主库的单个 CPU 核上对所有操作进行排序。接下来的挑战是,如果吞吐量超出单个主库的处理能力,这种情况下如何扩展系统;以及,如果主库失效(“[处理节点宕机](ch5.md#处理节点宕机)”),如何处理故障切换。在分布式系统文献中,这个问题被称为 **全序广播total order broadcast****原子广播atomic broadcast**[^ix]【25,57,58】。