分布式 分布式事務 總結

前言


?相關系列

  • 《分布式 & 目錄》
  • 《分布式 & 分布式事務 & 總結》
  • 《分布式 & 分布式事務 & 問題》
    ?
    ?

分布式事務


????所謂分布式事務是指操作范圍籠罩多個不同節點的事務。例如對于訂單節點&庫存節點而言,一次完整的交易需要同時調動兩個節點。而如果將這個交易的所有操作作為ACID事務執行,那么該事務就被稱為分布式事務。
?
?

2PC @ 2 Phase Commit @ 二階段遞交


????2PC&3PC協議是處理分布式事務數據一致性(與CAP理論的一致性不同,事務的一致性是指確保數據在兩個“合法”狀態間的“正確轉移”)問題的解決方案,其本質是通過確保事務的原子性來保證一致性。在分布式系統中,節點雖然可以知曉自身操作的成功與否,但卻無法知曉其他節點操作的執行結果。因此當事務跨越多個節點時,為了保持事務的原子性&一致性,需要引入了TM @ 事務管理器來統一掌握所有RM @ 資源管理器的操作結果,并決定是否把各資源管理器的操作結果統一提交/回滾。2PC協議分為準備&提交兩個階段:

  • Prepare phase @ 準備階段:事務管理器會向所有資源管理器發送(2PC/3PC/TCC協議都只是分布式事務的實現思想,因此事務管理器對資源管理器的請求發送無需在意串/并行,但具體的實現工具/框架就必須考慮這一點,因為各個資源管理器事務之間可能存在依賴性,例如事務B的執行需要事務A的執行結果參與)“準備”請求以確認其是否已準備好遞交事務。資源管理器在收到“準備”請求后會開啟&執行本地事務,但并不真正遞交,而是將Undo和Redo日志寫入本地事務日志中。Undo日志用于記錄如何回滾事務,而Redo日志則用于在提交階段重新執行事務操作。盡管在2PC中通常不直接使用Redo日志提交,但它在某些故障恢復場景中是有用的。本地事務執行結束后,將成功與否以Yes/No的形式回應至事務管理器;
  • Commit phase @ 遞交階段:如果事務管理器收到所有反饋且發現資源管理器都已成功執行本地事務則會決定提交事務,否則就回滾事務。各節點在收到事務管理器發送的“遞交/回滾”請求后會統一將各自的執行結果遞交/回滾。

在這里插入圖片描述
?

缺點

  • 同步阻塞:在整個分布式事務未結束前,所有資源管理器(的事務涉及業務)都會處于阻塞狀態;
  • 單點故障:事務管理器是整個分布式事務的核心,如果事務管理器宕機,那么所有資源管理器都會被鎖定而無法繼續執行;
  • 數據不一致:二階段如果出現網絡分區/節點宕機而導致部分資源管理器未收到事務遞交指令/事務遞交失敗,那么就會出現數據不一致的情況。
    ?
    ?

3PC @ 3 Phase Commit @ 三階段遞交


????3PC協議在2PC協議的基礎上引入了檢查/超時機制,用于避免/處理2PC的“同步阻塞/單點故障/數據不一致”問題。3PC協議分為以下三個階段:

  • CanCommit @ 可/詢問遞交:事務管理器向各資源管理器詢問是否可以支持執行/提交事務。各資源管理器接收到詢問后根據自身情況向事務管理器返回Yes/No回應。如果事務管理器沒有在指定時間內接收到所有回應/接收到No回應,則分布式事務中斷/取消。可/詢問遞交階段是3PC協議引入的新階段,目的是事先檢查資源管理器的狀態能否支持分布式事務的執行/遞交,從而避免無意義的分布式事務執行以增強協議的可靠性&容錯率;
  • PreCommit @ 預提交:在接收到所有Yes回應的情況下,分布式事務會進入預遞交階段。該階段中事務管理器會向各資源管理器發送預遞交請求,而接收到請求的各資源管理器會開啟&執行本地事務但不遞交,并將Undo和Redo日志寫入本地事務日志中,隨后向事務管理器發送Ack回應。而如果事務管理器沒有在指定時間內接收到所有Ack回應/接收到Abort回應,則事務管理器會向各資源管理器發送Abort請求,從而令各資源管理器回滾本地事務。而在這階段中如果部分已開啟&執行本地執行的資源管理器未能在指定時間內接收到Abort請求,則其也會因為超時而自動回滾本地事務;
  • DoCommit @ 最終提交:在接收到所有Ack回應后,分布式事務會進入最終遞交階段。該階段中事務管理器會向各資源管理器發送最終遞交請求,而接收到請求的各資源管理器會遞交事務,并向事務管理器發送Ack回應表示事務遞交已完成。注意!該階段中而如果有部分資源管理器未能在指定時間內接收到最終遞交請求,則該資源管理器就可能因為超時而自動回滾本地事務,從而無法保證分布式事務的原子性,并進一步破壞數據一致性。因此3PC協議同樣無法完全避免2PC協議的數據不一致問題。
    ?

