淘寶海量資料庫之二:一致性選擇(轉)
眾所周知,一致性是資料最關鍵的屬性之一。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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 淘寶海量資料庫之三:事務的ACID(轉)資料庫
- 淘寶海量資料庫OceanBase系統架構資料庫架構
- 資料庫字符集的選擇(轉)資料庫
- PostgreSQL:資料庫的選擇SQL資料庫
- 資料庫索引選擇策略資料庫索引
- 合理選擇資料探勘工具(轉)
- 海量資料處理 (轉)
- 時間序列化資料庫選型?時序資料庫的選擇?資料庫
- 海量資料庫解決方案資料庫
- 修改題庫(選擇題) (轉)
- 如何選擇合適的NoSQL資料庫SQL資料庫
- 如何為資料庫選擇最佳加密方法資料庫加密
- 海量資料監控如何選擇儲存方案? 看轉轉、得物這些企業是怎麼做的
- 選擇那個資料庫後 要設定 資料庫所用編碼資料庫
- MySQL資料庫索引選擇使用B+樹MySql資料庫索引
- 資料庫入門之RDS選擇原則資料庫
- 為什麼要選擇分散式資料庫?分散式資料庫
- 微服務真的不挑資料庫嗎?如何選擇?微服務資料庫
- 資料庫伺服器選擇看那些方面資料庫伺服器
- 如何選擇各種型別資料庫?- Raj型別資料庫
- 仿淘寶,京東多級地址選擇器
- ORACLE資料庫的啟動和關閉之二(轉)Oracle資料庫
- INFORMIX-ONLINE資料庫三種備份方法的選擇(轉)ORM資料庫
- 又一巨頭選擇將資料庫開源資料庫
- oracle sqldeveloper選擇性複製備份資料庫OracleSQLDeveloper資料庫
- oracle資料庫的ACFS圖形介面不可選擇Oracle資料庫
- 符合資料庫需求的最佳SQL Server版本選擇資料庫SQLServer
- 使用C#選擇資料夾、開啟資料夾、選擇檔案C#
- Delphi 常用文件資料之二 (轉)
- Iceworks 2.7.0 釋出,海量圖表供你選擇
- 墨天輪訪談 | OceanBase 白超:海量資料管理,為什麼選擇OceanBase?
- Redis與資料庫資料一致性Redis資料庫
- 根據開源資料庫選擇合適的工具資料庫
- 如何選擇一款合適的圖資料庫?資料庫
- MySQL與PostgreSQL:該選擇哪個開源資料庫?MySql資料庫
- 修復資料庫壞塊之二資料庫
- 直播app原始碼,資料庫多資料來源自動選擇實現APP原始碼資料庫
- 轉:EXP 資料庫資料 QUERY 選項使用問題資料庫