<kbd id="5sdj3"></kbd>
<th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>

    分布式架構系列 - 分布式事務 01(基礎篇)

    共 3028字,需瀏覽 7分鐘

     ·

    2020-08-18 00:38

    閱讀全文,約 10?分鐘


    這是江帥帥的第027篇文章

    1、什么是事務?

    一般的事務,指的是本地事務,單機上的事務。事務提供了一種機制,能夠將一組操作放在一個不可分割的、獨立的執(zhí)行單元中,其中所有的操作要么被完全執(zhí)行,要么完全失敗。也就是,當其中一個操作執(zhí)行失敗的時候,都會讓整個事務回滾。

    2、什么是全局事務?

    全局事務是全局事務管理來實現全局管理。

    假設有一個事務管理器,多個資源管理器在工作,事務管理器主要控制全局事務,管理事務和協調參與的資源,協同資源的一致提交和回滾等;資源管理器就控制和管理資源。

    這里涉及到兩個協議:TX 協議和 XA 協議。

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

    XA 協議:全局事務管理器和資源事務管理器的接口。XA 協議是 X/Open 組織提出的分布式事務的規(guī)范,當下主流的關系型數據庫產品都實現了 XA 接口,它是雙向的系統(tǒng)接口,為事務管理器和 N 個資源管理器提供通信橋梁。

    在分布式系統(tǒng)中,需要引入一個單點來對兩臺機器進行協調,因為它們無法達到一致的狀態(tài),也就是 XA 需要引入事務管理器。這時,全局管理器負責管理和協調的事務,就能跨越多個資源和進程。

    3、什么是事務的 ACID 特性?

    事務的 ACID 特性,特指本地事務的特性。分布式事務是多個事務的組合,也基本能滿足 ACID,其中一致性是強一致性,為了保證數據一致性或完整性。由于分布式系統(tǒng)規(guī)模不小,也會越來越復雜,當需要達成強一致性將要耗費的時間會更長。后來出現了 BASE 理論,采用最終一致性來代替強一致性。

    另外,隔離性是一種嚴格意義上的隔離,串行執(zhí)行的多個事務互不干擾,能夠保證數據的安全性,但性能很低,隔離級別和數據庫的性能是成反比的。數據庫的隔離級別有四種:Read uncommitted(讀未提交)、Read committed(讀提交)、Repeatable read(重復度)、Serializable(序列化)。

    原子性(Atomicity):事務是一個不能分割的執(zhí)行單元,只有兩種狀態(tài),要么全部執(zhí)行成功,要么全部不執(zhí)行。如果事務中的出現任何一個操作失敗,整個事務就失敗,將會被回滾到之前的狀態(tài)。

    一致性(Consistency):事務在操作前到操作后,數據的完整性保持一致沒有被破環(huán)。

    隔離性(Isolation):如果系統(tǒng)內存在多個事務,且并發(fā)執(zhí)行,但他們的執(zhí)行是相互獨立且不會相互干擾,某個事務內部的操作和數據,其他事務不可干涉。

    持久性(Durability):當一個事務完成后,處理好的結果也將在數據庫永久保存下來,哪怕系統(tǒng)出現崩潰、宕機,在系統(tǒng)恢復且能重新被訪問,一樣能看到事務提交的結果。

    4、什么是分布式事務?

    簡單理解,分布式事務是在分布式系統(tǒng)中的本地事務,指在多節(jié)點、多機器、多服務的環(huán)境中涉及的事務操作。

    核心點,分布式事務主要是解決在分布式系統(tǒng)環(huán)境下,組合事務的一致性問題。

    目前,主要結合消息中間件共同處理相關操作,MQ 能實現異步通信、解耦和并發(fā)緩沖等問題。因為 MQ 擁有高并發(fā)、高吞吐能力,又能緩沖消息、靈活調整消息的處理效率,這就可以提升系統(tǒng)的并發(fā)量。

    5、如何實現分布式事務?

    常見實現方式有遵從 ACID 的強一致性方式和遵從 BASE 理論的最終一致性方式,分別如下:

    1)兩階段提交協議

    2)三階段提交協議

    3)基于消息的最終一致性

    5.1 兩階段提交

    基于 XA 協議的兩階段提交協議(Two-phase Commit Protocol, 2PC)方法,主要是 XA 能分離兩部分來看,全局事務管理器和資源事務管理器。它具有能協調多個資源的機制,在 TM(事務管理器) 和 RM(資源管理器) 之間采取兩階段提交的方案來解決一致性問題。

    TM 充當協調者,它會根據所有參與的 RM 的操作結果,來判斷和控制是否需要最終提交。這過程會先經過投票,然后提交兩個階段。

    過程很簡單,TM 向 RM 發(fā)起準備操作的請求,然后等 RM 的響應。當 RM 接收到請求之后,會去執(zhí)行請求中的事務操作,注意,這里單個 RM 沒那么快提交,只會先記錄日志信息,然后發(fā)送 Yes/No 給 TM,表示成功/終止操作指令。當所有 RM 都發(fā)送 Yes 的時候,才進入最終提交階段,等提交完成后,整個事務就結束了。

    從上圖可以看到,協調者下發(fā)請求事務操作,參與者將操作的結果返回協調者,根據所有參與者的最終反饋結果來判斷是要提交呢?還是回滾呢?

    5.2 兩階段提交事務解決方案的利弊

    1)滿足了事務的 ACID 的特性;

    2)在執(zhí)行過程中,2PC是反伸縮模式的,所有參與的節(jié)點都是事務阻塞型的,當業(yè)務規(guī)模越來越大的時候,局限性會更明顯。參與者會一直持有資源直到整個分布式事務結束;

    3)容易出現單點故障問題,2PC 類似于集中式算法,萬一 TM 發(fā)生故障,RM 會去等 TM 的消息,然后會導致整個系統(tǒng)都處于停滯狀態(tài)。

    4)還有可能出現數據不一致的問題,萬一網絡抖動,網絡局部異常現象,就只有部分 RM 接收到提交請求并執(zhí)行操作,其他未接到提交請求的 RM 就不會執(zhí)行事務提交操作,很明顯的數據不一致問題。

    5.3 三階段提交

    為了解決上面兩階段提交會遇到的同步阻塞、數據不一致問題,出現了三階段提交協議(Three-phase commit protocol, 3PC),是一套改進方案,因為三階段擁有超時機制和多了一個準備階段。

    超時機制很好理解,在 TM 和 RM 之間引入超時機制,如果在規(guī)定時間內沒有收到來自其他節(jié)點的響應信息,那么就會根據當下的狀態(tài)來執(zhí)行提交或者回滾操作。

    另外多出來的一個準備階段,其實是 3PC 把 2PC 一分為二,簡單看就是:可以提交、預備提交、執(zhí)行提交三個階段。用這種方式來保證在最后提交之前,各個 RM 節(jié)點的狀態(tài)都是一致的。

    主要來看下“預備提交”階段。

    分兩種情況,RM 返回的是 Yes,還是 No,然后再決定是否進行預備提交的操作。

    如果返回 Yes,那也就是說能夠去提交,接著正常的往下走,提交就是了。大致流程是先發(fā)送預備提交請求,進入預備提交階段;然后執(zhí)行事務操作,在日志中記錄相關信息;最后事務執(zhí)行成功了,得到 ACK 響應反饋,開始進入等待最后的操作指令。

    如果返回 No,說明沒戲,直接執(zhí)行中斷事務的操作。大致流程是先發(fā)送中斷請求;然后中斷事務操作。

    5.4 基于消息的最終一致性

    因為 2PC 和 3PC 都會去鎖定資源,就會降低系統(tǒng)性能,而且也沒解決數據不一致的問題。

    那應該怎么辦?回到我們在上面介紹的“什么是分布式事務?”,簡單提過,實際上需要結合消息中間件來共同處理相關操作,通過消息、日志等方式異步執(zhí)行,因為它們可以存儲在本地文件、數據庫或者 MQ 中,加上重試機制,就是基于分布式消息的最終一致性方式來實現分布式事務解決方案。

    在分布式事務中,只有當所有的事務都成功了,整個業(yè)務流程才能跑通,分布式事務的一致性是實現分布式事務的關鍵點。


    公眾號:江帥帥(ID:NXJSS666)

    CSDN 博客:江帥帥


    長按二維碼關注
    愿一個熱愛技術的靈魂,給你帶來更多驚喜文章。

    ? 感謝你的閱讀!
    瀏覽 27
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報
    評論
    圖片
    表情
    推薦
    點贊
    評論
    收藏
    分享

    手機掃一掃分享

    分享
    舉報

    <kbd id="5sdj3"></kbd>
    <th id="5sdj3"></th>

  • <dd id="5sdj3"><form id="5sdj3"></form></dd>
    <td id="5sdj3"><form id="5sdj3"><big id="5sdj3"></big></form></td><del id="5sdj3"></del>

  • <dd id="5sdj3"></dd>
    <dfn id="5sdj3"></dfn>
  • <th id="5sdj3"></th>
    <tfoot id="5sdj3"><menuitem id="5sdj3"></menuitem></tfoot>

  • <td id="5sdj3"><form id="5sdj3"><menu id="5sdj3"></menu></form></td>
  • <kbd id="5sdj3"><form id="5sdj3"></form></kbd>
    91探花国产视频 | 免费看黄色录像 | 一级国产欧美成人A片 | 小泽玛利亚黑人初体验 | 国产精品嫩草影院 |