《分散式設計模式—分散式事務》

来源:https://www.cnblogs.com/L10086/archive/2019/08/19/11378609.html
-Advertisement-
Play Games

分散式事務的挑戰 在多個服務、資料庫和消息代理之間維持數據的一致性的傳統方式是採用分散式事務。分散式的事實標註是XA、XA採用了兩階段提交老保證事務中的所有參與方同時完成提交,或者失敗時同時回滾。應用程式的整個技術棧需要滿足XA標準。 許多新技術,包括NoSQLshujk ,liru MongoDB ...


作者:h-松
鏈接:https://juejin.im/post/5d5569466fb9a06af629a9ab

分散式事務的挑戰

在多個服務、資料庫和消息代理之間維持數據的一致性的傳統方式是採用分散式事務。分散式的事實標註是XA、XA採用了兩階段提交老保證事務中的所有參與方同時完成提交,或者失敗時同時回滾。應用程式的整個技術棧需要滿足XA標準。

許多新技術,包括NoSQLshujk ,liru MongoDB和Cassandra並不支持XA標準的分散式事務。同樣,一些流行的消息代理如RabbitMQ和Apache Kafka也不支持分散式事務。如果你堅持在微服務中使用分散式事務,那麼不得不放棄使用這些流行的資料庫或消息代理。

saga

將跨越多個服務的每個業務事務作為一個SAGA實現。SAGA是一系列本地事務。每個本地事務更新資料庫併發布消息或事件以觸發SAGA中的下一個本地事務。如果本地事務由於違反業務規則而失敗,那麼SAGA將執行一系列補償事務,以撤消前面的本地事務所做的更改。

《分散式設計模式—分散式事務》

 

有兩種協調方式:

  • 協同-每個本地事務發佈觸發其他服務中本地事務的域事件
  • 編排-編排器(對象)告訴參與者要執行的本地事務

協同式

《分散式設計模式—分散式事務》

 

編排

《分散式設計模式—分散式事務》

 

saga這種模式有以下好處:

它使應用程式能夠跨多個服務維護數據一致性,而無需使用分散式事務 此解決方案有以下缺點:

編程模型更複雜。例如,開發人員必須設計補償事務,以顯式地撤消在SAGA前面所做的更改。 還需要解決以下問題:

