真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

分布式系統(tǒng)常見的事務處理機制-創(chuàng)新互聯(lián)

為保障系統(tǒng)的可用性、可靠性以及性能,在分布式系統(tǒng)中,往往會設置數(shù)據(jù)冗余,即對數(shù)據(jù)進行復制。舉例來說,當一個數(shù)據(jù)庫的副本被破環(huán)以后,那么系統(tǒng)只需要轉換到其他數(shù)據(jù)副本就能繼續(xù)運行下去。另外一個例子,當訪問單一服務器管理的數(shù)據(jù)的進程數(shù)不斷增加時,系統(tǒng)就需要對服務器的數(shù)量進行擴充,此時,對服務器進行復制,隨后讓它們分擔工作負荷,就可以提高性能。但同時,如何保障多個數(shù)據(jù)節(jié)點之間數(shù)據(jù)的一致以及如何處理分布式事務,將成為為一個復雜的話題。本文將介紹常用的事務處理機制。

創(chuàng)新互聯(lián)建站專注于企業(yè)成都全網(wǎng)營銷、網(wǎng)站重做改版、封丘網(wǎng)站定制設計、自適應品牌網(wǎng)站建設、H5開發(fā)、商城網(wǎng)站開發(fā)、集團公司官網(wǎng)建設、成都外貿網(wǎng)站建設公司、高端網(wǎng)站制作、響應式網(wǎng)頁設計等建站業(yè)務,價格優(yōu)惠性價比高,為封丘等各大城市提供網(wǎng)站開發(fā)制作服務。

CAP 定理
CAP 定理(也稱為 Brewer 定理),是由計算機科學家 Eric Brewer 提出的,即在分布式計算機系統(tǒng)不可能同時提供以下全部三個保證:

一致性(Consistency):所有節(jié)點同一時間看到是相同的數(shù)據(jù);
可用性(Availability):不管是否成功,確保每一個請求都能接收到響應;
分區(qū)容錯性(Partition tolerance):系統(tǒng)任意分區(qū)后,在網(wǎng)絡故障時,仍能操作
顯然,為了保障性能和可靠性,我們將數(shù)據(jù)復制多份,分布到多個節(jié)點上,同時也帶來了一個難點,那就是如何保持各個副本數(shù)據(jù)的一致性。換句話說,我們選擇了 AP ,則必須要犧牲掉 C 了。

但是,在實際的應用場景中,數(shù)據(jù)的一致性往往也是需要保證的。那么這是否違背了 CAP 定理呢?

一致性模型
其實,數(shù)據(jù)的一致性也分幾種情況,大致可以分為:

Weak 弱一致性:當你寫入一個新值后,讀操作在數(shù)據(jù)副本上可能讀出來,也可能讀不出來。比如:某些存儲系統(tǒng),搜索引擎,實時游戲,語音聊天等,這些數(shù)據(jù)本文對完整性要求不高,數(shù)據(jù)是否一致關系也不大。
Eventually 最終一致性:當你寫入一個新值后,并不一定能馬上讀出來,但在某個時間窗口之后保證最終能讀出來。比如:DNS,電子郵件,消息中間件等系統(tǒng),大部分分布式系統(tǒng)技術都采用這類模式。
Strong 強一致性:新的數(shù)據(jù)一旦寫入,在任意副本任意時刻都能讀到新值。比如:文件系統(tǒng),RDBMS都是強一致性的。
也就是說,在設計分布式系統(tǒng)時,我們并不一定要求是強一致性的,根據(jù)應用場景可以選擇弱一致性或者是最終一致性。

事務的作用
事務有如下作用:

保證執(zhí)行結果的正確性
保證數(shù)據(jù)的一致性
ACID
常見的事務處理機制
Master-Slave 復制
Slave 一般是 Master 的備份。在這樣的系統(tǒng)中,一般是如下設計的:

讀寫請求都由 Master 負責。
寫請求寫到 Master 上后,由 Master 同步到 Slave 上。
這種機制的特點是:

