分佈式事務一致性實現的方式總結

  由於最近項目正在作重構,而此次重構實質上比原來更接近於SOA化和微服務的思想。對於咱們金融交易來講,數據結果的準確性是重中之重。因此今天總結一下分佈式事務的實現方法,下次組內週會給你們統一一下概念。算法

  

剛性事務和柔性事務數據庫

  剛性事務:嚴格遵循ACID原則(原子性、一致性、隔離性、持久性)的事務。基本上指的是本地數據庫事務。根據CAP原則,分佈式下的事務都不是剛性事務。網絡

 

  柔性事務:遵循CAP理論或者其變種BASE理論的事務。分佈式事務基本上都是柔性事務。異步

 

  由於剛性事務基本上等價於本地數據庫事務,而柔性事務基本上等價於分佈式事務。只是一個是按照事務嚴格性來區分,一個是按使用場景來區分。因此平時除了用來作對比,不多直接提剛性事務和柔性事務的概念。分佈式

 

分佈式事務理論微服務

  分佈式事務:在分佈式環境下,各個操做步驟並不在同一臺機器上,須要保證全部動做都有一個統一的結果的一組操做。性能

 

  CAP原則(記得在以前的博客中屢次寫過):分佈式環境下,數據一致性、服務可用性、分區容錯性三者最多隻能知足其中兩者。blog

    數據一致性(consistency):這裏的一致性是強一致性,又叫線性一致性。即一個寫操做成功,而讀出的必須是寫操做後的新數據。而寫操做失敗讀出的必須是寫操做前的舊數據。接口

    服務可用性(availability):全部的操做在必定時間內都能獲得響應。事務

    分區容錯性(partition-tolerance):在網絡分區環境下,被分割的節點仍然能對外提供服務。

  

選    擇 說    明
AP 分隔的節點同時對外服務但不能相互通訊,將致使狀態不一致,即不能知足C
CP 網絡分區的狀況下爲達成C,請求只能一直等待,即不知足A
CA 在必定時間內要達到節點狀態一致,要求不能出現網絡分區,則不能知足P

 

  BASE理論:這是基於CAP理論權衡以後的結果。核心思想是即便沒法作到強一致性,但可使用一些技術手段達到最終一致。BASE是Basically Available(基本可用)、Soft state(軟狀態)、Eventually consistent(最終一致性)的縮寫。

  

分佈式事務一致性實現方案

  爲了解決分佈式一致性問題,前人在性能和數據一致性的權衡過程當中總結了許多經典的協議和算法。比較著名的有:2PC、3PC、TCC、Paxos、Raft、Zab、ISR。除了這些以外,業界用的最多的實際上是基於MQ實現的。

   

  2PC(Two Phase Commit)兩階段提交:通常說的兩階段提交是基於XA協議的。另外JTA協議的也比較常見。

  XA是一個分佈式事務協議。它大體分爲兩部分:事務管理器和本地資源管理器。其中本地資源管理器每每由數據庫實現,好比Oracle、DB2都實現了XA接口。MySQL對XA的支持不是很好。而事務管理器做爲全局的調度者,負責各個本地資源的提交和回滾。

   兩階段提交的優勢是:原理簡單、實現方便。缺點是同步阻塞、單點問題、數據不一致。

   

  3PC(Three Phrase Commit)三階段提交:分爲CanCommit、PreCommit、Do Commit 三個階段。就是把兩階段提交的Phase 1分紅兩個,預提交的時候若是有參與者返回No或者超時則中斷事務。

  三階段提交的優勢是下降參與者阻塞範圍,並可以在出現單點故障後繼續達成一致。缺點是由於preCommit階段,在這個階段若是出現網絡分區,協調者沒法與參與者正常通訊,參與者仍然會進行實物提交,形成數據不一致。

 

  TCC(Try-Confirm-Cancel)

    Try:完成全部的檢查,預留必須資源

    Confirm:使用Try階段預留的資源執行業務,若是執行出現異常,要重試

    Cancel:釋放Try階段預留資源

    TCC可以對分佈式事務中的各個資源進行分別鎖定,分別提交與釋放。適用於嚴格一致、執行時間短、實時性要求高的場景。

 

  Paxos算法:以前看過《從Paxos到Zookeeper》那本書,沒怎麼看明白。實現比較複雜,Zookeeper就是用這個來實現的分佈式一致性。Paxos算法、Raft協議和Zab(Zookeeper Atomic Broadcast)協議都是一種經過多數投票來保證主備數據一致性的。

  

  ISR(In-Sync Replicas)機制:Kafka使用了這個機制來保證數據一致性。ISR認爲對於2f+1個副原本說,多數投票機制要求最多隻能容許f個副本發生故障,若是要支持2個副本的容錯,則須要至少維持5個副本。

  

  基本MQ實現是一種異步確保型的實現方案。將同步阻塞的事務變成異步的,避免了對數據庫事務的爭用。

 

跑題時間:

  咖啡就像是有毒的愛情,入口香滑,而後就是心力交瘁、展轉難眠,遠離咖啡~

 

  堅強是最容易的事情,當本身想哭的時候,卻發現沒有一個肩膀能夠靠着哭,就只能將眼淚強忍回去,笑着走進來~

 

  我最愛的人是個人「生死劫」。一輩子的最愛也是一輩子的最壞。當我心懷執念淌過絕情池水,傷痕累累的來到斷念的彼岸。我仍然感激上蒼安排的一切。若是有來世,我依然會相信愛,只是不再要愛上你~

相關文章
相關標籤/搜索