主頁 >  其他 > 讀書筆記丨理解和學習事務,讓你更好地融入云原生時代

讀書筆記丨理解和學習事務,讓你更好地融入云原生時代

2023-05-09 08:09:49 其他

摘要:分布式事務與云原生技術有很強的關聯,可以幫助云原生應用程式實作高效的分布式事務處理,

本文分享自華為云社區《理解和學習事務,讓你更好地融入云原生時代》,作者: breakDawn,

隨著云原生的概念越來越火,服務的架構應該如何發展和演進,成為很多程式員關心的話題,大名鼎鼎的《深入理解java虛擬機》一書作者于21年推出了新作《鳳凰架構》,從這本書中可以看到當前時下很多最新的技識訓者理念,

因此本文以及后續都將持續沉淀發布這本書的學習筆記和思考,也歡迎購買該書進行詳細學習,或者關注后續的學習筆記內容發布,了解精華內容和總結思考,

事務處理

事務有四個經典的特性ACID:

  • 原子性 (Atomicity):事務中的所有操作都必須是原子的,即不可分割或撤銷的,在一個事務執行期間,所有的操作都必須同時成功或同時失敗,不存在中間狀態,
  • 一致性 (Consistency):事務執行的結果必須保證資料庫的一致性,即資料庫中的資料必須在事務開始和結束時保持一致,
  • 隔離性 (Isolation):事務之間的操作相互隔離,即一個事務的操作不會受到其他事務的影響,
  • 可用性 (Availability):事務執行期間資料庫必須保持可用,即可以在任何時候進行訪問和修改,

這四個特性ACID中, C其實是目的, AID是手段,只靠內部(單資料源)可以用AID實作C,但是外部(多資料源)的情況下沒法用AID保證C,

1本地事務

本地事務是一種最基礎的事務解決方案,適用單個服務使用單個資料源的場景,(注意,對于MyISAM來說,代碼層面呼叫的rollback其實是空操作,引擎內置了事務處理,不需要代碼呼叫rollback)本地事務的實作原理來自ARIES(基于語意的恢復與隔離演算法),

1.1 本地事務如何實作原子性和持久性

本地事務中, 寫入磁盤的程序可能不是原子的,是會崩潰的,因此要考慮2個例外情況:

  • 未提交事務(呼叫事務的應用層代碼未回傳成功),資料還沒改完,寫了一半崩潰了,導致資料不一致,非原子性
  • 已提交事務(呼叫事務的應用層代碼已經反悔了),但是實際磁盤內容還沒寫就崩了,導致資料完全沒變化,非持久性,

解決方式:

引入commit log, 即將事務對資料的修改先寫入commit log,寫入成功代表事務成功,寫入完成后再寫磁盤,如果中途崩潰了就重新寫入,等同于熟知的redo-log!

這也是為什么redo-log中是針對某個物理塊的修改,目的就是能正確重新,不用考慮我寫到哪個位置了,直接全部重刷即可,

但是這樣性能太慢,希望能在事務提交完成前提前寫入磁盤,但是提前寫的話可能會非原子,這時候就可以引入 undolog, 即觸發回滾時,可以講已操作的資料進行undo回滾操作,這也是為什么undo-log記錄的是一條條不可重復執行的陳述句,

文中還提了2個特征:

  1. NO-FORCE:事務提交后,不強求立刻全部寫入磁盤,可以延遲(commit-log,有這的存在就不著急了);
  2. STEAL:事務提交前,可以先寫入一部分資料(undo-log)

1.2 本地事務如何實作隔離性

隔離性主要就是依賴 資料庫鎖和資料庫隔離級別實作,書中用作者自己的話簡述了一遍從可串行化 到可重復讀到讀已提交到讀未提交的演變程序和實作原理, 也提了以下MVCC等內容,

看完后感覺和我這篇文章講的內容基本對的上:將資料庫9種鎖、3種讀、4種隔離級別一次性串聯起來,用15張圖呈現背后資料庫事務背后的并發原理

里面有幾句比較重要的話:

  • MYSQL/Innodb的“可重復讀級別”只能在“只讀”事務中解決幻讀問題,但是讀寫事務還是會幻讀;
  • 讀未提交仍然是包含了寫鎖的;
  • MVCC只是針對讀+寫的場景做了優化, 如果是寫+寫是沒法優化的,只能用鎖;
  • 范圍鎖不是指對范圍內的每一條記錄加鎖, 而是整個范圍內甚至都不能做插入了,即包含了間隙的鎖,