優點

  • 可靠性&容錯率提升:檢查機制增強了分布式事務的可靠性&容錯率;
  • 超時機制減少了對阻塞時間:超時機制減少了資源管理器等待事務管理器指令的阻塞時間;
  • 減少了單點故障對系統的影響:超時機制降低了事務管理器單點故障對系統的影響。
    ?

缺點

  • 復雜性增加:3PC協議相比2PC協議而言需要處理更多狀態轉換&超時邏輯,這為增加了實現的難度&出錯的可能性;
  • 性能開銷:更復雜的流程同步帶來了是性能開銷的增加;
  • 數據不一致:3PC協議依然未能解決數據不一致問題,雖然檢查&超時有助于降低這一點,但網絡分區造成的數據不一致問題依然是存在的。
    ?
    ?

TCC @ Try Confirm Cancel @ 嘗試確認取消


????TCC協議是一種不同于2PC/3PC協議的分布式事務解決方案,其核心思想是“補償機制”,即在分布式事務出現異常/失敗時通過執行相反的操作來補償之前的行為,從而達到事務的一致性。TCC將分布式事務劃分為以下三個階段:

  • Try @ 嘗試:事務管理器向事務協調器申請開啟分布式事務并獲得全局事務ID,隨后將該全局事務ID發送至各資源管理器。資源管理器接收到全局事務ID后會向事務協調器注冊分支事務ID,從而將分支事務ID納入該全局事務ID下管理。此后資源管理器便會開啟&執行本地事務并預留必要的資源,以便后續遞交事務時使用,并向事務管理器報告當前分支事務的開啟&執行情況;
  • Confirm @ 確認:如果在嘗試階段中的所有的資源管理器都成功開啟&執行了本地事務,那么分布式事務就會進入確認階段。在確認階段中事務管理器會向各資源管理器發送確認請求,從而令其能夠真正的遞交事務,并于事務管理器中標記分支事務已成功遞交;
  • Cancel @ 取消:如果在嘗試&確認階段中存在資源管理器未能成功開啟&執行&遞交本地事務的情況,那么分布式事務就會進入取消階段。在取消階段中事務管理器會向各資源管理器發送取消請求,從而回滾尚未遞交的事務/執行相反的操作彌補已遞交的事務,并于事務管理器中標記分支事務已成功取消。而對于因為各種原因未能接收到取消請求的資源管理器,由于超時機制的存在其也會自動執行取消行為,從而極大程度的確保了事務的原子性。
    ?

優點

  • 極大確保了原子性:補償機制的存在使得已遞交的事務也可以被取消,從而降低因為網絡分區而數據不一致的風險;
  • 避免數據庫鎖沖突的低性能風險:TCC通過將數據庫的二階段提交上升到微服務來實現,避免了數據庫二階段提交中鎖沖突導致的長事務低性能風險;
  • 異步高性能:TCC采用了先try檢查,然后異步實現confirm的方式,提高了系統的性能和可擴展性。
    ?

缺點

  • 侵入性強:微服務的每個事務都必須實現Try/Confirm/Cancel三個方法,增加了開發成本和后期維護改造的成本;
  • 等冪性:為了達到事務的一致性要求,Try/Confirm/Cancel接口必須實現等冪性操作,這增加了實現的復雜性;
  • 事務日志損耗性能:事務管理器需要記錄事務日志,這必定會損耗一定的性能,并可能使得整個TCC事務時間拉長。

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

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

