成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

詳解分布式事務XA實現數據一致性的協議與原理--2PC與3PC

開發 前端 分布式
大型業務系統有著用戶多、并發高的特點,而在這方面,集中式數據庫(單機數據庫)的性能很難支持,因此主流的互聯網公司往往采用分布式(架構)數據庫,物理上利用更多的低端設備,邏輯上對大表水平拆分支撐業務的需要。

 概述

大型業務系統有著用戶多、并發高的特點,而在這方面,集中式數據庫(單機數據庫)的性能很難支持,因此主流的互聯網公司往往采用分布式(架構)數據庫,物理上利用更多的低端設備,邏輯上對大表水平拆分支撐業務的需要。

雖然分布式數據庫能解決性能難題,但事務一致性(Consistency)的問題,卻很難在分布式數據庫上得到解決。

數據一致性?

一致性問題,“萬惡之源”是數據冗余和分布并通過網絡交互+網絡異常是常態。

1、數據一致性的情形

主庫、從庫和緩存數據一致性,相同數據冗余,關系數據庫,為保證關據庫的高可用和高性能,一般會采用主從(備)架構并引入緩存。其中數據不一致性存在于數據冗余的時間窗口內。常用的解決方案見數據庫之互聯網常用架構方案。

多副本數據之間的數據一致性,相同數據副本,大數據領域,一份數據會有多個副本并存儲到不同的節點上。客戶端可以訪問任何一個節點進行讀寫操作。常用的解決方案是基于Paxos、ZAB、Raft、Quorum、Gossip等的開源實現。

分布式服務之間的數據一致性,相關數據分布,分布式服務,不同的服務操作不同的庫(表),而且庫(表)間要保持一致。常用的解決方案是分布式事務一致性解決方案。

2、數據一致性的概念

強一致性

弱一致性

最終一致性

3、數據一致性的原理

ACID

CAP

BASE

4、數據一致性的協議

  • 兩階段提交協議
  • 三階段提交協議
  • TCC協議
  • Paxos協議
  • ZAB協議
  • Raft協議
  • Quorum協議
  • Gossip協議

分布式事務XA實現數據一致性

所謂分布式服務,就是把之前通過本地接口交互的模塊,拆分成單獨的應用獨立部署,并通過RPC和MQ交互。拿物流中的訂單和庫存舉例(新增一條訂單記錄,庫存就要-1),集中式架構中,要想保證訂單表和庫存表的一致性,只要一個本地事務(ACID)就能保證兩者的強一致性;而分布式架構中,訂單表由訂單服務操作,庫存表由庫存服務操作。要想保證訂單表和庫存表的一致性,那么就必須保證訂單服務對訂單表的操作和庫存服務對庫存表的操作同時成功。之前的一個本地事務就變成了一個分布式事務。由于服務之間通過網絡交互+網絡異常是常態,就會產生服務間數據不一致的情況。這就涉及一個分布式事務一致性的問題。

如何來保證分布式事務的ACID,業界也有比較成熟的方案,一般是2段提交2PC協議或者改進版也就是3段提交3PC協議,下面來分別簡單介紹下。

2PC協議也成為2段提交,1prepare階段,2commit階段。

所謂的兩個階段是指:第一階段:準備階段(投票階段)和第二階段:提交階段(執行階段)。

 

詳解分布式事務XA實現數據一致性的協議與原理--2PC與3PC

 

準備階段

事務協調者(事務管理器)給每個參與者(資源管理器)發送Prepare消息,每個參與者要么直接返回失敗(如權限驗證失敗),要么在本地執行事務,寫本地的redo和undo日志,但不提交,到達一種“萬事俱備,只欠東風”的狀態。

可以進一步將準備階段分為以下三個步驟:

1)協調者節點向所有參與者節點詢問是否可以執行提交操作(vote),并開始等待各參與者節點的響應。

2)參與者節點執行詢問發起為止的所有事務操作,并將Undo信息和Redo信息寫入日志。(注意:若成功這里其實每個參與者已經執行了事務操作)

3)各參與者節點響應協調者節點發起的詢問。如果參與者節點的事務操作實際執行成功,則它返回一個”同意”消息;如果參與者節點的事務操作實際執行失敗,則它返回一個"中止"消息。

提交階段

如果協調者收到了參與者的失敗消息或者超時,直接給每個參與者發送回滾(Rollback)消息;否則,發送提交(Commit)消息;參與者根據協調者的指令執行提交或者回滾操作,釋放所有事務處理過程中使用的鎖資源。(注意:必須在最后階段釋放鎖資源)

