什么是ACID理論(二階段、三階段提交、TCC)

目錄

  • 二階段提交協議
  • TCC(Try-Confirm-Cancel)
    • 預留成功
    • 預留失敗
  • 三階段提交協議
  • 總結
  • Some questions
    • reference

ACID理論時對事務特性的抽象和總結,想要實現ACID需要掌握二階段提交協議以及TCC
這里是有關協議的論文PDF鏈接:

CONCURRENCY CONTROLAND RECOVERY IN DATABASE
SYSTEMS

二階段提交協議

二階段提交協議:通過二階段的協商來完成一個提交操作

首先定義一個分布式事務操作,發起這個事務到分布式系統種的節點中。某一個節點收到消息后扮演協調者身份,與其他節點聯系,發送網絡消息,發起二階段提交。
然后協調者進入請求提交階段(即投票階段),其他節點進行評估,評估事務中需要操作的對象和對象狀態是否準備好、是否提交新操作,然后回復協調者,
協調者收到所有回復后,進入提交執行階段(即完成階段)。協調者先執行事務,然后通知其他節點,其他節點接收到通知后也執行事務,然后將事務結果返回給協調者。
協調者將總結果返回給客戶。

需要注意的是:
在第一階段,每個參與者投票表決事務是放棄還是提交。一旦參與者投票要求提交事務,那么就不允許放棄事務。即:
在一個參與者投票要求提交事務之前,它必須保證能夠執行提交協議中它自己的那一部分,即使參與者出現故障或者中途被替換。

不過二階段協議也存在問題:
1、在提交請求階段,需要預留資源,在資源預留期間,其他人不能操作(MySQL XA協議在第一階段會將相關資源鎖定)
2、數據庫是獨立的系統

所以無法根據業務特點彈性調整鎖的粒度,會影響到數據庫的并發性能。

TCC(Try-Confirm-Cancel)

TCC是預留、確認、撤銷三個操作的簡稱,包含了預留、確認or撤銷兩個階段。

預留成功

進入預留階段,步驟如下:
在這里插入圖片描述

如果預留階段的執行都沒有問題,就進入確認階段,步驟如下:
在這里插入圖片描述

預留失敗

假設節點2分配資源失敗了:
在這里插入圖片描述
那么會進入撤銷階段:
在這里插入圖片描述
TCC本質:補償事務
它的核心思想是針對每個操作都要注冊一個與其對應的確認操作和補償操作(也可以稱為撤銷操作)。
它是一個業務層面的協議,TCC的三個操作需要在業務代碼中編碼實現。為了實現一致性,確認操作和補償操作必須是冪等的,因為這2個操作可能會失敗重試。
Tips:冪等性是指同一操作對同一系統的任意多次執行,所產生的影響均與一次執行的影響相同,不會因為多次執行而產生副作用。常見的實現方法有Token、索引等。本質是通過唯一標識,標記同一操作的方式來消除多次執行的副作用。

三階段提交協議

三階段提交協議,針對二階段提交協議的痛點:協調者故障,參與者長期鎖定資源,引入了詢問階段超市機制,來減少資源被長時間鎖定的情況,但是會導致集群各個節點在正常運行的情況下,使用更多的消息進行協商,增加系統負載和響應延遲。所以三階段提交協議很少使用。

總結

在這里插入圖片描述

Some questions

在兩階段提交協議中,如果一個節點在第一階段確認可以提交,但是它之后崩潰了,第二階段無法實現自己那部分事務,此時該如何是好?
需要將提交的相關信息持久化到磁盤,然后重啟,恢復到之前狀態

reference

ACID理論:CAP的酸,追求一致性

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376892.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376892.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376892.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

oracle安裝后新建數據庫實例及配置

ORA-12514 TNS 監聽程序當前無法識別連接描述符中請求服務 的解決方法 (2011-01-20 13:50:37) 轉載▼標簽: it 分類: 技術早上同事用PL/SQL連接虛擬機中的Oracle數據庫,發現又報了“ORA-12514 TNS 監聽程序當前無法識別連接描述符中請求服務…

html5游戲開發--動靜結合(二)-用地圖塊拼成大地圖 初探lufylegend

一、前言 本次教程將向大家講解如何用html5將小地圖塊拼成大地圖,以及如何用現有的高級html5游戲開發庫件lufylegend.js開發游戲。 首先讓我們來了解了解如何用html5實現動畫,畢竟“動靜結合”是先有動再有靜。看了上一章的內容,或許你就有了…

BASE理論(基本可用策略+ 最終一致性實現)