數(shù)據(jù)同步通常是異步的
有良好的吞吐量,低延遲 * 在大多數(shù) RDBMS 中支持,比如 MySQL二進制日志
弱/最終一致性
這種機制的缺點是,如果 Master 掛了,Slave 只能提供讀服務,而沒有寫服務。

Master-Master 多主復制
指一個系統(tǒng)存在兩個或多個Master,每個Master都提供讀寫服務。這個機制是Master-Slave的加強版,數(shù)據(jù)間同步一般是通過Master間的異步完成,所以是最終一致性。 Master-Master的好處是,一臺Master掛了,別的Master可以正常做讀寫服務,他和Master-Slave一樣,當數(shù)據(jù)沒有被復制到別的Master上時,數(shù)據(jù)會丟失。很多數(shù)據(jù)庫都支持Master-Master的Replication的機制。

這種機制的特點是:

異步
最終的一致性
多個節(jié)點間需要序列化協(xié)議
兩階段提交
兩階段提交協(xié)議 (Two-phase commit protocol,2PC)的過程涉及到協(xié)調者和參與者。協(xié)調者可以看做成事務的發(fā)起者,同時也是事務的一個參與者。對于一個分布式事務來說,一個事務是涉及到多個參與者的。具體的兩階段提交的過程如下:

第一階段(準備階段)
協(xié)調者節(jié)點向所有參與者節(jié)點詢問是否可以執(zhí)行提交操作(vote),并開始等待各參與者節(jié)點的響應。
參與者節(jié)點執(zhí)行詢問發(fā)起為止的所有事務操作,并將 Undo 信息和 Redo 信息寫入日志。(注意:若成功這里其實每個參與者已經執(zhí)行了事務操作)
各參與者節(jié)點響應協(xié)調者節(jié)點發(fā)起的詢問。如果參與者節(jié)點的事務操作實際執(zhí)行成功,則它返回一個“同意”消息;如果參與者節(jié)點的事務操作實際執(zhí)行失敗,則它返回一個“中止”消息。
第二階段(提交階段)
如果協(xié)調者收到了參與者的失敗消息或者超時,直接給每個參與者發(fā)送回滾(Rollback)消息;否則,發(fā)送提交(Commit)消息;參與者根據(jù)協(xié)調者的指令執(zhí)行提交或者回滾操作,釋放所有事務處理過程中使用的鎖資源。(注意:必須在最后階段釋放鎖資源)

當協(xié)調者節(jié)點從所有參與者節(jié)點獲得的相應消息都為“同意”時:
協(xié)調者節(jié)點向所有參與者節(jié)點發(fā)出“正式提交(commit)”的請求。
參與者節(jié)點正式完成操作,并釋放在整個事務期間內占用的資源。
參與者節(jié)點向協(xié)調者節(jié)點發(fā)送“完成”消息。
如果任一參與者節(jié)點在第一階段返回的響應消息為”中止”,或者 協(xié)調者節(jié)點在第一階段的詢問超時之前無法獲取所有參與者節(jié)點的響應消息時:
協(xié)調者節(jié)點向所有參與者節(jié)點發(fā)出”回滾操作(rollback)”的請求。
參與者節(jié)點利用之前寫入的Undo信息執(zhí)行回滾,并釋放在整個事務期間內占用的資源。
參與者節(jié)點向協(xié)調者節(jié)點發(fā)送”回滾完成”消息。
協(xié)調者節(jié)點受到所有參與者節(jié)點反饋的”回滾完成”消息后,取消事務。
協(xié)調者節(jié)點受到所有參與者節(jié)點反饋的”完成”消息后,完成事務
不管最后結果如何,第二階段都會結束當前事務。

二段式提交協(xié)議的優(yōu)缺點:

優(yōu)點:原理簡單,實現(xiàn)方便;

缺點:

