1. 程式人生 > >《徹底解決分散式系統一致性問題》學習筆記

《徹底解決分散式系統一致性問題》學習筆記

《徹底解決分散式系統一致性問題》直播者:李豔鵬 筆記作者:JKXQJ

一致性問題產生的背景

JEE架構:WEB容器—組合業務邏輯—>EJB容器—資料存ORM—>資料庫
SSH架構:Struts MVC—組合業務邏輯—>Spring容器—Hibernate ORM–>資料庫
Web Service: WebService–> 註冊服務(WSDL、UDDI)–>發現服務(UDDI)–> 服務呼叫(SOAP), 解耦,有中心服務,分散式並不推薦
ESB:企業服務匯流排
微服務:倡導REST服務,JSON傳遞資料,現在主流的。

常見的不一致的問題

  • 轉賬
  • 下訂單和扣庫存
  • 同步超時
  • 非同步回撥超時
  • 調單
  • 系統間狀態不一致
  • 快取和資料庫不一致
  • 本地快取節點間不一致
  • 快取資料結構不一致

酸鹼平衡原理

酸鹼平衡原理 ACID

  • A:原子性
  • C:一致性
  • I: 隔離性
  • D:永續性

酸鹼平衡-帽子 CAP

  • C: 一致性、資料一致更新,所有資料變動都是同步的
  • A: 可用性,好的相應效能,完全的可用性是指在任何故障模型下,服務都可以在有限的時間處理相應
  • P:分割槽容錯性、可靠性

酸鹼平衡-鹼 Base

BA: 基本可用
S: 軟狀態,狀態可以有一段時間不同步
E: 最終一致,最終資料是一致的就可以了,而不是時時保持一致

分散式一致性協議

兩階段

Created with Raphaël 2.1.0協調者協調者參與者1參與者1參與者2參與者2準備寫redo、undo日誌、鎖定資源、執行操作、不提交準備成功準備寫redo、undo日誌、鎖定資源、執行操作、不提交準備成功提交提交操作,釋放資源提交成功提交提交操作,釋放資源提交成功

三階段

Created with Raphaël 2.1.0協調者協調者參與者1參與者1參與者2參與者2詢問校驗、超時導致中止可以執行詢問校驗、超時導致中止可以執行準備寫redo、undo日誌、鎖定資源、執行操作、不提交準備成功準備寫redo、undo日誌、鎖定資源、執行操作、不提交
準備成功提交提交操作,釋放資源提交成功提交提交操作,釋放資源提交成功

TCC

查詢模式

補償模式

定期校對模式

可靠訊息模式

快取一致性模式

同步呼叫模式

訊息模式

同步非同步的抉擇

  • 儘量使用非同步來替換同步操作
  • 能用同步解決的問題就不要引入非同步化

最終一致性模式

微服務超時模式

常見的不一致問題的解決