- 分布式數據庫原理、架構與實踐
- 李海翔
- 1109字
- 2021-10-20 15:26:07
2.5 架構一致性
本節從軟件系統體系結構的角度討論一致性問題。
2.5.1 分布式系統主備一致性
因高可用的要求,分布式數據庫中需要對數據進行冗余存儲,即要有多個副本,且多個副本之間的數據是完全一樣的。但是,因為跨了節點,所以要求數據一致,這就是主備系統之間的數據一致性。因為針對數據庫的操作只有讀、寫兩種,所以主備系統之間的數據一致性可分為如下3種。
1. 寫數據的一致性
寫數據的一致性是指在事務的寫(插入、更新、刪除)操作下,一個副本的數據被修改,此時其他副本的相同數據項的副本也應該被修改,這樣才能保證多副本之間的數據一致。
從工程實現的角度看,可以利用Paxos/Raft等多節點同步一致性的技術,在多個副本間同時修改數據,且應確保所有的副本都修改成功后,才向寫操作返回寫成功的信息。但在工程實踐中,對于主備性質的系統,實現副本之間的一致性,多使用基于REDO日志的方式進行復制,這樣做的優點是備機恢復速度快,且不用考慮事務處理中并發控制等復雜因素。
也有系統會采用其他技術,如MySQL采用的Group Relation技術(這類技術會采取邏輯復制的方式)以及Paxos技術(在主備系統間同步邏輯的二進制日志)。
2. 讀數據的一致性
在一個單機數據上,讀數據不存在不一致的情況(單機系統的并發訪問控制技術保證了此點),但是,在分布式系統里,主備系統之間因多個節點存在,卻會發生讀數據不一致的情況。例如,假設主備節點分別為Master和Standby,數據項X從Master復制到Standby。用戶A在Master修改了數據項X的值為x1。一段時間后,用戶B在Standby上讀數據(典型的讀寫分離架構)。隨之而來的問題是,一致性模型需要決定是否允許用戶B讀到用戶A對數據項X修改后的新值x1。
3. 跨節點的事務在數據邏輯上的一致性
跨節點的事務在數據邏輯上的一致性是典型的分布式事務場景。一個事務內操作的不同數據項,位于不同的節點內。為保證事務ACID中的AC,跨多個節點的寫(寫不同的數據項)需要通過原子性來保證多個數據項之間在邏輯上是一致的(比如,跨節點的劃賬操作,只有劃賬前兩個賬戶的總額等于劃賬后兩個賬戶的總額,才能確保數據狀態在邏輯上是一致的)。解決此問題的典型方法是確保分布式事務的可串行化和2PC技術。
2.5.2 去中心化的分布式系統一致性
一個中心化的分布式系統,盡管物理節點分離,但邏輯上不分離,其全局序發生器依然是集中式的,且使用的方式與非分布式系統相同。
一個去中心化的分布式系統,物理節點分離,無集中式的全局序發生器制約整個系統,即系統失去了邏輯上的全局序的依據,因此需要看各種任務是否需要全局排序,如對于事務的提交順序,如果要求是強一致性的,則邏輯上需要全局排序,此時要在去中心化的架構下構建提供全局序的組件。比如,Spanner采用原子鐘、GPS在各個節點上進行校時,也就是采用Truetime機制提供全局序。
- Spring技術內幕:深入解析Spring架構與設計
- Xcode 7 Essentials(Second Edition)
- Android Application Development Cookbook(Second Edition)
- Python Deep Learning
- Python高效開發實戰:Django、Tornado、Flask、Twisted(第2版)
- Mastering LibGDX Game Development
- 學習正則表達式
- Java Web開發詳解
- Learning Apache Karaf
- TMS320LF240x芯片原理、設計及應用
- Mastering Elixir
- STM8實戰
- Beginning PHP
- Python Penetration Testing Essentials
- Developer,Advocate!