分布式事務快速入門

分布式事務基本概念

使用分布式事務的場景:分布式場景下的跨數據庫事務

分布式事務誕生的理論:CAP和Base

3種一致性:

強一致性 :系統寫入了什么,讀出來的就是什么。

弱一致性 :不一定可以讀取到最新寫入的值,也不保證多少時間之后讀取到的數據是最新的,只是會盡量保證某個時刻達到數據一致的狀態。

最終一致性 :弱一致性的升級版。系統會保證在一定時間內達到數據一致的狀態

其他一致性:

讀寫一致性:是一種在分布式系統中保證讀取操作與寫入操作之間一致性的模型

柔性事務(最終一致性):TCC、 Saga、MQ 事務 、本地消息表補償

剛性事務(強一致性):2PC,3PC

剛性事務是基于數據庫層面保證事務的強一致性的,柔性事務是基于外部中間件或者代碼保證事務的最終一致性的

業務代碼侵入方案:TCC,Saga

業務代碼無侵入方案:2PC,3PC

XA規范的角色:

Application Program :AP,應用程序本身

Resource Manager : RM,資源管理器,指的是數據庫

Transational Manager :TM,事務管理器


2PC-兩階段提交

2PC的執行流程:

分為準備階段和提交階段

準備階段:詢問RM是否能執行事務,如果能執行事務就直接做預處理,例如Mysql的預處理就是寫入Undo日志和Redo日志,但是不寫入Binlog日志,因為此時事務還沒提交

提交階段:查看所有的RM是否預處理成功(全部RM屬于就緒狀態),如果全部成功就提交,如果有一個失敗了就回滾

2PC的優缺點:

優點:

  1. 簡單
  2. 數據強一致性

缺點:

  1. 同步阻塞,要等待所有事務都就緒再提交
  2. 部分數據不一致情況,commit和rollback不能保證所有節點同時成功
  3. 沒有超時機制,TM掛掉后多個RM的事務會一直等待提交

3PC-三階段提交

3PC的執行流程:

準備階段,預提交階段,提交階段

準備階段:詢問RM是否能執行事務,超時或者RM說不能執行事務就中斷事務

預提交階段:再一次詢問RM是否能執行事務,如果可以就進入預提交(寫入Undo日志和Redo日志),如果No或者超時就回滾

提交階段:所有RM都預處理成功,則提交事務。有一個RM失敗或者超時了,則回滾

2PC對比3PC:

  1. 3PC是多次判斷數據庫狀態(多了一次判斷),加入了新的協議,同時增加了通信的開銷
  2. 3PC引入的RM超時機制是多次一舉的,其實2PC就夠了,2PC的RM一直等待的情況其實是理論而已,實際Mysql等數據庫本身就有事務超時機制
  3. 2PC實現更加簡單
  4. 3PC不僅沒有完全解決阻塞問題還會導致性能更糟糕,多數應用會選擇通過復制狀態機解決 2PC 的阻塞問題

TCC補償事務

TCC的執行流程:

Try,Confirm,Cancel

執行流程:Try,Try成功就Confirm,失敗就Cancel

TCC會將日志記錄,實戰中會實現Confirm失敗和Cancel失敗的情況,會進行重試,如果重試多次失敗要走人工補償

TCC和2PC的區別:

  1. TCC是基于代碼自定義邏輯來補償保證最終一致性,2PC是基于Mysql事務保證強一致性
  2. TCC的Try是類似于凍結,例如500元轉賬100元是凍結這個100元而不是真的轉賬。而2PC是給這500元的記錄上記錄鎖
  3. 業務補償邏輯的區別,TCC不是基于數據庫的通用事務機制,而是根據具體業務的流程和規則編寫的代碼

TCC和2PC,3PC的區別:

  1. 2PC/3PC 依靠數據庫或者存儲資源層面的事務,TCC 主要通過修改業務代碼來實現。
  2. 2PC/3PC 屬于業務代碼無侵入的,TCC 對業務代碼有侵入。
  3. 2PC/3PC 追求的是強一致性,在兩階段提交的整個過程中,一直會持有數據庫的鎖。TCC 追求的是最終一致性不會一直持有各個業務資源的鎖

