国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

分布式事務中常見的三種解決方案

開發 前端 分布式
當事務由資源管理器本地管理時被稱作本地事務。本地事務的優點就是支持嚴格的ACID特性,高效,可靠,狀態可以只在資源管理器中維護,而且應用編程模型簡單。但是本地事務不具備分布式事務的處理能力,隔離的最小單位受限于資源管理器。

[[320529]]

 目錄

  • 一、分布式事務前奏
  • 二、柔性事務解決方案架構
  • (一)、基于可靠消息的最終一致性方案概述
  • (二)、TCC事務補償型方案
  • (三)、最大努力通知型
  • 三、基于可靠消息的最終一致性方案詳解
  • (一)、消息發送一致性
  • (二)、保證消息一致的變通做法
  • (三)、常規MQ消息處理流程和特點
  • (四)、消息重復發送問題和業務接口冪等性設計
  • (五)、本地消息服務方案
  • (六)、獨立消息服務方案
  • (七)、消息服務子系統的設計實現

一、分布式事務前奏

事務:事務是由一組操作構成的可靠的獨立的工作單元,事務具備ACID的特性,即原子性、一致性、隔離性和持久性。

本地事務:當事務由資源管理器本地管理時被稱作本地事務。本地事務的優點就是支持嚴格的ACID特性,高效,可靠,狀態可以只在資源管理器中維護,而且應用編程模型簡單。但是本地事務不具備分布式事務的處理能力,隔離的最小單位受限于資源管理器。

全局事務:當事務由全局事務管理器進行全局管理時成為全局事務,事務管理器負責管理全局的事務狀態和參與的資源,協同資源的一致提交回滾。

TX協議:應用或者應用服務器與事務管理器的接口。

XA協議:全局事務管理器與資源管理器的接口。XA是由X/Open組織提出的分布式事務規范。該規范主要定義了全局事務管理器和局部資源管理器之間的接口。主流的數據庫產品都實現了XA接口。XA接口是一個雙向的系統接口,在事務管理器以及多個資源管理器之間作為通信橋梁。之所以需要XA是因為在分布式系統中從理論上講兩臺機器是無法達到一致性狀態的,因此引入一個單點進行協調。由全局事務管理器管理和協調的事務可以跨越多個資源和進程。全局事務管理器一般使用XA二階段協議與數據庫進行交互。

AP:應用程序,可以理解為使用DTP(Data Tools Platform)的程序。

RM:資源管理器,這里可以是一個DBMS或者消息服務器管理系統,應用程序通過資源管理器對資源進行控制,資源必須實現XA定義的接口。資源管理器負責控制和管理實際的資源。

TM:事務管理器,負責協調和管理事務,提供給AP編程接口以及管理資源管理器。事務管理器控制著全局事務,管理事務的生命周期,并且協調資源。

兩階段提交協議:XA用于在全局事務中協調多個資源的機制。TM和RM之間采取兩階段提交的方案來解決一致性問題。兩節點提交需要一個協調者(TM)來掌控所有參與者(RM)節點的操作結果并且指引這些節點是否需要最終提交。兩階段提交的局限在于協議成本,準備階段的持久成本,全局事務狀態的持久成本,潛在故障點多帶來的脆弱性,準備后,提交前的故障引發一系列隔離與恢復難題。

數據一致性理論

BASE理論:BA指的是基本業務可用性,支持分區失敗,S表示柔性狀態,也就是允許短時間內不同步,E表示最終一致性,數據最終是一致的,但是實時是不一致的。原子性和持久性必須從根本上保障,為了可用性、性能和服務降級的需要,只有降低一致性和隔離性的要求。

CAP定理:對于共享數據系統,最多只能同時擁有CAP其中的兩個,任意兩個都有其適應的場景,真是的業務系統中通常是ACID與CAP的混合體。分布式系統中最重要的是滿足業務需求,而不是追求高度抽象,絕對的系統特性。C表示一致性,也就是所有用戶看到的數據是一樣的。A表示可用性,是指總能找到一個可用的數據副本。P表示分區容錯性,能夠容忍網絡中斷等故障。

柔性事務中的服務模式

可查詢操作:服務操作具有全局唯一的標識,操作唯一的確定的時間。

冪等操作:重復調用多次產生的業務結果與調用一次產生的結果相同。一是通過業務操作實現冪等性,二是系統緩存所有請求與處理的結果,最后是檢測到重復請求之后,自動返回之前的處理結果。

TCC操作:

Try階段:嘗試執行業務,完成所有業務的檢查,實現一致性;預留必須的業務資源,實現準隔離性。