2 全域事務

這里的全域事務指的是 單個服務 使用多個資料源,核心在于是單個服務,不涉及多服務之間的關聯, 視角只有單服務,

XA介面是雙向的,能在一個事務管理器和多個資源管理器之間形成通信橋梁,協調多個資料源的一致動作,實作全域事務的統一提交和回滾,Java基于XA介面衍生出的API叫做JTA(javax.transaction.TrancsactionManager和 XAResource),

注意對于全域事務,呼叫XA的應用者是可以不需要額外處理的,XA會協助做好以下全域事務的回應操作,

2.1 2PC協議(兩階段提交)

準備階段

資料源將需要做的事務操作記錄在redolog中,完成了持久化,并仍舊持有鎖,保持隔離性

提交階段

協調者收到了所有資料源的回應后, 給所有資料源發送commit指令,如果有任一失敗或者超時,則發送abort回滾指令,

2PC的缺點:

  • 協調者單點問題:協調者掛了其他的資料源都會一直在持有鎖的情況下等待;
  • 準備階段的性能問題:整個程序將被最慢的那個資料源所拖累,包括如果連接超時也會影響,導致多余的回滾操作;
  • 一致性風險:指令丟失、資料源機器崩潰且無法恢復(FLP不可能原理:如果岱機后無法恢復,那么沒有任何分布式協議可以達成一致性),

2.2 3PC協議

為了解決上面的單點問題和 準備階段的性能問題,引入3PC協議,將準備階段擴展為:

CanCommit詢問階段

這個階段就是為了確認各機器是否還是正常的,如果經過確認都是正常負載的狀態,再下發事務操作,這樣就能避免被網路超時、不良負載拖累的風險,

PreCommit預提交階段

和之前一樣,下發事務后各資料源寫入重做日志,

DoCommit階段

這個程序有一個優化, 如果協調者掛了, 資料源遲遲無法收到,就會默認進行事務提交(注意并非默認回滾),3PC仍然存在網路問題導致的一致性問題,

3 共享事務

書里說這個不常用,不寫了,類似于提供共享的資料連接給不同行程使用,使用同一個事務邏輯

4 分布式事務

4.1 CAP理論

  • C一致性: 各節點同一時刻回應結果一致(資料一致)
  • A可用性: 各節點隨時隨地都要能正常回應,不能存在延遲或者阻塞的情況(快速回應)
  • P磁區容忍性:某個節點掛了,其他節點能代替服務

科學家證明CAP只能同時滿足2個

  • 放棄磁區容忍性P: 意味著分布式系統不成立,這種情況只有類似于Oracle RAC這種資料通過磁盤共享的情況, 雖然是多個實體,但不算分布式, 基本是分布式系統一定都會包含P,否則沒有考慮分布式事務的意義
  • 放棄可用性A: 這樣可能因為資料同步程序的延遲或者超時,造成系統長時間不可用, 這是不能容忍的
  • 放棄一致性C: 資料有短暫不一致的回應, 放棄C是當前分布式系統的主流選擇, 一般都是允許資料在中間程序出錯, 但允許在輸出時能夠修正古來, 因此我們放棄了強一致性,追求“最終一致性”

4.2 BASE(可靠性佇列)

BASE指 基本可用性 + 柔性事務 + 最終一致性, 或者叫做最大努力交付

實作原理是引入一個訊息佇列,當某個事務動作發生例外時, 在輪詢階段不斷重試,直到成功,

要求滿足冪等性,可靠性事件佇列只要第一步完成了,后續就沒有失敗回滾的概念,只許成功,不許失敗,

4.3 TCC事務

TCC用于解決BASE中無法解決的隔離性問題,因為BASE不允許失敗,一定會執行,如果涉及了超售等問題將無法解決,

  • Try: 嘗試執行階段, 會先進行業務可執行的檢查,并提前預留好需要扣除的資源(類似于凍結那一塊資源,但沒有實際去扣);
  • Confirm:執行階段,這個程序不再做任何檢查,直接執行,如果網路出錯等緣故則一直重試,符合冪等;
  • Cancel:執行完成,釋放try階段中預留的業務資源,也要符合冪等,

