提問者應該是看完了 google spanner 的**,對其中的外部一致性這個詞不太了解,所以提出了這個問題。之前看 spanner 的時候,我也不是很理解
外部一致性
的具體含義,只是當時並沒有鑽這個
"牛角尖
"。最近突然想把這個問題弄清楚,所以整理了下面幾位的回答。第一位作者的回答點明了
acid的c
和cap的c
是不一樣的。
這裡我想說的是,學習計算機的同學應該在不同的課程或書籍中都聽過或看到過一致性這個詞,但是它們涉及的領域及其含義卻是完全不同的。包括分布式領域中的分布式事務的一致性和
paxos 協議解決的一致性,這兩者也不是一回事。在理解基礎概念的區別後,再看第二位和第三位的回答便可對這個問題有清晰的認識。
acid的c
和cap的c
是不一樣的。
資料庫教科書裡提煉的,acid的c
指的是從業務層面定義約束,例如銀行轉賬場景,轉入和轉出金額要平衡,又或者外來鍵指向的行必須存在,這個c一方面依賴資料庫的保證,例如原子性,也依賴於業務特性和業務層**實現。
cap的c
是現代分布式系統中大家經常談到的一致性,其內涵和外延比較豐富。例如,acid中的i,在分布式系統中如何保證併發query的隔離級別isolation,可以認為是一種一致性;多副本間達到一致狀態機如paxos和raft,也是一種一致性。
最初在資料庫文章中見到的"外部一致性",是g
oogle
提出的,它是為了解釋在分布式事務中遇到的問題而提出的。這裡的一致性描述的是非
lock base 的事務引擎下,多個事務之間,資料如何相互可見的性質。
多個併發事務讀寫的資料
(或資料範圍
),它們能夠被資料庫感知到衝突
(讀寫之間也算衝突
),因此它們在時間線上的順序由資料庫確定,這樣的事務間一致性問題可以被認為是內部一致性問題,ansisqlisolation定義的隔離級別就是定義內部一致性的。
而先後執行
(執行區間不重疊
)的多個事務,它們的在時間線上的順序由使用者確定,資料庫無法感知到他們之間的關係,它們之間的一致性問題可以被認為是外部一致性問題。
外部一致性問題在
lock base
或mvcc
實現的單機資料庫中並不存在,而在分布式事務中比較常見的不滿足外部一致性的情況是
"寫後讀",即提交成功後不能立即能夠被讀到;還有一種更複雜的情況,可以稱之為 "半寫後讀",比如客戶端依次執行以下事務:
t1: write a;
t2: write b;
t3: read a and b;
如果沒有全域性時鐘,那麼就可能出現
t3讀取到最新的
b,但是沒能讀取到最新的
a(又或者是能讀到最新的 a,卻讀不到最新的 b)。所以"內部"和"外部"最重要的區別是可見順序由資料庫(內部)確定,還是由使用者(外部)確定。
對外部一致性的認知,主要來自於
spanner
的*****。寫下自己讀
*****
過程中的理解吧。個人認為,外部一致性描述的不是併發問題,而是在物理時間上先後發生的事務間的關係。
外部一致性的目標是:假設事務
t1執行完成後,t2
才啟動,保證讓
t2看到
t1的結果。
這個目標看起來比較好實現,因為
t2開始時,t1
已經執行完成了。那為什麼外部一致性成為
spanner
的主要問題?主要來自兩個方面:
(1)t1和
t2的時間戳可能來自位於不同
region的s
erver(s
erver
一般是某個
paxos
group 的
leader);
(2)不同r
egion間的s
erver
之間,時間沒法嚴格同步,即存在誤差。(雖然
spanner 用了高大上的硬體以及配套演算法來同步時鐘,仍然不能絕對保證跨
region
的伺服器的時鐘嚴格同步。因為跨了延遲達到
100ms
的廣域網。)
舉個例子來討論吧:使用者a
給帳戶x存款 10 萬(對應事務t1),發生在中國;使用者b 查詢帳戶
x的餘額(對應事務t2),發生在美國。我們把伺服器的誤差稍微放大點,比如10 s。
(1)存款事務
t1執行時,獲取的提交時間戳為t1;
(2)t1執行完成後,a
打**給
b,說錢已經存上了;
(3)b去查詢
(事務t2
),t2
獲取的時間戳可能是t2
- 5s; 由於t2
-5s < t
1,按照時間戳比較,根本查詢不到
t1的結果
(按照物理時間,t1在t2
啟動前已經完成。二者
不是併發
的,但執行結果違背了物理時間上事務發生的順序,即違背了外部一致性)。
分布式資料庫
網路選課系統中分布式資料庫設計 何翠雙王巧雲張麗麗 摘要 關鍵字 選課 分布式 資料庫 distributed system of on line course choosing abstract key words course choosing distributed database 隨著學校...
分布式資料庫
1 背景 我們知道資料是乙個公司的命脈,隨著業務越做越大,資料量也會越來越大,計算也會越來越複雜,效能,可靠性,可擴充套件性的需求就會越來越強烈,這個時候乙個集中式的資料庫顯然已經滿足不了需求了。對於技術決策者來說有兩條路可以走,第一 按照現有的大型資料庫的解決方案,比如sql server clu...
分布式資料庫
一 分布式資料庫的出現的場景 網際網路 軟體國產化 o2o 五新 新零售 新製造,新金融 新資源 新技術 等主題接連提出來,並且在各個行業落地,給資料庫帶來了巨大機會,具體包含3個方向 1.遠超單機資料庫容量的資料儲存和訪問峰值 2.實時資料分析檢索 oltp兼顧olap 3.更高階別的容災需求。這...