update translation in ch9.md

This commit is contained in:
Gang Yin 2022-06-07 15:48:29 +08:00
parent 32f9ef6143
commit 4f00984e93
2 changed files with 4 additions and 4 deletions

2
ch9.md
View File

@ -159,7 +159,7 @@
[^iii]: 严格地说ZooKeeper 和 etcd 提供线性一致性的写操作但读取可能是陈旧的因为默认情况下它们可以由任何一个副本提供服务。你可以选择请求线性一致性读取etcd 称之为 **法定人数读取quorum read**【16】而在 ZooKeeper 中,你需要在读取之前调用 `sync()`【15】。请参阅 “[使用全序广播实现线性一致的存储](#使用全序广播实现线性一致的存储)”。
分布式锁也在一些分布式数据库(如 Oracle Real Application ClustersRAC【18】更多的粒度级别上使用。RAC 对每个磁盘页面使用一个锁多个节点共享对同一个磁盘存储系统的访问权限。由于这些线性一致的锁处于事务执行的关键路径上RAC 部署通常具有用于数据库节点之间通信的专用集群互连网络。
分布式锁也在一些分布式数据库(如 Oracle Real Application ClustersRAC【18】有更细粒度级别的使用。RAC 对每个磁盘页面使用一个锁多个节点共享对同一个磁盘存储系统的访问权限。由于这些线性一致的锁处于事务执行的关键路径上RAC 部署通常具有用于数据库节点之间通信的专用集群互连网络。
#### 约束和唯一性保证

View File

@ -142,7 +142,7 @@
>
> **線性一致性Linearizability** 是讀取和寫入暫存器(單個物件)的 **新鮮度保證**。它不會將操作組合為事務,因此它也不會阻止寫入偏差等問題(請參閱 “[寫入偏差和幻讀](ch7.md#寫入偏斜與幻讀)”),除非採取其他措施(例如 [物化衝突](ch7.md#物化衝突))。
>
> 一個數據庫可以提供可序列化和線性一致性,這種組合被稱為嚴格的可序列化或 **強的單副本可序列化strong-1SR**【4,13】。基於兩階段鎖定的可序列化實現請參閱 “[兩階段鎖定](ch7.md#兩階段鎖定)” 一節)或 **真的序列執行**(請參閱 “[真的序列執行](ch7.md#真的序列執行)”)通常是線性一致性的。
> 一個數據庫可以提供可序列化和線性一致性,這種組合被稱為嚴格的可序列化或 **強的單副本可序列化strong-1SR**【4,13】。基於兩階段鎖定的可序列化實現請參閱 “[兩階段鎖定](ch7.md#兩階段鎖定)” 一節)或 **真的序列執行**(請參閱 “[真的序列執行](ch7.md#真的序列執行)”一節)通常是線性一致性的。
>
> 但是,可序列化的快照隔離(請參閱 “[可序列化快照隔離](ch7.md#可序列化快照隔離)”)不是線性一致性的:按照設計,它從一致的快照中進行讀取,以避免讀者和寫者之間的鎖競爭。一致性快照的要點就在於 **它不會包括該快照之後的寫入**,因此從快照讀取不是線性一致性的。
@ -159,7 +159,7 @@
[^iii]: 嚴格地說ZooKeeper 和 etcd 提供線性一致性的寫操作但讀取可能是陳舊的因為預設情況下它們可以由任何一個副本提供服務。你可以選擇請求線性一致性讀取etcd 稱之為 **法定人數讀取quorum read**【16】而在 ZooKeeper 中,你需要在讀取之前呼叫 `sync()`【15】。請參閱 “[使用全序廣播實現線性一致的儲存](#使用全序廣播實現線性一致的儲存)”。
分散式鎖也在一些分散式資料庫(如 Oracle Real Application ClustersRAC【18】更多的粒度級別上使用。RAC 對每個磁碟頁面使用一個鎖多個節點共享對同一個磁碟儲存系統的訪問許可權。由於這些線性一致的鎖處於事務執行的關鍵路徑上RAC 部署通常具有用於資料庫節點之間通訊的專用叢集互連網路。
分散式鎖也在一些分散式資料庫(如 Oracle Real Application ClustersRAC【18】有更細粒度級別的使用。RAC 對每個磁碟頁面使用一個鎖多個節點共享對同一個磁碟儲存系統的訪問許可權。由於這些線性一致的鎖處於事務執行的關鍵路徑上RAC 部署通常具有用於資料庫節點之間通訊的專用叢集互連網路。
#### 約束和唯一性保證
@ -451,7 +451,7 @@ CAP 定理的正式定義僅限於很狹隘的範圍【30】它只考慮了
### 全序廣播
如果你的程式只執行在單個 CPU 核上,那麼定義一個操作全序是很容易的:可以簡單就是 CPU 執行這些操作的順序。但是在分散式系統中,讓所有節點對同一個全域性操作順序達成一致可能相當棘手。在上一節中,我們討論了按時間戳或序列號進行排序,但發現它還不如單主複製給力(如果你使用時間戳排序來實現唯一性約束,就不能容忍任何錯誤,因為你必須要從每個節點都獲取到最新的序列號)。
如果你的程式只執行在單個 CPU 核上,那麼定義一個操作全序是很容易的:可以簡單認為就是 CPU 執行這些操作的順序。但是在分散式系統中,讓所有節點對同一個全域性操作順序達成一致可能相當棘手。在上一節中,我們討論了按時間戳或序列號進行排序,但發現它還不如單主複製給力(如果你使用時間戳排序來實現唯一性約束,就不能容忍任何錯誤,因為你必須要從每個節點都獲取到最新的序列號)。
如前所述,單主複製透過選擇一個節點作為主庫來確定操作的全序,並在主庫的單個 CPU 核上對所有操作進行排序。接下來的挑戰是,如果吞吐量超出單個主庫的處理能力,這種情況下如何擴充套件系統;以及,如果主庫失效(“[處理節點宕機](ch5.md#處理節點宕機)”),如何處理故障切換。在分散式系統文獻中,這個問題被稱為 **全序廣播total order broadcast****原子廣播atomic broadcast**[^ix]【25,57,58】。