分佈式事務一致性

數據庫ACID(酸):原子性,一致性,隔離性,持久性。數據庫

CAP理論:一個分佈式系統最多能知足一致性C,可用性A,分區容錯性P,三項中的兩個。網絡

C:更新操做成功且返回請求方完成後,全部節點在同一時間的數據徹底一致。分佈式

A:用戶在訪問數據時能獲得及時地響應。ide

P:分佈式系統在某節點或網絡分區故障時,依然能夠對外提供知足CA的服務。日誌

BASE(鹼)理論:作不到強一致性,但應該作到最終一致性。事務

BA:基本可用。分佈式系統出現故障時,容許損失部分可用性,保證核心可用。同步

S:柔性狀態。容許中間態,且不影響總體可用性。如MySQL主從複製有延時,就是柔性狀態的體現。it

E:最終一致性。全部數據副本通過必定時間後,最終達到一致。其必致使S。class

Paxos協議:在多機間通訊不存在僞造篡改的前提下,可經過Paxos協議達成一致性。成本是發給Paxos系統的信息,至少同步發給一半以上的機器確認後,纔算成功。請求

柔性事務解決分佈式事務問題:

一、引入日誌和補償機制。事物日誌記錄事物開始、結束狀態、事務參與者信息。參與者節點根據需求作重試或回滾日誌。

根據日誌記錄找回事務執行的當前狀態,並據此決定是重試仍是回滾。實踐中,其問題在於對異常處理和回滾支持不夠,出了問題,人力維護的成本高。

二、可靠消息傳遞。

網絡通訊危險期:請求發出後,響應返回前,網絡發生了故障,請求方不知服務端是否已成功地處理了請求。

節點間網絡通信,其結果有三:成功、失敗、未知。

爲保證消息傳遞的可靠性,消息至少發一次,有可能發屢次消息。消費者程序必須實現冪等。以前文章有述。

三、無鎖。加鎖會形成瓶頸,不加鎖,又必須保證隔離性。

A:不回滾。事物發生異常也不回滾,經過各類補償機制,繼續走正向流程,即使中間狀態對外可見。由於不回滾,也不會形成髒讀。

髒讀:讀取未提交。

不可重複讀:先後屢次讀取,數據不一致。讀取已提交。

幻讀:先後屢次讀取,數據總量不一致。

髒讀和不可重複讀針對的都是更新操做,幻讀針對的是插入操做。

B:變化明細表。下單扣庫存,不扣減商品表的庫存數,而是增長一條預減記錄。付款成功後再扣減商品表的庫存數。付款前須要實際庫存數的公式以下:

實際庫存數=商品表庫存數-商品預減記錄的庫存數總和。

C:樂觀鎖。版本號、時間戳。前文有述。

相關文章
相關標籤/搜索