Confirm階段:真正的去執行業務,不做任何檢查,僅適用Try階段預留的業務資源,Confirm操作還要滿足冪等性。

Cancel階段:取消執行業務,釋放Try階段預留的業務資源,Cancel操作要滿足冪等性。

TCC與2PC(兩階段提交)協議的區別

TCC位于業務服務層而不是資源層,TCC沒有單獨準備階段,Try操作兼備資源操作與準備的能力,TCC中Try操作可以靈活的選擇業務資源,鎖定粒度。TCC的開發成本比2PC高。實際上TCC也屬于兩階段操作,但是TCC不等同于2PC操作。

可補償操作

Do階段:真正的執行業務處理,業務處理結果外部可見。

Compensate階段:抵消或者部分撤銷正向業務操作的業務結果,補償操作滿足冪等性。

約束:補償操作在業務上可行,由于業務執行結果未隔離或者補償不完整帶來的風險與成本可控。

實際上,TCC的Confirm和Cancel操作可以看做是補償操作。

二、柔性事務解決方案架構

在電商領域等互聯網場景下,傳統的事務在數據庫性能和處理能力上都暴露出了瓶頸。柔性事務有兩個特性:基本可用和柔性狀態。所謂基本可用是指分布式系統出現故障的時候允許損失一部分的可用性。柔性狀態是指允許系統存在中間狀態,這個中間狀態不會影響系統整體的可用性,比如數據庫讀寫分離的主從同步延遲等。柔性事務的一致性指的是最終一致性。

(一)、基于可靠消息的最終一致性方案概述

 

實現:業務處理服務在業務事務提交之前,向實時消息服務請求發送消息,實時消息服務只記錄消息數據,而不是真正的發送。業務處理服務在業務事務提交之后,向實時消息服務確認發送。只有在得到確認發送指令后,實時消息服務才會真正發送。

消息:業務處理服務在業務事務回滾后,向實時消息服務取消發送。消息發送狀態確認系統定期找到未確認發送或者回滾發送的消息,向業務處理服務詢問消息狀態,業務處理服務根據消息ID或者消息內容確認該消息是否有效。被動方的處理結果不會影響主動方的處理結果,被動方的消息處理操作是冪等操作。

成本:可靠的消息系統建設成本,一次消息發送需要兩次請求,業務處理服務需要實現消息狀態回查接口。

優點:消息數據獨立存儲,獨立伸縮,降低業務系統和消息系統之間的耦合。對最終一致性時間敏感度較高,降低業務被動方的實現成本。兼容所有實現JMS標準的MQ中間件,確保業務數據可靠的前提下,實現業務的最終一致性,理想狀態下是準實時的一致性。

(二)、TCC事務補償型方案

 

實現:一個完整的業務活動由一個主業務服務于若干的從業務服務組成。主業務服務負責發起并完成整個業務活動。從業務服務提供TCC型業務操作。業務活動管理器控制業務活動的一致性,它登記業務活動的操作,并在業務活動提交時確認所有的TCC型操作的Confirm操作,在業務活動取消時調用所有TCC型操作的Cancel操作。

成本:實現TCC操作的成本較高,業務活動結束的時候Confirm和Cancel操作的執行成本。業務活動的日志成本。

使用范圍:強隔離性,嚴格一致性要求的業務活動。適用于執行時間較短的業務,比如處理賬戶或者收費等等。

特點:不與具體的服務框架耦合,位于業務服務層,而不是資源層,可以靈活的選擇業務資源的鎖定粒度。TCC里對每個服務資源操作的是本地事務,數據被鎖住的時間短,可擴展性好,可以說是為獨立部署的SOA服務而設計的。

(三)、最大努力通知型

 

實現:業務活動的主動方在完成處理之后向業務活動的被動方發送消息,允許消息丟失。業務活動的被動方根據定時策略,向業務活動的主動方查詢,恢復丟失的業務消息。

約束:被動方的處理結果不影響主動方的處理結果。

成本:業務查詢與校對系統的建設成本。

使用范圍:對業務最終一致性的時間敏感度低。跨企業的業務活動。

特點:業務活動的主動方在完成業務處理之后,向業務活動的被動方發送通知消息。主動方可以設置時間階梯通知規則,在通知失敗后按規則重復通知,知道通知N次后不再通知。主動方提供校對查詢接口給被動方按需校對查詢,用戶恢復丟失的業務消息。

適用范圍:銀行通知,商戶通知。

三、基于可靠消息的最終一致性方案詳解

(一)、消息發送一致性

消息中間件在分布式系統中的核心作用就是異步通訊、應用解耦和并發緩沖(也叫作流量削峰)。在分布式環境下,需要通過網絡進行通訊,就引入了數據傳輸的不確定性,也就是CAP理論中的分區容錯性。

 

