分散式事務介紹

来源:https://www.cnblogs.com/qingquanzi/archive/2018/01/08/8241568.html
-Advertisement-
Play Games

公司創立之初,一個web服務和一個資料庫實例即可滿足戶需求。隨著業務量的增長,性能問題就會越來越突出。架構於是變成了多個web服務,和一個讀寫分離的資料庫群( 主多從),這種架構或許也能 撐上千萬的用戶。但隨著進一步發展,會發現業務複雜度越來越高 ,耦合也比較嚴重,而且資料庫也成了性能瓶頸。這時就不 ...


公司創立之初,一個web服務和一個資料庫實例即可滿足戶需求。隨著業務量的增長,性能問題就會越來越突出。架構於是變成了多個web服務,和一個讀寫分離的資料庫群( 主多從),這種架構或許也能 撐上千萬的用戶。但隨著進一步發展,會發現業務複雜度越來越高 ,耦合也比較嚴重,而且資料庫也成了性能瓶頸。這時就不得不面臨分散式改造。將相關業務抽取成獨 的服務和獨立的資料庫。數據量的業務還要進行分庫分表的改造。這就是分散式系統架構。

 

在分散式系統架構中,就不得不面臨分散式事務這一巨大挑戰。 什麼是分散式事務?通俗點說,就是一個大的操作,調用了多個分佈在不同機器上的小的服務。事務要保證這些小的服務,要麼全部執行成功,要麼全部回滾。本質上來說,分散式事務就是為了保證不同資料庫的數據一致性。

 

分散式系統的事務一致性本身就是一個讓人頭疼的難題,沒有一個簡單完美的解決方案能夠適 於所有業務場景。在一致性,高性能和易用性方面 ,往往三者很難兼得。

 

首先,一致性,一個大的操作結束,保證所有小的操作數據協同一致。這裡說的是一致指的是強一致性。目前大部分互聯網公司的分散式事務解決方案,採用的是最終一致性。大都是通過結合消息中間件來實現。比如說,A、B在一個操作事務里,A調用成功後發送一個消息到消息隊列,另一個消費任務負責消費消息,然後執行B操作。這裡有個問題就是,消息可能被重覆消費,所以B操作需要支持冪等性調用,消費任務會一直調用B,直到成功為止,必要時候還需要人工介入。不得不承認,最終一致性是因為解決不了高性能強一致的無奈之舉。

 

其次,高性能。性能很差,自然就沒有實用價值。業界也有像兩步提交這樣的解決方案,如XA。但是並沒有什麼知名互聯網公司在使用 ,究其原因還是性能問題嚴重,多數企業無法接受。所以他們更願意轉而求其次,使用最終一致性解決方案,或者放棄事務人工訂正。

 

最後,易用性。如果非要追求強一致性和高性能,就不得不進行特殊場景特殊處理。但通常會要求業務開發者遵守一定的規則,對業務侵入性很強,也帶來了很大的開發成本。比如有的 案要求資料庫操作必須寫成存儲過程,有的方案要求必須實現它的一堆介面,有的方案必須侵 入業務按照它的套路改造,等等。這都給產品開發、升級、運維帶來困難。理想的方案是對業務無侵入,業務與事務分離,用戶開發僅需要關註於業務本身,事務方面需要做的只是界定事務邊界,事務一致性交給事務中間件處理。

 

看到這裡,你肯定知道:什麼是分散式事務,分散式事務為什麼那麼難解決。所以,如果初入職場者,面試中被問到分散式事務時,不用慌張,這本來就是個世界難題,答不上來也不必灰心,甚至你還可以反問面試官:你們是怎麼解決的。


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

-Advertisement-
Play Games
更多相關文章
  • 當我們的app開發完成之後,無可避免的以後會進行產品升級,那麼我們希望在客戶的手機上讓app進行自動升級,可以分為自動升級和手動升級。 自動升級:一般在客戶app第一次打開首頁的時候。 手動升級:在app界面提供一個升級的入口。 界面效果演示如下: 代碼其實也很簡單,不過針對ios和android要 ...
  • HTTP結構 轉載請註明出處: "HTTP結構簡介" HTTP通信過程包括從客戶端發往伺服器的請求和伺服器返回客戶端的響應,這篇文章就簡單的瞭解一下HTTP請求和響應的結構與協議本身的狀態管理。 用戶HTTP協議交互的信息被稱為HTTP報文,HTTP報文可分為請求報文和響應報文。請求報文包括請求行、 ...
  • 例如: var yearArray = new Array("三二一", "三二一", "學歷", "學歷", "dsa", "das"); $.unique(yearArray); 效果: ...
  • 在ES6中,增加了2個聲明變數的關鍵字:let 和 const。在這裡將詳細介紹let與var的區別、Babel對let的處理以及const的簡單使用。 ...
  • 中小型研發團隊很多,而社區在中小型研發團隊架構實踐方面的探討卻很少。中小型研發團隊特別是 50 至 200 人的研發團隊,在早期的業務探索階段,更多關註業務邏輯,快速迭代以驗證商業模式,很少去關註技術架構。 這時如果繼續按照原有的架構及研發模式,會出現大量的問題,再也無法玩下去了。能不能有一套可直接 ...
  • 由於第三章的內容比較多,這裡我們拆分成兩篇讀書筆記來記錄。上一章我們聊了聊如何資料庫是如何實現存儲和檢索的,今天這篇我們繼續來看看OLTP與OLAP存儲引擎的區別與聯繫。 1.OLTP與OLAP 聯機事務處理過程( O n L ine T ransaction P rocessing)也就是我們通常 ...
  • OCS(online charging system,線上計費系統)在進行雲化改造的過程中,從實用主義角度出發,微服務架構並不是我們的目標。雖然我們也對系統進行了容器化改造(Docker),並根據業務進程的功能將系統分成了好幾類的容器,但這一切多是出於對系統中的某些處理節點進行動態擴縮容的需要,跟微... ...
  • JDBC連接資料庫五步驟: 一、載入驅動 Class.forName(“com.mysql.jdbc.Driver”); 二、建立連接 Connection conn = DriverManager.getConnection(“jdbc:mysql://localhost:8080/資料庫名”,” ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...