為了可靠,服務必須自動更新其資料庫併發布消息/事件。它不能使用跨越資料庫和消息代理的分散式事務的傳統機制。相反,它必須使用下麵列出的模式之一。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 前言 項目中需要驗證登錄用戶身份是否過期,是否有許可權進行操作,所以需要根據後臺返回不同的狀態碼進行判斷。 第一次使用攔截器,文章中如有不對的地方還請各位大佬幫忙指正謝謝。 正文 axios的攔截器分為請求攔截器和響應攔截器兩種。我一般把攔截器寫在main.js里。 請求攔截器 響應攔截器 這兩種攔截 ...
  • 來博客園是比較激動地,主要是想通過播客記錄自己的學習歷程,掌握的知識點,遇到的疑難,認識更多的朋友,分享更多的知識和技能。 歷經很久的糾結,終於正式下定決心轉行前端。問朋友,問同學,問老師,問網友最後覺得這是比較適合自己的路。目前是在做自動化方面的工作,薪資雖還行,但沒啥技術含量和發展空間,思慮良久 ...
  • 用for迴圈或者forEach遍曆數組的話,在刪除第一個元素的時候,會導致數組改變,從而導致splice中的i不是想要的i,解決方法是用filter或者逆向迴圈 1、使用filter 2、使用逆向迴圈 let arr = [2, 3, 5, 7] for (let i = arr.length - ...
  • 問題:由於業務需要,我們需要判斷圖片能否正常的載入,如果未正常載入的話,需要顯示一張預設圖片; 方案:1,由於後臺返回的是一個圖片id數組,例如 imgList=['343313131','21333413244','3312w232211'],圖片的完整路徑應為http://公司伺服器地址/xxx ...
  • Redux是一個可預測的狀態容器,提供可預測的狀態管理。 什麼是狀態?狀態其實也就是數據,管理狀態也就是對數據的管理。那麼什麼是可預測的狀態管理呢?能夠監聽數據的變化,獲取變化的來源,在發生變化時可以觸發某些動作,即為狀態管理(個人理解)。 如上所示,就是一個最簡單的狀態管理,實現了數據基本的管理, ...
  • 在標簽中經常會用到alt標簽,這對於seo的優化是有一定的幫助。 ...
  • 本篇筆記只敘述 var 與 let 的區別 var 是可以進行變數的提升的,好比先定義一個變數,不指定類型,後面再用 var 來聲明它,於是它從無類型變成了有類型,但是這樣是不好的 當你使用 var 時,可以根據需要多次聲明相同名稱的變數,但是 let 不能。 而對面 let 來說,它更像我們學的 ...
  • jQueryt靜態方法詳解 ==> each ==> map ==> trim ==> isArray ==> isFunction ==> isWindow ==> holdReady 一,each方法 註:為了更好的展示,首先創建一個數組和一個對象 (let 與 arr 區別詳解見 JavaSc ...
一周排行
    -Advertisement-
    Play Games
  • 1. 說明 /* Performs operations on System.String instances that contain file or directory path information. These operations are performed in a cross-pla ...
  • 視頻地址:【WebApi+Vue3從0到1搭建《許可權管理系統》系列視頻:搭建JWT系統鑒權-嗶哩嗶哩】 https://b23.tv/R6cOcDO qq群:801913255 一、在appsettings.json中設置鑒權屬性 /*jwt鑒權*/ "JwtSetting": { "Issuer" ...
  • 引言 集成測試可在包含應用支持基礎結構(如資料庫、文件系統和網路)的級別上確保應用組件功能正常。 ASP.NET Core 通過將單元測試框架與測試 Web 主機和記憶體中測試伺服器結合使用來支持集成測試。 簡介 集成測試與單元測試相比,能夠在更廣泛的級別上評估應用的組件,確認多個組件一起工作以生成預 ...
  • 在.NET Emit編程中,我們探討了運算操作指令的重要性和應用。這些指令包括各種數學運算、位操作和比較操作,能夠在動態生成的代碼中實現對數據的處理和操作。通過這些指令,開發人員可以靈活地進行算術運算、邏輯運算和比較操作,從而實現各種複雜的演算法和邏輯......本篇之後,將進入第七部分:實戰項目 ...
  • 前言 多表頭表格是一個常見的業務需求,然而WPF中卻沒有預設實現這個功能,得益於WPF強大的控制項模板設計,我們可以通過修改控制項模板的方式自己實現它。 一、需求分析 下圖為一個典型的統計表格,統計1-12月的數據。 此時我們有一個需求,需要將月份按季度劃分,以便能夠直觀地看到季度統計數據,以下為該需求 ...
  • 如何將 ASP.NET Core MVC 項目的視圖分離到另一個項目 在當下這個年代 SPA 已是主流,人們早已忘記了 MVC 以及 Razor 的故事。但是在某些場景下 SSR 還是有意想不到效果。比如某些靜態頁面,比如追求首屏載入速度的時候。最近在項目中回歸傳統效果還是不錯。 有的時候我們希望將 ...
  • System.AggregateException: 發生一個或多個錯誤。 > Microsoft.WebTools.Shared.Exceptions.WebToolsException: 生成失敗。檢查輸出視窗瞭解更多詳細信息。 內部異常堆棧跟蹤的結尾 > (內部異常 #0) Microsoft ...
  • 引言 在上一章節我們實戰了在Asp.Net Core中的項目實戰,這一章節講解一下如何測試Asp.Net Core的中間件。 TestServer 還記得我們在集成測試中提供的TestServer嗎? TestServer 是由 Microsoft.AspNetCore.TestHost 包提供的。 ...
  • 在發現結果為真的WHEN子句時,CASE表達式的真假值判斷會終止,剩餘的WHEN子句會被忽略: CASE WHEN col_1 IN ('a', 'b') THEN '第一' WHEN col_1 IN ('a') THEN '第二' ELSE '其他' END 註意: 統一各分支返回的數據類型. ...
  • 在C#編程世界中,語法的精妙之處往往體現在那些看似微小卻極具影響力的符號與結構之中。其中,“_ =” 這一組合突然出現還真不知道什麼意思。本文將深入剖析“_ =” 的含義、工作原理及其在實際編程中的廣泛應用,揭示其作為C#語法奇兵的重要角色。 一、下劃線 _:神秘的棄元符號 下劃線 _ 在C#中並非 ...