消息發送一致性是指產生消息的業務動作與消息發送一致,也就是說如果業務操作成功,那么由這個業務操作所產生的消息一定要發送出去,否則就丟失。

處理方式一

  1. public void completeOrderService() { 
  2.   // 處理訂單 
  3.   order.process(); 
  4.   // 發送會計原始憑證消息 
  5.   pipe.sendAccountingVouchetMessage(); 

在上面的情況中,如果業務操作成功,執行的消息發送之前應用發生故障,消息發送不出去,導致消息丟失,將會產生訂單系統與會計系統的數據不一致。如果消息系統或者網絡異常,也會導致消息發送不出去,也會造成數據不一致。

處理方式二

  1. public void completeOrderService() { 
  2.   // 發送會計原始憑證消息 
  3.   pipe.sendAccountingVouchetMessage(); 
  4.   // 處理訂單 
  5.   order.process(); 

如果將上面的兩個操作調換一下順序,這種情況就會更加不可控了,消息發出去了業務訂單可能會失敗,會造成訂單系統與業務系統的數據不一致。那么JMS標準中的XA協議是否可以保障發送的一致性?

JMS協議標準的API中,有很多以XA開頭的接口,其實就是前面講到的支持XA協議(基于兩階段提交協議)的全局事務型接口。

  1. XAConnection.class 
  2. XAConnectionFactory.class 
  3. XAQueueConnection.class 
  4. XAQueueConnectionFactory.class 
  5. XASession.class 
  6. XATopicConnection.class 
  7. XATopicConnectionFactory.class 
  8. XATopicSession.class 

JMS中的XA系列的接口可以提供分布式事務的支持。但是引用XA方式的分布式事務,就會帶來很多局限性。

要求業務操作的資源必須支持XA協議,但是并不是所有的資源都支持XA協議。

兩階段提交協議的成本。

持久化成本等DTP模型的局限性,例如:全局鎖定、成本高、性能低。

使用XA協議違背了柔性事務的初衷。

(二)、保證消息一致的變通做法

 

發送消息:主動方現將應用把消息發給消息中間件,消息狀態標記為“待確認”狀態。

消息中間件收到消息后,把消息持久化到消息存儲中,但是并不影響被動方投遞消息。

消息中間件返回消息持久化結果,主動方根據返回的結果進行判斷如何進行業務操作處理:

失敗:放棄執行業務操作處理,結束,必要時向上層返回處理結果。

成功:執行業務操作處理。

業務操作完成后,把業務操作結果返回給消息中間件。

消息中間件收到業務操作結構后,根據業務結果進行處理:

失敗:刪除消息存儲中的消息,結束。

成功:更新消息存儲中的消息狀態為“待發送”,然后執行消息投遞。

前面的正向流程都成功之后,向被動方應用投遞消息。

但是在上面的處理流程中,任何一個環節都有可能出現問題。

(三)、常規MQ消息處理流程和特點

 

常規的MQ隊列處理流程無法實現消息的一致性。

投遞消息的本質就是消息消費,可以細化。

(四)、消息重復發送問題和業務接口冪等性設計

 

對于未確認的消息,采用按規則重新投遞的方式進行處理。對于以上流程,消息重復發送會導致業務處理接口出現重復調用的問題。消息消費過程中消息重復發送的主要原因就是消費者成功接收處理完消息后,消息中間件沒有及時更新投遞狀態導致的。如果允許消息重復發送,那么消費方應該實現業務接口的冪等性設計。

(五)、本地消息服務方案

 

實現思路:

主動方應用系統通過業務操作完成業務數據的操作,在準備發送消息的時候將消息存儲在主動方應用系統一份,另一份發送到實時消息服務

被動方應用系統監聽實時消息系統中的消息,當被動方完成消息處理后通過調用主動方接口完成消息確認

主動方接收到消息確認以后刪除消息數據。

通過消息查詢服務查詢到消息被接收之后再規定的時間內沒有返回ACK確認消息就通過消息恢復系統重新發送消息。

優點:

消息的時效性比較高

從應用設計的角度實現了消息數據的可靠性,消息數據的可靠性不依賴于MQ中間件,弱化了對MQ中間件特性的依賴。

方案輕量級,容易實現。

缺點:

與具體的業務場景綁定,耦合性強,不可以共用。

消息數據與業務數據同步,占用業務系統資源。

業務系統在使用關系型數據庫的情況下消息服務性能會受到關系型數據庫的并發性能限制。

(六)、獨立消息服務方案

 

實現思路:

預發送消息:主動方應用系統預發送消息,由消息服務子系統存儲消息,如果存儲失敗,那么也就無法進行業務操作。如果返回存儲成功,然后執行業務操作。

執行業務操作:執行業務操作如果成功的時候,將業務操作執行成功的狀態發送到消息服務子系統。消息服務子系統修改消息的標識為“可發送”狀態。

發送消息到實時消息服務:當消息的狀態發生改變的時候,立刻將消息發送到實時消息服務中。接下來,消息將會被消息業務的消費端監聽到,然后被消費。

消息狀態子系統:相當于定時任務系統,在消息服務子系統中定時查找確認超時的消息,在主動方應用系統中也去定時查找沒有處理成功的任務,進行相應的處理。

消息消費:當消息被消費的時候,向實時消息服務發送ACK,然后實時消息服務刪除消息。同時調用消息服務子系統修改消息為“被消費”狀態。

消息恢復子系統:當消費方返回消息的時候,由于網絡中斷等其他原因導致消息沒有及時確認,那么需要消息恢復子系統定時查找出在消息服務子系統中沒有確認的消息。將沒有被確認的消息放到實時消息服務中,進行重做,因為被動方應用系統的接口是冪等的。

優點:

消息服務獨立部署,獨立維護,獨立伸縮。

消息存儲可以按需選擇不同的數據庫來集成實現。

消息服務可以被相同的的使用場景使用,降低重復建設服務的成本。

從分布式服務應用設計開發角度實現了消息數據的可靠性,消息數據的可靠性不依賴于MQ中間件,弱化了對MQ中間件特性的依賴。

降低了業務系統與消息系統之間的耦合,有利于系統的擴展維護。

缺點:

一次消息發送需要兩次請求。

主動方應用系統需要實現業務操作狀態的校驗與查詢接口。

(七)、消息服務子系統的設計實現

示例消息數據表:

 

 

責任編輯:武曉燕 來源: 架構之家
相關推薦

2019-11-04 08:38:45

分布式事務主流TCC

2025-04-29 04:00:00

分布式事務事務消息

2024-03-26 12:08:53

分布式事務存儲

2019-07-25 15:32:35

分布式事務微服務系統架構

2020-05-28 09:35:05

分布式事務方案

2023-09-14 15:44:46

分布式事務數據存儲

2025-04-28 00:44:04

2010-07-21 13:53:41

SQL Server分

2025-05-07 00:10:00

分布式事務TCC模式

2023-11-30 07:19:08

.NET開源

2021-06-25 10:35:58

分布式代碼Java

2021-09-28 09:43:11

微服務架構技術

2019-01-11 18:22:07

阿里巴巴技術開源

2024-06-13 08:04:23

2022-02-10 08:57:45

分布式線程鎖

2023-09-13 09:52:14

分布式鎖Java

2021-06-28 10:03:44

分布式數據庫架構

2025-08-27 09:11:48

2024-12-09 09:35:00

2019-09-09 10:09:51

分布式事務 數據庫
點贊
收藏

51CTO技術棧公眾號

亚洲欧洲av在线| 天天色图综合网| 特级黄色录像片| 国产精品99久久久久久动医院| 欧美精品videos另类日本| 成人日韩视频| 亚洲天堂第二页| 国产综合色在线观看| 综合欧美国产视频二区| 日本肉肉一区| 久久久久999| 精品国产三级| 欧美亚洲国产日本| 婷婷综合五月| 久久精品午夜一区二区福利| 日韩av一区二区在线影视| 欧美亚洲视频一区| 97超碰欧美中文字幕| 男人的天堂www| 天天色天天操综合| 亚洲91av| 久久精品99久久香蕉国产色戒| 老司机成人在线| 亚洲一区二区三区久久| 亚洲日本视频| 中文字幕在线中文字幕日亚韩一区| 国产99精品在线观看| 久久精品免费网站| 午夜激情一区二区| 午夜在线激情影院| 久久天天躁狠狠躁老女人| 久久91成人| 久热国产精品视频一区二区三区| 国产一区二三区| 久草在线免费二| 欧美日韩在线精品一区二区三区激情| tube8在线hd| 欧美激情女人20p| 你懂的国产精品永久在线| 一区二区三区偷拍| 中文字幕日韩精品一区| jyzzz在线观看视频| 中文字幕成人精品久久不卡| 要久久电视剧全集免费| 国产美女精品久久久| 国产成人在线电影| av高清资源| 亚洲精品在线观看网站| 综合欧美亚洲| 精品福利影视| 久久久亚洲欧洲日产国码αv| 有码在线播放| 亚洲性无码av在线| 亚洲成人精品| 中文字幕中文字幕在线中一区高清 | 一级中文字幕一区二区| 日本综合在线| 色妞色视频一区二区三区四区| 欧美一级精品| 麻豆视频传媒入口| 精品久久久国产| 国产精品99久久久久久董美香 | 欧美 日韩 国产在线| 26uuu国产日韩综合| 嫩草在线视频| 性色av一区二区三区在线观看| 性伦欧美刺激片在线观看| 亚洲一区日韩精品| 精品国产伦一区二区三区观看方式| 高清精品xnxxcom| 亚洲在线色站| 色诱亚洲精品久久久久久| 国产一精品一av一免费爽爽| 蜜桃久久精品乱码一区二区 | 久久亚洲影视| 男女裸体影院高潮| 欧美日韩国产成人在线91| 玖玖玖免费嫩草在线影院一区| 亚洲成人自拍视频| 欧美午夜片在线免费观看| 日韩一区二区三区高清在线观看| 日韩精品久久久毛片一区二区| 亚洲不卡在线观看| 成人av婷婷| 久久99中文字幕| 日韩一区二区电影网| 五月天激情综合网| 国产又猛又黄的视频| 日韩电视剧在线观看免费网站| 欧美另类视频| 性生大片免费观看性| 色综合视频一区中文字幕| 韩国欧美一区二区| 国产三级在线播放| 国产精品免费视频一区二区 | 亚洲国产免费av| 国产精品成人一区二区网站软件| 五月婷婷导航| 精品自在线视频| 成+人+亚洲+综合天堂| 波多野结衣乳巨码无在线观看| 国产一区福利视频| 福利视频导航一区| 日本道不卡免费一区| 老司机aⅴ毛片免费观看| 欧美精品videosex极品1| 久久久午夜精品理论片中文字幕| 不卡福利视频| 亚洲欧美国产不卡| 精品国产乱码久久久久久牛牛 | av免费观看久久| 亚洲成人av福利| 加勒比久久综合| eeuss在线观看| 国产精品一区二区三区久久| 亚洲精品五月天| 天天躁日日躁狠狠躁欧美巨大小说| 国产免费人做人爱午夜视频| 久久久av一区| 欧美激情一区不卡| 欧美午夜寂寞| 大胆高清日本a视频| 国产精品爱啪在线线免费观看| 国产欧美一区二区三区网站 | 激情五月色综合亚洲小说| 久久97精品久久久久久久不卡| 91捆绑美女网站| 日韩区一区二| 污视频网站免费| 国产一区二区色| 在线观看视频一区二区欧美日韩| av成人天堂| 国产盗摄——sm在线视频| 香蕉精品视频在线| 日韩中文字幕免费看| 国产日韩av一区| 亚洲婷婷影院| 亚洲图区欧美| 欧美精品人人做人人爱视频| 欧美mv和日韩mv国产网站| 看电视剧不卡顿的网站| 深夜视频一区二区| av在线播放亚洲| 欧美亚洲激情在线| 欧美三级欧美成人高清www| 亚洲精品美女91| 中文字幕人成乱码在线观看| 国产主播在线看| 国产精品免费久久久久久| 欧美日本精品一区二区三区| 国产一区二区免费看| 国产一区二区三区亚洲| 天堂中文在线8| 日韩欧美一区二区三区四区五区| 国产一区二区三区中文| 综合色天天鬼久久鬼色| 欧美成人中文| 在线视频超级| 777永久免费网站国产| 国产精品一区二| 中文字幕精品久久久久| 一区二区在线免费| 久久九九精品| xvideos.蜜桃一区二区| 欧美精品少妇| 少妇人妻无码专区视频| 成人免费网视频| 亚洲一区二区国产| 午夜久久久久久| 国产精品99久久不卡二区| 亚洲免费福利一区| h片视频在线观看| 九七影院97影院理论片免费| 国外成人在线视频网站| 在线播放日韩欧美| 欧美性高潮床叫视频| 国产成人在线视频播放| 成人情趣视频| 欧美美女日韩| 三级在线视频| 青青草国产精品视频| 成人免费视频网址| 在线观看成人黄色| 日韩欧美国产黄色| 久久亚洲综合色一区二区三区| 欧美一区成人| 亚洲一区二区小说| 日本在线观看免费| 免费的av电影| 裸体大乳女做爰69| 99porn视频在线| 欧美成人免费全部观看天天性色| 在线亚洲高清视频| 欧美国产精品v| 久久精品国产久精国产| 色999日韩| 亚洲综合色婷婷在线观看| 美洲精品一卡2卡三卡4卡四卡| 粉嫩tv在线播放| 成人免费毛片网|