相關文章

STM32+模擬或硬件IIC+SHT20驅動問題:接上拉電阻、BUSY死鎖?

主要問題: 1,使用STM32F103C8T6,模擬IIC,SCL和SDA口配置為推挽輸出上拉,主要是SDA腳,每次都要輸出輸入模式重新配置,雖然也能通信,但不穩定,出錯率大; 2&…

【工業機器視覺】基于深度學習的水表盤讀數識別(3-數據標注與轉換)

【工業機器視覺】基于深度學習的儀表盤識讀(2)-CSDN博客 數據標注 標注擴展 Labelme 和 LabelImg 都是用于創建機器學習和計算機視覺項目所需標注數據的工具。它們都允許用戶通過圖形界面手動標注圖像,但各自有其特點和適用場景。 Labelme…

靜態路由與交換機配置實驗

1.建立網絡拓撲 添加2臺計算機,標簽名為PC0、PC1;添加2臺二層交換機2960,標簽名為S0、S1;添加2臺路由器2811,標簽名為R0、R1;交換機劃分的VLAN及端口根據如下拓撲圖,使用直通線、DCE串口線連接…

【Spark】Spark Join類型及Join實現方式

Spark Join類型 1. Inner Join (內連接) 示例:val result df1.join(df2, df1("id") df2("id"), "inner")執行邏輯:只返回那些在兩個表中都有匹配的行。 2. Left Join (左外連接) 示例:val result df1.jo…

socket UDP 環路回顯的服務端

基于socket通訊的方式&#xff0c;無論用http或者udp或者自定義的協議&#xff0c;程序結構都是類似的。這個以UDP協議為例簡要說明。 #include <stdio.h> // 標準輸入輸出庫 #include <sys/types.h> // 提供了一些數據類型&#xff0c;如ssize_t #include <sy…

Linux:network:添加ip的時候自動添加一個本地路由