MQ事務

RocketMQ和Kafka都提供了事務的相關功能

可以將生產消息,消費,處理整個過程變成一個原子性的操作


Saga事務

長事務分為多個短事務,然后短事務分別按順序提交,有一個短事務失敗就回滾

失敗的補償邏輯還是要通過業務代碼補償

正向補償的執行順序(失敗回滾):T1,T2,…,Ti(失敗),Ci(補償),…,C2,C1

反向補償的執行順序(失敗重試):T1,T2,…,Ti(失敗),Ti(重試)…,Ti+1,…,Tn。

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

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

相關文章

nvme Unable to change power state from D3cold to D0, device inaccessible

有個thinkpad l15 gen4筆記本,使用較少,有一塊三星m2和東芝14t硬盤,想安裝飛牛nas系統作為家庭照片庫,制作飛牛啟動盤,發現安裝飛牛需要全盤格式化,電腦本身的系統還是需要保留的,故想到再安裝一…

Unity Shaders and Effets Cookbook

目錄 作者簡介 審稿人簡介 前言 我是偏偏 Unity Shaders and Effets Cookbook 第一章:Diffuse Shading - 漫反射著色器 第二章:Using Textures for Effects - 著色器紋理特效的應用 第三章:Making Your Game Shine with Specular - 鏡…

部署RocketMQ

部署環境:jdk8以上,Linux系統 下載和安裝指令: wget https://archive.apache.org/dist/rocketmq/4.9.4/rocketmq-all-4.9.4-bin-release.zip 顯示下載成功: --2025-05-10 11:34:46-- https://archive.apache.org/dist/rocketm…

使用FastAPI和React以及MongoDB構建全棧Web應用04 MongoDB快速入門

一、NoSQL 概述 1.1 了解關系數據庫的局限性 Before diving into NoSQL, it’s essential to understand the challenges posed by traditional Relational Database Management Systems (RDBMS). While RDBMS have been the cornerstone of data management for decades, th…

高精度之加減乘除之多解總結(加與減篇)

開篇總述:精度計算的教學比較雜亂,無系統的學習,且存在同法多線的方式進行同一種運算,所以我寫此篇的目的只是為了直指本質,不走教科書方式,步驟冗雜。 一,加法 我在此講兩種方法: …

氣象大模型光伏功率預測中的應用:從短期,超短期,中長期的實現與開源代碼詳解