和2PC很類似,但TCC是在用戶應用代碼層面實作的,業務侵入性很高, 而2PC是基礎設施層面提供的,

4.4 SAGA事務

TCC中的缺點在于 try階段和cancel階段依賴用戶代碼實作,但如果你的業務不支持這種操作就麻煩了,比如扣款動作是某個銀行做的, 他不支持預扣款的功能,

SAGA會把事務拆成很多個小事務T,按順序執行, 并根據情況給事務T失敗時選擇是繼續重試T, 還是用補償事務C來替代重試

這樣像銀行無法預扣款也無法撤銷轉賬的問題,可以改成自己系統來做中間者做轉賬操作,也要引入SAGAlog機制避免長串事務執行程序中崩潰,

總結

其實學習本文時,更重要的是思考為什么要學習這么多的事務概念和原理,在云原生時代,

像華為云提供的很多資料庫型別的云服務也都支持了分布式事務的能力,例如

 

    • 華為云RDS分布式事務:
      基于2PC原理實作的MSDTC分布式事務協調器

    • 華為云DDM事務模型:
      這里面的分布式事務模塊基于 MySQL XA 協議實作,XA 協議是對 2PC(Two Phase Commit) 事務模型的一種實作,

    • 華為云DWS分布式事務:
      基于強一致性的CSN事務機制,使用GaussDB分布式框架下的一個組件GTM以及從中獲取到的CSN值來處理事務,

 

畢竟云原生應用程式通常由多個微服務組成,因此需要在微服務之間進行通信,并保證事務的一致性,在這種情況下,就需要一種適用業務場景的分布式事務解決方案,比如TCC可以在微服務之間實作分布式事務的ACID特性,而且相對于其他方案,TCC更輕量級,對性能影響更小,但其他方案也有各自的適應場景,

因此,分布式事務與云原生技術有很強的關聯,可以幫助云原生應用程式實作高效的分布式事務處理,當使用某個關系型資料庫產品時,關注他們的分布式事務處理能力并分析是否適合自己當前的業務場景,是非常重要的,也是本書該章節值得學習的一個理由,

 

點擊關注,第一時間了解華為云新鮮技術~

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/551942.html

標籤:其他

上一篇:一分鐘學會、三分鐘上手、五分鐘應用,快速上手責任鏈框架詳解 | 京東云技術團隊

下一篇:返回列表