同步阻塞問題。執(zhí)行過程中,所有參與節(jié)點都是事務阻塞型的。
單點故障。由于協(xié)調者的重要性,一旦協(xié)調者發(fā)生故障,參與者會一直阻塞下去。尤其在第二階段,協(xié)調者發(fā)生故障,那么所有的參與者還都處于鎖定事務資源的狀態(tài)中,而無法繼續(xù)完成事務操作。
數(shù)據(jù)不一致。在階段二中,當協(xié)調者向參與者發(fā)送 commit 請求之后,發(fā)生了局部網(wǎng)絡異?;蛘咴诎l(fā)送 commit 請求過程中協(xié)調者發(fā)生了故障,這回導致只有一部分參與者接受到了 commit 請求。而在這部分參與者接到 commit 請求之后就會執(zhí)行 commit 操作。但是其他部分未接到 commit 請求的機器則無法執(zhí)行事務提交。于是整個分布式系統(tǒng)便出現(xiàn)了數(shù)據(jù)部一致性的現(xiàn)象。
二階段無法解決的問題:協(xié)調者再發(fā)出 commit 消息之后宕機,而唯一接收到這條消息的參與者同時也宕機了。那么即使協(xié)調者通過選舉協(xié)議產生了新的協(xié)調者,這條事務的狀態(tài)也是不確定的,沒人知道事務是否被已經提交。
為了解決兩階段提交協(xié)議的種種問題,研究者們在二階段提交的基礎上做了改進,提出了三階段提交。

三階段提交
三階段提交協(xié)議(Three-phase commit protocol,3PC),是二階段提交(2PC)的改進版本。與兩階段提交不同的是,三階段提交有兩個改動點:

引入超時機制。同時在協(xié)調者和參與者中都引入超時機制。
在第一階段和第二階段中插入一個準備階段。保證了在最后提交階段之前各參與節(jié)點的狀態(tài)是一致的。
即 3PC 把 2PC 的準備階段再次一分為二,這樣三階段提交就有 CanCommit、PreCommit、DoCommit 三個階段。

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

事務詢問:協(xié)調者向參與者發(fā)送 CanCommit 請求。詢問是否可以執(zhí)行事務提交操作。然后開始等待參與者的響應。
響應反饋:參與者接到 CanCommit 請求之后,正常情況下,如果其自身認為可以順利執(zhí)行事務,則返回 Yes 響應,并進入預備狀態(tài)。否則反饋 No
PreCommit 階段
協(xié)調者根據(jù)參與者的反應情況來決定是否可以記性事務的 PreCommit 操作。根據(jù)響應情況,有以下兩種可能。

假如協(xié)調者從所有的參與者獲得的反饋都是 Yes 響應,那么就會執(zhí)行事務的預執(zhí)行。
發(fā)送預提交請求:協(xié)調者向參與者發(fā)送 PreCommit 請求,并進入Prepared 階段。
事務預提交:參與者接收到 PreCommit 請求后,會執(zhí)行事務操作,并將undo 和 redo 信息記錄到事務日志中。
響應反饋:如果參與者成功的執(zhí)行了事務操作,則返回 ACK 響應,同時開始等待最終指令。
假如有任何一個參與者向協(xié)調者發(fā)送了 No 響應,或者等待超時之后,協(xié)調者都沒有接到參與者的響應,那么就執(zhí)行事務的中斷。
發(fā)送中斷請求:協(xié)調者向所有參與者發(fā)送 abort 請求。
中斷事務:參與者收到來自協(xié)調者的 abort 請求之后(或超時之后,仍未收到協(xié)調者的請求),執(zhí)行事務的中斷。
doCommit 階段
該階段進行真正的事務提交,也可以分為以下兩種情況。