目錄實現基本可用的幾個策略1、流量削峰(不同地區售票時間錯峰出售)2、延遲響應,異步處理(買票排隊,基于隊列先收到用戶買票請求,排隊異步處理,延遲響應)3、體驗降級(看到…

一天一道算法題--6.15--卡特蘭數

感謝微信平臺---一天一道算法題---每天多一點進步- problem: 12個高矮不同的人 排成兩排 每排必須是從矮到高排列 而且第二行比對應的第一排的人高 問排列方式有多少種? analyse: 據說 這題 是來自于 阿里巴巴的面試題 果然 很有分量 ~~ 我反正 胡思亂想了好多 沒搞…

現有一些開源ESB總線的比較

現有的開源ESB總線中,自從2003年第一個開源總線Mule出現后,如今已經是百花爭鳴的景象了。如今我就對現有的各種開源ESB總線根據性能、可擴展性、資料文檔完整程度以及整合難易程度等方面展開。 一.CXF CXF的定位不是ESB總線,而是一…

Paxos算法(Basic Paxos 與 Multi-Paxos思想)

目錄Basic Paxos三個角色達成共識的方法對于Basic Paxos的總結Multi-Paxos領導者優化 Basic Paxos 執行referencePaxos 算法包含 2 個部分: 1、Basic Paxos : 描述多節點之間如何就某個值達成共識 2、Multi-Paxos : 描述執行多個Basic Paxos實…

vs2012下調試mvc4源代碼

當前流行的應該是mvc3才對。然后在研究mvc3的源代碼時候,Html這個屬性下的擴展方法Partial()都沒有。IntelliSense不會提示該方法,找了半天的資料也問了一些博友,沒看到好的解決棒法。最后沒轍另辟蹊蹺,就開始著手研究mvc4的源代碼…

JAVA UDP網絡編程學習筆記

一、UDP網絡編程概述 采用TCP協議通信時,客戶端的Socket必須先與服務器建立連接,連接建立成功后,服務器端也會持有客戶端連接的Socket,客戶端的Socket與服務器端的Socket是對應的,它們構成了兩個端點之間的虛擬通信鏈路…

firefox 插件開發

IDE,你可以嘗試下NetBeans foxbeans這個插件。轉載于:https://www.cnblogs.com/sode/archive/2013/01/25/2876562.html

13種負載均衡算法

目錄前言(1)輪轉調度(Round-Robin Scheduling)算法(2)加權輪轉調度(Weighted Round-Robin Scheduling)算法(3)隨機均衡調度(Random Scheduling&am…

對于shell腳本參數獲取時的一點小技巧

問題如下: 根據腳本參數的個數$#進行一個循環,在依次輸出每個參數$1 $2 $3...... 我有一個循環變量i $i 取到這時的i為1,我想使用這個1再去調用$1,也是就是打印出第一個參數 就是$($i)的意思來取到第幾個參數,當然$($i)是不好用的…

(轉)頁游安全攻與防,SWF加密和隱藏密匙

原文鏈接:http://netsecurity.51cto.com/art/201211/364775.htm 頁游,最最核心的就是客戶端(swf)與服務端的游戲通信了。游戲通信產生的封包,內容是否可識別,可篡改,可重放,處理邏輯…

C++自動類型推導 : auto 與 decltype 用法

基本用法與區別 auto 總是推導出“值類型”,絕不會是“引用”,如果有引用,auto會把引用去掉,推導出值類型; auto 可以附加上 const、volatile、*、& 這樣的類型修飾符,得到新的類型。 auto x 10L; // auto推導為…

C++智能指針使用指南 part1:基本使用

加粗樣式>TOC 智能指針是代理模式的具體應用,它使用 RAII 技術代理了裸指針,能夠自動釋放內存, 無需程序員干預,所以被稱為“智能指針”。 智能指針不是指針,而是一個對象,所以不要對其調用delete&…

AS3.0 BitmapData類介紹

注:文中的Bitmapdata和BMD均為同一意思BitmapData,BMD為其縮寫一,概括: Bitmapdata繼承Object對象,實現IBitmapDrawable接口,這個接口有什么用,你可以理解為Drawable,能被畫。官方介紹是:IBitma…

C++使用JSON的序列化與反序列化

這里使用的json解析工具為JSON for Modern C,使用的話僅需要包含頭文件。 獲取方式:wget https://github.com/nlohmann/json/releases/download/v3.7.3/json.hpp JSON json的序列化功能和map一樣,用關聯數組的"[]"來任意添加數據&#xff0c…

iOS判斷為空或者只為空格

本文轉載至 :http://www.cnblogs.com/superhappy/archive/2012/11/08/2761403.html 經常有需求 要判斷不能為空,后臺老是鄙視不做非空判斷的前端 ,木辦法 只能寫一個。 第一種想法:我不就是判斷 是不是nil就可以了么。結果發現太天…

Hyper-V

Hyper-V:也就是虛擬化技術,允許終端用戶在同一臺機器上運行多個操作系統,支持32位和64位系統,可以直接在Windows 8上創建自己的虛擬機。開啟Hyper-V虛擬機需要更多的內存,正常運行需要至少4GB以上內存,所以…

sdut 1451 括號東東 DP

http://acm.sdut.edu.cn/sdutoj/problem.php?actionshowproblem&problemid1451 題意:中文..... 思路: pku有一道題,經典的括號匹配(區間DP)題目,那道題目是求的最長滿足條件的子串的長度,那…

CDN緩存替代算法

CDN緩存工作過程如下:用戶發出一個請求,如果請求被命中,緩存將對用戶的請求進行響應,返回其請求的數據;如果未被命中,緩存向上拉取用戶需要的數據,并對其存儲的數據進行替換。 緩存算法的意義在…