接下來分兩種情況分別討論提交階段的過程。

當協調者節點從所有參與者節點獲得的相應消息都為”同意”時:

 

詳解分布式事務XA實現數據一致性的協議與原理--2PC與3PC

 

1)協調者節點向所有參與者節點發出”正式提交(commit)”的請求。

2)參與者節點正式完成操作,并釋放在整個事務期間內占用的資源。

3)參與者節點向協調者節點發送”完成”消息。

4)協調者節點受到所有參與者節點反饋的”完成”消息后,完成事務。

如果任一參與者節點在第一階段返回的響應消息為”中止”,或者 協調者節點在第一階段的詢問超時之前無法獲取所有參與者節點的響應消息時:

 

詳解分布式事務XA實現數據一致性的協議與原理--2PC與3PC

 

1)協調者節點向所有參與者節點發出”回滾操作(rollback)”的請求。

2)參與者節點利用之前寫入的Undo信息執行回滾,并釋放在整個事務期間內占用的資源。

3)參與者節點向協調者節點發送”回滾完成”消息。

4)協調者節點受到所有參與者節點反饋的”回滾完成”消息后,取消事務。

不管最后結果如何,第二階段都會結束當前事務。

二階段提交看起來確實能夠提供原子性的操作,但是不幸的事,二階段提交還是有幾個缺點的:

1、同步阻塞問題。執行過程中,所有參與節點都是事務阻塞型的。當參與者占有公共資源時,其他第三方節點訪問公共資源不得不處于阻塞狀態。

2、單點故障。由于協調者的重要性,一旦協調者發生故障。參與者會一直阻塞下去。尤其在第二階段,協調者發生故障,那么所有的參與者還都處于鎖定事務資源的狀態中,而無法繼續完成事務操作。(如果是協調者掛掉,可以重新選舉一個協調者,但是無法解決因為協調者宕機導致的參與者處于阻塞狀態的問題)

3、數據不一致。在二階段提交的階段二中,當協調者向參與者發送commit請求之后,發生了局部網絡異常或者在發送commit請求過程中協調者發生了故障,這回導致只有一部分參與者接受到了commit請求。而在這部分參與者接到commit請求之后就會執行commit操作。但是其他部分未接到commit請求的機器則無法執行事務提交。于是整個分布式系統便出現了數據部一致性的現象。

4、二階段無法解決的問題:協調者再發出commit消息之后宕機,而唯一接收到這條消息的參與者同時也宕機了。那么即使協調者通過選舉協議產生了新的協調者,這條事務的狀態也是不確定的,沒人知道事務是否被已經提交。

由于二階段提交存在著諸如同步阻塞、單點問題、腦裂等缺陷,所以后來在二階段提交的基礎上做了改進,提出了三階段提交。

PC

三階段提交(Three-phase commit),也叫三階段提交協議(Three-phase commit protocol),是二階段提交(2PC)的改進版本。

 

詳解分布式事務XA實現數據一致性的協議與原理--2PC與3PC

 

與兩階段提交不同的是,三階段提交有兩個改動點。

1、引入超時機制。同時在協調者和參與者中都引入超時機制。

2、在第一階段和第二階段中插入一個準備階段。保證了在最后提交階段之前各參與節點的狀態是一致的。

也就是說,除了引入超時機制之外,3PC把2PC的準備階段再次一分為二,這樣三階段提交就有CanCommit、PreCommit、DoCommit三個階段。

CanCommit階段

3PC的CanCommit階段其實和2PC的準備階段很像。協調者向參與者發送commit請求,參與者如果可以提交就返回Yes響應,否則返回No響應。

1.事務詢問 協調者向參與者發送CanCommit請求。詢問是否可以執行事務提交操作。然后開始等待參與者的響應。

2.響應反饋 參與者接到CanCommit請求之后,正常情況下,如果其自身認為可以順利執行事務,則返回Yes響應,并進入預備狀態。否則反饋No

PreCommit階段

協調者根據參與者的反應情況來決定是否可以記性事務的PreCommit操作。根據響應情況,有以下兩種可能。

假如協調者從所有的參與者獲得的反饋都是Yes響應,那么就會執行事務的預執行。

1.發送預提交請求 協調者向參與者發送PreCommit請求,并進入Prepared階段。

