淘寶海量資料庫之二:一致性選擇(轉)

物理狂人發表於2012-02-29

眾所周知,一致性是資料最關鍵的屬性之一。2000年,Eric Brewer教授在ACM分散式計算年會上指出了著名的CAP理論:

  Brewer, E. A. 2000. Towards robust distributed systems. In Proceedings of the 19th Annual ACM Symposium on Principles of Distributed Computing (July 16-19, Portland, Oregon)

  即分散式系統不可能滿足一致性(C: Consistency),可用性(A: Availability)和分割槽容錯性(P: Tolerance of network Partition)這三個需求。

  大約兩年後,Seth Gilbert 和 Nancy lynch兩人證明了CAP理論的正確性:

  Gilbert , S., Lynch, N. 2002. Brewer's conjecture and the feasibility of consistent, available, partition-tolerant Web services. ACM SIGACT News 33(2)

  幾種常見的一致性型別有:

  強一致性:系統中的某個資料被成功更新(事務成功返回)後,後續任何對該資料的讀取操作都得到更新後的值。這是傳統關聯式資料庫提供的一致性模型,也是關聯式資料庫深受人們喜愛的原因之一。

  弱一致性:系統中的某個資料被更新後,後續對該資料的讀取操作得到的不一定是更新後的值,這種情況下通常有個“不一致性時間視窗”(inconsistency window)存在:即資料更新完成後在經過這個“不一致性時間視窗”,後續讀取操作就能夠得到更新後的值。

  最終一致性:屬於弱一致性的一種,即某個資料被更新後,如果該資料後續沒有被再次更新,那麼最終所有的讀取操作都會返回更新後的值。

  關於最終一致性,Werner Vogels提出了NWR模型(Eventually Consistent - Revisited, By Werner Vogels on December 23, 2008 12:15 AM, http://www.allthingsdistributed.com/2008/12/eventually_consistent.html):

  ·N:資料複製的份數(the number of nodes that store replicas of the data)

  ·W:資料更新完成前需要到達的節點數(the number of replicas that need to acknowledge the receipt of the update before the update completes)

  ·R:為了讀取正確資料需要讀取的節點數(the number of replicas that are contacted when a data object is accessed through a read operation)

  Werner Vogels還寫到,如果W+R > N,那麼讀寫節點有重疊,讀總是能夠得到最新的資料,這就是強一致性。在傳統的一主一備同步複製的關聯式資料庫中,N=2,W=2,R=1;在非同步複製模型中,W變成1,此時W+R=N,一致性也就無法保證。

  不過,NWR模型只代表了一類情形,例如,在傳統的一主一備的非同步複製的關聯式資料庫中,儘管N=2,W=1,R=1,如果只有主庫提供服務,則一致性仍然是保證的,不過主機異常時,服務的恢復不是實時的,因此CAP理論依然適用。

  在調研中,我們發現一些專案正在或傾向於弱一致性或最終一致性,咋看這似乎表明這些工程師偏愛弱一致性或最終一致性。然而,在經過仔細溝通和深入分析後,我們發現,這些專案採用弱一致性或最終一致性,其實是在高資料量(十幾億條記錄、數TB資料)和高訪問量(數千TPS、數萬QPS)需求壓力之下的無奈選擇。如果兩個系統都能滿足上述高資料量和高訪問量需求且成本差異不是很大,那麼在強一致性和若一致性(或最終一致性)兩者中他們會毫不猶豫地選擇前者。

  顯而易見,作為整個系統中最為基礎的部件,如果資料庫的資料是弱一致,那麼上層應用就不得不承受這種弱一致導致的種種後果,從上層應用的角度看,這並不是十分友善的行為。由於上述原因,我們決心在我們的海量資料庫中實現與傳統關聯式資料庫相同的強一致性,因為我們相信這種強一致性不僅會簡化資料庫的管理,減輕資料庫管理的工作量,尤其重要的是,上層應用不再需要關注資料的不一致性,應用程式也會因此而簡化,並且易於開發和維護。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24104518/viewspace-717402/,如需轉載,請註明出處,否則將追究法律責任。

相關文章