執(zhí)行提交
發(fā)送提交請求:協(xié)調接收到參與者發(fā)送的 ACK 響應,那么他將從預提交狀態(tài)進入到提交狀態(tài)。并向所有參與者發(fā)送 doCommit 請求。
事務提交:參與者接收到 doCommit 請求之后,執(zhí)行正式的事務提交。并在完成事務提交之后釋放所有事務資源。
響應反饋:事務提交完之后,向協(xié)調者發(fā)送 ACK 響應。
完成事務:協(xié)調者接收到所有參與者的 ACK 響應之后,完成事務。
中斷事務:協(xié)調者沒有接收到參與者發(fā)送的 ACK 響應(可能是接受者發(fā)送的不是 ACK 響應,也可能響應超時),那么就會執(zhí)行中斷事務。
發(fā)送中斷請求:協(xié)調者向所有參與者發(fā)送 abort 請求
事務回滾:參與者接收到 abort 請求之后,利用其在階段二記錄的undo 信息來執(zhí)行事務的回滾操作,并在完成回滾之后釋放所有的事務資源。
反饋結果:參與者完成事務回滾之后,向協(xié)調者發(fā)送 ACK 消息
中斷事務:協(xié)調者接收到參與者反饋的 ACK 消息之后,執(zhí)行事務的中斷。
在 doCommit 階段,如果參與者無法及時接收到來自協(xié)調者的 doCommit 或者 rebort 請求時,會在等待超時之后,會繼續(xù)進行事務的提交。即當進入第三階段時,由于網(wǎng)絡超時等原因,雖然參與者沒有收 到 commit 或者 abort 響應,事務仍然會提交。

三階段提交不會一直持有事務資源并處于阻塞狀態(tài)。但是這種機制也會導致數(shù)據(jù)一致性問題,因為,由于網(wǎng)絡原因,協(xié)調者發(fā)送的 abort 響應沒有及時被參與者接收到,那么參與者在等待超時之后執(zhí)行了 commit 操作,這樣就和其他接到 abort 命令并執(zhí)行回滾的參與者之間存在數(shù)據(jù)不一致的情況。

Paxos 算法
Paxos 算法是 Leslie Lamport 于1990年提出的一種基于消息傳遞且具有高度容錯特性的一致性算法。Paxos 算法目前在 Google 的 Chubby、MegaStore、Spanner 等系統(tǒng)中得到了應用,Hadoop 中的 ZooKeeper 也使用了 Paxos 算法。

在 Paxos 算法中,分為4種角色:

Proposer :提議者
Acceptor:決策者
Client:產生議題者
Learner:最終決策學習者
算法可以分為兩個階段來執(zhí)行:

階段1
Proposer 選擇一個議案編號 n,向 acceptor 的多數(shù)派發(fā)送編號也為 n 的 prepare 請求。
Acceptor:如果接收到的 prepare 請求的編號 n 大于它已經回應的任何prepare 請求,它就回應已經批準的編號最高的議案(如果有的話),并承諾不再回應任何編號小于 n 的議案;
階段2
Proposer:如果收到了多數(shù) acceptor 對 prepare 請求(編號為 n)的回應,它就向這些 acceptor 發(fā)送議案{n, v}的 accept 請求,其中 v 是所有回應中編號最高的議案的決議,或者是 proposer 選擇的值,如果回應說還沒有議案。
Acceptor:如果收到了議案{n, v}的 accept 請求,它就批準該議案,除非它已經回應了一個編號大于 n 的議案。
Proposer 可以提出多個議案,只要它遵循上面的算法。它可以在任何時刻放棄一個議案。(這不會破壞正確性,即使在議案被放棄后,議案的請求或者回應消息才到達目標)如果其它的 proposer 已經開始提出更高編號的議案,那么最好能放棄當前的議案。因此,如果 acceptor 忽略一個 prepare 或者 accept 請求(因為已經收到了更高編號的 prepare 請求),它應該告知 proposer 放棄議案。這是一個性能優(yōu)化,而不影響正確性。

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。


網(wǎng)站標題:分布式系統(tǒng)常見的事務處理機制-創(chuàng)新互聯(lián)
標題網(wǎng)址:http://weahome.cn/article/docedi.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部