標籤雲
其他(158665) Python(38123) JavaScript(25405) Java(18024) C(15222) 區塊鏈(8262) C#(7972) AI(7469) 爪哇(7425) MySQL(7171) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5871) 数组(5741) R(5409) Linux(5336) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4567) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2432) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1965) Web開發(1951) HtmlCss(1932) python-3.x(1918) 弹簧靴(1913) C++(1912) xml(1889) PostgreSQL(1874) .NETCore(1857) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 網閘典型架構簡述

    網閘架構一般分為兩種:三主機的三系統架構網閘和雙主機的2+1架構網閘。 三主機架構分別為內端機、外端機和仲裁機。三機無論從軟體和硬體上均各自獨立。首先從硬體上來看,三機都用各自獨立的主板、記憶體及存盤設備。從軟體上來看,三機有各自獨立的作業系統。這樣能達到完全的三機獨立。對于“2+1”系統,“2”分為 ......

    uj5u.com 2020-09-10 02:00:44 more
  • 如何從xshell上傳檔案到centos linux虛擬機里

    如何從xshell上傳檔案到centos linux虛擬機里及:虛擬機CentOs下執行 yum -y install lrzsz命令,出現錯誤:鏡像無法找到軟體包 前言 一、安裝lrzsz步驟 二、上傳檔案 三、遇到的問題及解決方案 總結 前言 提示:其實很簡單,往虛擬機上安裝一個上傳檔案的工具 ......

    uj5u.com 2020-09-10 02:00:47 more
  • 一、SQLMAP入門

    一、SQLMAP入門 1、判斷是否存在注入 sqlmap.py -u 網址/id=1 id=1不可缺少。當注入點后面的引數大于兩個時。需要加雙引號, sqlmap.py -u "網址/id=1&uid=1" 2、判斷文本中的請求是否存在注入 從文本中加載http請求,SQLMAP可以從一個文本檔案中 ......

    uj5u.com 2020-09-10 02:00:50 more
  • Metasploit 簡單使用教程

    metasploit 簡單使用教程 浩先生, 2020-08-28 16:18:25 分類專欄: kail 網路安全 linux 文章標簽: linux資訊安全 編輯 著作權 metasploit 使用教程 前言 一、Metasploit是什么? 二、準備作業 三、具體步驟 前言 Msfconsole ......

    uj5u.com 2020-09-10 02:00:53 more
  • 游戲逆向之驅動層與用戶層通訊

    驅動層代碼: #pragma once #include <ntifs.h> #define add_code CTL_CODE(FILE_DEVICE_UNKNOWN,0x800,METHOD_BUFFERED,FILE_ANY_ACCESS) /* 更多游戲逆向視頻www.yxfzedu.com ......

    uj5u.com 2020-09-10 02:00:56 more
  • 北斗電力時鐘(北斗授時服務器)讓網路資料更精準

    北斗電力時鐘(北斗授時服務器)讓網路資料更精準 北斗電力時鐘(北斗授時服務器)讓網路資料更精準 京準電子科技官微——ahjzsz 近幾年,資訊技術的得了快速發展,互聯網在逐漸普及,其在人們生活和生產中都得到了廣泛應用,并且取得了不錯的應用效果。計算機網路資訊在電力系統中的應用,一方面使電力系統的運行 ......

    uj5u.com 2020-09-10 02:01:03 more
  • 【CTF】CTFHub 技能樹 彩蛋 writeup

    ?碎碎念 CTFHub:https://www.ctfhub.com/ 筆者入門CTF時時剛開始刷的是bugku的舊平臺,后來才有了CTFHub。 感覺不論是網頁UI設計,還是題目質量,賽事跟蹤,工具軟體都做得很不錯。 而且因為獨到的金幣制度的確讓人有一種想去刷題賺金幣的感覺。 個人還是非常喜歡這個 ......

    uj5u.com 2020-09-10 02:04:05 more
  • 02windows基礎操作

    我學到了一下幾點 Windows系統目錄結構與滲透的作用 常見Windows的服務詳解 Windows埠詳解 常用的Windows注冊表詳解 hacker DOS命令詳解(net user / type /md /rd/ dir /cd /net use copy、批處理 等) 利用dos命令制作 ......

    uj5u.com 2020-09-10 02:04:18 more
  • 03.Linux基礎操作

    我學到了以下幾點 01Linux系統介紹02系統安裝,密碼啊破解03Linux常用命令04LAMP 01LINUX windows: win03 8 12 16 19 配置不繁瑣 Linux:redhat,centos(紅帽社區版),Ubuntu server,suse unix:金融機構,證券,銀 ......

    uj5u.com 2020-09-10 02:04:30 more
  • 05HTML

    01HTML介紹 02頭部標簽講解03基礎標簽講解04表單標簽講解 HTML前段語言 js1.了解代碼2.根據代碼 懂得挖掘漏洞 (POST注入/XSS漏洞上傳)3.黑帽seo 白帽seo 客戶網站被黑帽植入劫持代碼如何處理4.熟悉html表單 <html><head><title>TDK標題,描述 ......

    uj5u.com 2020-09-10 02:04:36 more