文章目錄 問題問題 最近在看一個路由的問題,順便看內核代碼,發現在添加IP的時候,內核會自動添加一個local route。 net/ipv4/devinet.c inet_rtm_newaddr->__inet_insert_ifa /* Send message first, then call notifier.Notifier will trigger FIB update, so thatlis…

Magnet Player:一款基于Web的磁力鏈媒體播放器

Magnet Player&#xff1a;一款基于Web的磁力鏈媒體播放器 項目地址:https://gitcode.com/gh_mirrors/ma/magnet-player 是一個創新的開源項目&#xff0c;它允許用戶直接在瀏覽器中播放磁力鏈&#xff08;Magnet URI&#xff09;內容&#xff0c;無需下載或安裝任何桌面應用…

php:完整部署Grid++Report到php項目,并實現模板打印

一、下載Grid++Report軟件 路徑:開發者安裝包下載 - 銳浪報表工具 二、 安裝軟件 1、對下載的壓縮包運行內部的exe文件 2、選擇語言 3、 完成安裝引導 下一步即可 4、接收許可協議 點擊“我接受” 5、選擇安裝路徑 “瀏覽”選擇安裝路徑,點擊"安裝" 6、完成…

web安全攻防入門教程

Web安全攻防入門教程 Web安全攻防是指在Web應用程序的開發、部署和運行過程中&#xff0c;保護Web應用免受攻擊和惡意行為的技術與策略。這個領域不僅涉及防御措施的實現&#xff0c;還包括通過滲透測試、漏洞挖掘和模擬攻擊來識別潛在的安全問題。 本教程將帶你入門Web安全攻…

前端node環境安裝:nvm安裝詳細教程(安裝nvm、node、npm、cnpm、yarn及環境變量配置)

需求&#xff1a;在做前端開發的時候&#xff0c;有的時候 這個項目需要 node 14 那個項目需要 node 16&#xff0c;我們也不能卸載 安裝 。這豈不是很麻煩。這個時候 就需要 一個工具 來管理我們的 node 版本和 npm 版本。 下面就分享一個 nvm 工具 用來管理 node 版本。 這個…

Unity在運行狀態下,當物體Mesh網格發生變化時,如何讓MeshCollider碰撞體也隨之實時同步變化?

舊版源代碼地址&#xff1a;https://download.csdn.net/download/qq_41603955/90087225?spm1001.2014.3001.5501 舊版效果展示&#xff1a; 新版加上MeshCollider后的效果&#xff1a; 注意&#xff1a;在Unity中&#xff0c;當你動態地更改物體的Mesh時&#xff0c;通常期望…

OpenCV--特征匹配

OpenCV--特征匹配 代碼和筆記 代碼和筆記 import cv2 import numpy as np""" 特征匹配 """""" 暴力特征匹配&#xff1a;使用第一組&#xff08;第一幅圖&#xff09;中的一個特征描述子&#xff0c;使用一些距離計算與第二組中…

什么是自動化辦公

自動化辦公是指使用技術工具或軟件&#xff0c;通過預設流程或腳本&#xff0c;自動執行日常辦公任務&#xff0c;從而提升效率、減少錯誤、節約時間的辦公模式。它適用于需要重復性、規則明確的工作流程&#xff0c;讓員工將精力集中在更具創造性和戰略性的工作上。 自動化辦公…

常見排序算法總結 (四) - 快速排序與隨機選擇

快速排序 算法思想 每一輪在數組相應的范圍上隨機找一個元素進行劃分&#xff0c;將不大于它的所有元素都放到左邊&#xff0c;將大于它的元素都放到右邊。在左右兩個子數組上不斷地遞歸&#xff0c;直到整個數組上有序。 注意&#xff1a;實現時選擇的時參考荷蘭國旗問題優化…

unraid固態硬盤分區格式—默認1MiB對齊

背景 我的unraid中有三個機械硬盤和兩個固態硬盤&#xff0c;其中兩個固態硬盤組成zfs鏡像的cache&#xff0c;防止其中一個硬盤出問題導致數據丟失。然而&#xff0c;今天突然看到機械硬盤的分區格式為GPT 4k&#xff0c;而固態硬盤是MBR 1MiB。想到GPT更加優秀&#xff0c;并…

Flutter 圖片編輯板(一) 事件路由

一個圖片編輯板&#xff0c;有兩部分組成。編輯板和內容項。每一個內容項是被InteractiveViewer修飾的widget&#xff0c;具有縮放偏移的功能。 在圖片編輯板上&#xff0c; 會有多個內容相&#xff0c;圖片或文字&#xff08;添加文字目前還沒做過&#xff09;。 當要編輯其中…

數倉技術hive與oracle對比(一)

準備 包括軟硬件環境、數據、測試數據三方面的準備內容。 環境 虛擬機軟件virtualbox7&#xff0c;同樣的虛擬機配置&#xff1a;內存2G、cpu一核&#xff0c;物理主機同一臺macbookpro&#xff08;13-2020款&#xff09;&#xff0c;所以硬盤IO讀寫速度一致。 綜上&#x…

AR眼鏡_消費級工業AR智能眼鏡主板硬件解決方案

AR眼鏡的研發是一項復雜的軟硬件集成工程&#xff0c;它需要在攝影、音頻、交互和連接等多個方面提供卓越的基礎體驗&#xff0c;因此產品的每個細節都顯得尤為重要。 在設計AR眼鏡時&#xff0c;重量、體積和散熱性能都是必須認真考量的關鍵因素。在芯片平臺的選擇上&#xff…

通信原理概論復習筆記(1)

1 緒論 消息: 通信系統傳輸對象, 信息的載體和物理表現形式. 信息: 消息的有效內容和內涵. 信號: 消息的傳輸載體. 模擬通信: 信源 → \to → 調制器 → \to → 信道(噪聲) → \to → 解調器 → \to → 信宿. 數字通信: 信源 → \to → 信源編碼(壓縮數字化) → \to →…

ASPICE評估如何優化軟件開發、測試和部署流程

ASPICE&#xff08;Automotive SPICE&#xff0c;即汽車軟件過程改進及能力評定&#xff09;評估在提高軟件開發、測試、部署的速度和質量方面發揮著重要作用。以下是ASPICE評估如何具體提高這些環節的具體方式&#xff1a; 一、提高軟件開發效率 標準化流程&#xff1a;ASPIC…