官术网_书友最值得收藏!

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機制提供全局序。

主站蜘蛛池模板: 宁武县| 青冈县| 饶平县| 昭通市| 六枝特区| 桑日县| 牙克石市| 滕州市| 荆州市| 泊头市| 绵竹市| 绍兴市| 华安县| 泽州县| 桃源县| 平度市| 潼南县| 阿克苏市| 九台市| 澄迈县| 宁安市| 广饶县| 靖边县| 平阴县| 施甸县| 大田县| 新绛县| 泰宁县| 昆明市| 石阡县| 宿迁市| 黎川县| 花莲市| 句容市| 林口县| 新和县| 永嘉县| 错那县| 独山县| 顺义区| 东乌|