最新发布
  • 讀書筆記丨理解和學習事務,讓你更好地融入云原生時代

    摘要:分布式事務與云原生技術有很強的關聯,可以幫助云原生應用程式實作高效的分布式事務處理。 本文分享自華為云社區《理解和學習事務,讓你更好地融入云原生時代》,作者: breakDawn。 隨著云原生的概念越來越火,服務的架構應該如何發展和演進,成為很多程式員關心的話題。大名鼎鼎的《深入理解java虛 ......

    uj5u.com 2023-05-09 08:09:49 more
  • 一分鐘學會、三分鐘上手、五分鐘應用,快速上手責任鏈框架詳解 |

    責任鏈模式是開發程序中常用的一種設計模式,在SpringMVC、Netty等許多框架中均有實作。我們日常的開發中如果要使用責任鏈模式,通常需要自己來實作,但自己臨時實作的責任鏈既不通用,也很容易產生框架與業務代碼耦合不清的問題,增加Code Review 的成本。 ......

    uj5u.com 2023-05-09 08:09:38 more
  • 昇騰實戰丨DVPP媒體資料處理視頻解碼問題案例

    摘要:本期就分享幾個關于DVPP視頻解碼問題的典型案例,并給出原因分析及解決方法 本文分享自華為云社區《DVPP媒體資料處理視頻解碼問題案例》,作者:昇騰CANN 。 DVPP(Digital Vision Pre-Processing)是昇騰AI處理器內置的影像處理單元,通過AscendCL媒體數 ......

    uj5u.com 2023-05-09 08:09:30 more
  • 6年測開經驗,從功能測驗到測驗開發,每一步都深思熟慮...

    ?驀然回首,軟體測驗風風雨雨的這幾年,起初每天的作業只是滑鼠點點點,我還真不知道怎么辦,閑的時候真的懷疑自己的存在價值,每天拿著7000的工資,飄蕩在繁華的深圳,吃不飽也餓不死,未來一片茫然…… ?時間荏苒,作業越久越能體會測驗才不是這么簡單,假如只會點點滑鼠,并不能走得長遠,工資也漸漸地無法滿足生 ......

    uj5u.com 2023-05-09 08:09:23 more
  • 位元組面試官心聲:個個都說會自動化,結果面試一問細節全露餡了

    今年部門要招三個自動化測驗,年前我面試了幾十位候選人。發現一個很奇怪的現象,面試中一問到元素定位、框架api、腳本撰寫之類的,很多候選人都對答如流。但是一問到實際專案,比如 “如何從0開始搭建自動化體系”、“如果讓你來推廣自動化,該如何設計方案”。大多數人都避重就輕、含糊其辭。究其原因,我認為是現在... ......

    uj5u.com 2023-05-09 08:08:42 more
  • 當Serverless遇到Regionless:現狀與挑戰

    摘要:本文嘗試基于分析現有的學術文章,剖析Serverless與Regionless并存時,在性能提升和成本控制兩個方向的現狀與挑戰 本文分享自華為云社區《當Serverless遇到Regionless:現狀與挑戰》,作者:云容器大未來。 近年來,Serverless服務崛起的趨勢是有目共睹的:從B ......

    uj5u.com 2023-05-09 08:08:12 more
  • WEB中間件常見漏洞總結

    WEB中間件常見漏洞總結 什么是WEB中間件 是一類提供系統軟體和應用軟體之間的連接,便于軟體各部件之間的溝通的軟體,應用軟體可以借助中間件在不同的技術架構之間共享資訊和資源。中間件位于客戶機服務器的作業系統之上,管理著計算資源和網路通信。中間件=平臺+通信 一、IIS中間件 1、IIS6.0 PU ......

    uj5u.com 2023-05-09 08:08:07 more
  • 「微服務」這10道Consul面試題值得一看

    前言 Consul 是一種非常強大的分布式服務發現和配置管理工具,它可以幫助開發人員和運維人員更好地管理和維護分布式系統。 但是,使用 Consul 也需要投入一定的人力和物力,需要根據實際情況進行選擇和使用。 什么是 Consul? Consul 是一種分布式服務發現和配置管理工具,它可以用于服務 ......

    uj5u.com 2023-05-09 08:08:03 more
  • 為什么一裁員就先拿測驗人員開刀,軟體測驗人員應該居安思危....(

    軟體測驗人員應該居安思危
    每當經濟不好,公司業績不好的時候,公司都可能進行裁員。 首先裁的就是測驗人員。 因為測驗人員的技術水平相對來說比較低,容易被替代,招起來也比較容易。 公司往往先拿測驗人員開刀。
    身為測驗人員,雖然我們平常的作業大部分都比較安逸。 但是千萬不能溫水煮青蛙。 應該自強不息, 要... ......

    uj5u.com 2023-05-09 08:07:17 more
  • Codeforces Round 871 (Div. 4)

    A.Love Story 題意: 給定n個長度為10的字串,問其與codeforces字串的對應下標字母不同的個數。 分析: 對于每個字串從前往后依次和“codeforces”對應字符比較然后統計不同字母數即可 code: #include <bits/stdc++.h> using name ......

    uj5u.com 2023-05-09 08:06:45 more