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

4.5 ACID原則與多階段提交

1.ACID原則

ACID,即Atomicity(原子性)、Consistency(一致性)、Isolation(隔離性)、Durability(持久性)四種特性的縮寫。

ACID也是一種比較著名的描述一致性的原則,通常出現(xiàn)在分布式數(shù)據(jù)庫等基于事務(wù)過程的系統(tǒng)中。具體來說,ACID原則描述了分布式數(shù)據(jù)庫需要滿足的一致性需求,同時允許付出可用性的代價。四種特性定義如下。

●Atomicity:每次事務(wù)是原子的,事務(wù)包含的所有操作要么全部成功執(zhí)行,要么全部不執(zhí)行。一旦有操作失敗,則需要回退狀態(tài)到執(zhí)行事務(wù)之前。

●Consistency:數(shù)據(jù)庫的狀態(tài)在事務(wù)執(zhí)行前后是一致的和完整的,無中間狀態(tài),即只能處于成功事務(wù)提交后的狀態(tài)。

●Isolation:各種事務(wù)可以并發(fā)執(zhí)行,但彼此之間互相不影響。按照標(biāo)準(zhǔn)SQL規(guī)范,隔離等級從弱到強可以分為未授權(quán)讀取、授權(quán)讀取、可重復(fù)讀取和串行化四種。

●Durability:狀態(tài)的改變是持久的,不會失效。一旦某個事務(wù)提交,則它造成的狀態(tài)變更就是永久性的。

與ACID相對的一個原則是eBay技術(shù)專家Dan Pritchett提出的BASE(Basic Availability,Soft-state,Eventual consistency)原則。BASE原則面向大型高可用分布式系統(tǒng),主張犧牲對強一致性的追求,而實現(xiàn)最終一致性,以此換取一定的可用性。

注意

ACID和BASE在英文中分別是“酸”和“堿”,看似對立,實則是對CAP三特性的不同取舍。

2.兩階段提交

對分布式事務(wù)一致性的研究成果包括著名的兩階段提交算法(Two-Phase Commit,2PC)和三階段提交算法(Three-Phase Commit,3PC)。

兩階段提交算法最早由Jim Gray于1979年在論文“Notes on Database Operating Systems”中提出。其基本思想十分簡單,既然在分布式場景下,直接提交事務(wù)可能出現(xiàn)各種故障和沖突,那么可將其分解為預(yù)提交和正式提交兩個階段,規(guī)避沖突的風(fēng)險。

預(yù)提交:協(xié)調(diào)者(coordinator)發(fā)起提交某個事務(wù)的申請,各參與執(zhí)行者(participant)需要嘗試進(jìn)行提交并反饋是否能完成。

正式提交:協(xié)調(diào)者如果得到所有執(zhí)行者的成功答復(fù),則發(fā)出正式提交請求。如果成功完成,則算法執(zhí)行成功。

在此過程中任何步驟出現(xiàn)問題(例如預(yù)提交階段有執(zhí)行者回復(fù)預(yù)計無法完成提交),則需要回退。

兩階段提交算法因為其簡單容易實現(xiàn)的優(yōu)點,在關(guān)系型數(shù)據(jù)庫等系統(tǒng)中被廣泛應(yīng)用。當(dāng)然,其缺點也很明顯:整個過程因需要同步阻塞而導(dǎo)致性能一般較差;存在單點問題,較壞情況下可能一直無法完成提交;可能產(chǎn)生數(shù)據(jù)不一致的情況(例如協(xié)調(diào)者和執(zhí)行者在第二個階段出現(xiàn)故障)。

3.三階段提交

三階段提交針對兩階段提交算法第一階段中可能阻塞部分執(zhí)行者的情況進(jìn)行了優(yōu)化。具體來說,將預(yù)提交階段進(jìn)一步拆成兩個步驟:嘗試預(yù)提交和預(yù)提交。

三階段提交完整過程如下:

●嘗試預(yù)提交。協(xié)調(diào)者詢問執(zhí)行者是否能提交某個事務(wù)。執(zhí)行者需要返回答復(fù),但無須執(zhí)行提交。這就避免出現(xiàn)部分執(zhí)行者被無效阻塞的情況。

●預(yù)提交。協(xié)調(diào)者檢查收集到的答復(fù),如果全部為真,則發(fā)起提交事務(wù)請求。各參與執(zhí)行者需要嘗試進(jìn)行提交并反饋是否能完成。

●正式提交。協(xié)調(diào)者如果得到所有執(zhí)行者的成功答復(fù),則發(fā)出正式提交請求。如果成功完成,則算法執(zhí)行成功。

其實,無論兩階段還是三階段提交,都只是一定程度上緩解了提交沖突的問題,并無法一定保證系統(tǒng)的一致性。首個有效的算法是后來提出的Paxos算法。

主站蜘蛛池模板: 商洛市| 高密市| 清丰县| 庆阳市| 连山| 班戈县| 平远县| 武穴市| 庐江县| 金溪县| 锡林浩特市| 凉城县| 康定县| 那曲县| 天峻县| 德安县| 开鲁县| 岑溪市| 怀柔区| 台前县| 新津县| 浪卡子县| 广昌县| 宿松县| 营山县| 荣昌县| 财经| 北辰区| 雷山县| 梓潼县| 津南区| 米脂县| 张北县| 嘉荫县| 峨山| 西畴县| 九江县| 巴林左旗| 麻栗坡县| 长沙市| 罗源县|