2.事務預提交 參與者接收到PreCommit請求后,會執行事務操作,并將undo和redo信息記錄到事務日志中。

3.響應反饋 如果參與者成功的執行了事務操作,則返回ACK響應,同時開始等待最終指令。

假如有任何一個參與者向協調者發送了No響應,或者等待超時之后,協調者都沒有接到參與者的響應,那么就執行事務的中斷。

1.發送中斷請求 協調者向所有參與者發送abort請求。

2.中斷事務 參與者收到來自協調者的abort請求之后(或超時之后,仍未收到協調者的請求),執行事務的中斷。

doCommit階段

該階段進行真正的事務提交,也可以分為以下兩種情況。

執行提交

1.發送提交請求 協調接收到參與者發送的ACK響應,那么他將從預提交狀態進入到提交狀態。并向所有參與者發送doCommit請求。

2.事務提交 參與者接收到doCommit請求之后,執行正式的事務提交。并在完成事務提交之后釋放所有事務資源。

3.響應反饋 事務提交完之后,向協調者發送Ack響應。

4.完成事務 協調者接收到所有參與者的ack響應之后,完成事務。

中斷事務 協調者沒有接收到參與者發送的ACK響應(可能是接受者發送的不是ACK響應,也可能響應超時),那么就會執行中斷事務。

在doCommit階段,如果參與者無法及時接收到來自協調者的doCommit或者rebort請求時,會在等待超時之后,會繼續進行事務的提交。(其實這個應該是基于概率來決定的,當進入第三階段時,說明參與者在第二階段已經收到了PreCommit請求,那么協調者產生PreCommit請求的前提條件是他在第二階段開始之前,收到所有參與者的CanCommit響應都是Yes。(一旦參與者收到了PreCommit,意味他知道大家其實都同意修改了)所以,一句話概括就是,當進入第三階段時,由于網絡超時等原因,雖然參與者沒有收到commit或者abort響應,但是他有理由相信:成功提交的幾率很大。 )

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2020-05-11 10:30:57

2PC分布式協議

2023-06-12 08:27:23

PaxosBASECAP

2021-03-06 23:28:28

2PC3PC模型

2020-05-29 14:46:23

3PC協議分布式系統

2020-05-06 10:19:14

2PC3PC分布式事務

2017-10-19 18:37:57

數據庫分布式數據庫一致性原理

2020-02-25 23:39:11

架構運維技術

2025-03-27 03:00:00

2023-12-01 13:51:21

數據一致性數據庫

2009-06-18 09:18:08

Oracle檢索數據數據一致性事務恢復

2021-06-03 15:27:31

RaftSOFAJRaft

2024-01-26 08:18:03

2022-06-07 12:08:10

Paxos算法

2023-08-22 09:32:44

邊緣計算管理

2024-01-31 09:54:51

Redis分布式

2023-08-15 09:31:01

分布式緩存

2024-05-30 07:00:51

2019-10-11 23:27:19

分布式一致性算法開發

2024-06-04 10:58:30

2012-09-24 09:35:42

分布式系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女黄视频网站 | 亚洲 中文 欧美 日韩 在线观看 | 国产视频一区二区三区四区五区 | 日本欧美在线观看视频 | 久草热视频 | 国产精品国产精品国产专区不片 | 久久精品欧美一区二区三区不卡 | 狠狠爱一区二区三区 | 国产aaaaav久久久一区二区 | 久久久这里只有17精品 | 蜜桃视频在线观看免费视频网站www | www日韩欧美 | 欧日韩在线 | 久久aⅴ乱码一区二区三区 91综合网 | 天天综合网天天综合 | 国产一区二区精品在线观看 | 亚洲视频在线观看免费 | 国产精品美女久久久久久久网站 | 色视频欧美 | 日本韩国电影免费观看 | 一区二区在线看 | 欧美亚洲综合久久 | 中文字幕一区二区三区四区 | 国产精品18毛片一区二区 | 黄片毛片免费看 | 91天堂网| 久久99网站| 在线观看中文字幕av | 欧美影院| 日韩精品免费一区 | 久久精品国产精品青草 | 婷婷开心激情综合五月天 | 欧美嘿咻 | 97人人干| 精品国产一区二区三区久久久久久 | 国产大学生情侣呻吟视频 | 久久精品二区亚洲w码 | 欧美一级在线 | 久久高清免费视频 | www.久久精品 | 欧美成年人视频在线观看 |