1. 引言 光伏功率預測對于電力系統調度、能源管理和電網穩定性至關重要。隨著深度學習技術的發展,大模型(如Transformer、LSTM等)在時間序列預測領域展現出強大能力。本文將詳細介紹基于大模型的光伏功率預測方法,涵蓋短期(1-6小時)、超短期(15分鐘-1小時)和中長期(1天-1周…

玩轉Docker(一):基本概念

容器技術是繼大數據和云計算之后又一炙手可熱的技術,而且未來相當一段時間內都會非常流行。 本文將對其基本概念和基本使用做出介紹。包括容器生態系統、容器的原理、怎樣運行第一個容器、容器技術的概念與實踐、Docker鏡像等等 目錄 一. 鳥瞰容器生態系統 1. 容器…

計算機視覺與深度學習 | 基于數字圖像處理的裂縫檢測與識別系統(matlab代碼)

???????????????????????????????? 基于數字圖像處理的裂縫檢測與識別系統 ??????????????????????????**系統架構設計****1. 圖像預處理**目標:消除噪聲+增強裂縫特征**2. 圖像分割**目標:提取裂縫區域**3. 特征…

推薦一款免費開源工程項目管理系統軟件,根據工程項目全過程管理流程開發的OA 辦公系統

在當今的工程項目管理領域,許多企業和團隊面臨著諸多難題。傳統的管理方式往往依賴于人工記錄和分散的工具,導致項目進度難以實時把控,任務分配不夠清晰,合同管理混亂,事件提醒不及時,財務管理缺乏系統性&a…

Proser:在使用中改進

上位機接收到下位機發送的協議,解析出工作模式,然后依據此模式切換到相應的界面。為了調試這個功能,由Proser提供的Block與Sequence生成器相當有用: 使用Block生成器:忽略掉不感興趣的數據使用Sequence生成器&#xf…

C語言_程序的段

在 C 語言程序中,內存通常被分為多個邏輯段,每個段存儲不同類型的數據。理解這些段的結構和功能,有助于你更高效地編寫、調試和優化程序。以下是 C 語言程序中主要的內存段及其特點: 1. 代碼段(Text Segment) 存儲內容:編譯后的機器指令(程序代碼)。特性: 只讀:防止…

【桌面】【輸入法】常見問題匯總

目錄 一、麒麟桌面系統輸入法概述 1、輸入法介紹 2、輸入法相關組件與服務 3、輸入法調試相關命令 3.1、輸入法診斷命令 3.2、輸入法配置重新加載命令 3.3、啟動fcitx輸入法 3.4、查看輸入法有哪些版本,并安裝指定版本 3.5、重啟輸入法 3.6、查看fcitx進程…

Node.js 24.0 正式發布:性能躍升與開發體驗全面升級

Node.js v24.0.0 震撼發布!V8 13.6、npm 11、權限模型穩定化等重磅更新 2025年5月6日 —— Node.js 社區迎來重大里程碑!Node.js v24.0.0 正式發布,帶來一系列激動人心的新特性、性能優化和 API 改進。本次更新涵蓋 V8 JavaScript 引擎升級至…

MySQL 查詢優化全攻略:從原理到實戰

為什么查詢優化如此重要? 在當今數據驅動的時代,數據庫性能直接影響著用戶體驗和業務效率。根據統計,網頁加載時間每增加1秒,轉化率可能下降7%,而數據庫查詢往往是性能瓶頸的關鍵所在。作為最流行的開源關系型數據庫之…

《從零開始:構建你的第一個區塊鏈應用》

一、引言 區塊鏈技術,這個曾經只在金融領域被廣泛討論的技術,如今已經滲透到各個行業。從供應鏈管理到智能合約,區塊鏈的應用場景越來越豐富。對于開發者來說,理解區塊鏈的基本原理并構建一個簡單的區塊鏈應用,是進入這…

使用AES-CBC + HMAC-SHA256實現前后端請求安全驗證

AES-CBC HMAC-SHA256 加密驗證方案,下面是該方案二等 優點 與 缺點 表格,適用于文檔、評審或技術選型說明。 ? 優點表格:AES-CBC HMAC-SHA256 加密驗證方案 類別優點說明🔐 安全性使用 AES-CBC 對稱加密使用 AES-128-CBC 是可…

Veins同時打開SUMO和OMNeT++的GUI界面

進入 Veins 工程目錄(即包含 sumo-launchd.py 的目錄),打開終端設置 SUMO_HOME 環境變量(指向你安裝的 SUMO 路徑): export SUMO\_HOME/home/veins/src/sumo-1.11.0編譯 Veins 工程(包含 OMNeT…

suricata之日志截斷

一、背景 在suricata的調試過程中,使用SCLogXXX api進行信息的輸出,發現輸出的日志被截斷了,最開始以為是解析邏輯有問題,沒有解析完整,經過排查后,發現SCLogXXX api內部進行了長度限制,最長2K…

navicat 如何導出數據庫表 的這些信息 字段名 類型 描述

navicat 如何導出數據庫表 的這些信息 字段名 類型 描述 數據庫名字 springbootmt74k 表名字 address SELECT COLUMN_NAME AS 字段名,COLUMN_TYPE AS 類型,COLUMN_COMMENT AS 描述 FROM information_schema.COLUMNS WHERE TABLE_SCHEMA springbootmt74k AND TABLE_NAME a…

LVGL圖像導入和解碼

LVGL版本:8.1 概述 在LVGL中,可以導入多種不同類型的圖像: 經轉換器生成的C語言數組,適用于頁面中不常改變的固定圖像。存儲系統中的外部圖像,比較靈活,可以通過插卡或從網絡中獲取,但需要配置…