分布式事務全局一致性面臨挑戰
為實現分布式事務全局數據一致性,我們將面臨如下挑戰:
數據分散
分布式事務需要滿足事務的ACID的特性,而業務數據分散存儲在網絡中的多個節點上。因此,分布式數據庫在進行事務的分發,協同多節點完成業務請求過程中,如何確保所有節點上數據同步更新將是一大挑戰。
網絡延遲與故障
跨網絡多節點需要協調配合,協調能否正常、順利作業是關鍵,這決定了業務數據的一致性和請求響應的及時性。網絡時延、異常、主機故障和操作系統調度異常等不確定因素,都會給分布式事務一致性帶來諸多挑戰。而數據庫需要在異常發生后,能夠快速自愈,并能保證異常期間事務的完整性(不出現數據丟失、錯亂)和一致性將又是另一大挑戰。
并發控制
在多個事務并發執行時,如何避免數據沖突和死鎖也是一大難題。
分布式事務全局一致性實現策略
TeleDB引入全局事務管理節點(GTM),專門處理分布式事務一致性工作。它通過全局時鐘(Global Timestamp)和兩階段提交(Two Phase Commit)兩種策略,使分布式環境下的事務保持一致成為可能。
全局時鐘(Global Timestamp)
全局時鐘在分布式數據庫中的作用是通過提供統一的時間參考,確保系統內各組件協同工作時的時間同步,從而保障數據的一致性和系統的正確運行。如下為全局時鐘的架構和分布式并發記錄結構。
由GTM提供全局唯一的事務id和全局事務快照。當事務執行時,會話攜帶全局事務id,各節點通過全局事務id來判斷數據的可見性。
全局時鐘通過分布式并發記錄來保障各組件協同工作時的時間同步。分布式并發控制核心點如下:
- 邏輯時鐘從零開始內部單向遞增且唯一,由GTM維護,定時和服務器硬件計數器對齊,從而保證時鐘源穩定。
- 多個GTM節點構成集群,主節點對外提供服務;主備之間通過日志同步時間戳狀態,保證GTS核心服務可靠性。
- 單臺物理機每秒能夠處理1200萬QPS,幾乎滿足所有業務場景。
- 段頁式存儲的MVCC是整個并發控制的基礎。同時約定:事務的gts_start > gts_min并且gts_max沒有提交或者gts_start < gts_max才能看到對應的事務。
兩階段提交(Two Phase Commit)
分布式事務執行時,由CN節點發起兩階段提交事務,并協調其它節點(參與者)執行事務,經過表決、執行兩個階段各參與者返回的狀態,決定分布式事務需要提交或回滾。
兩階段提交被認為是一種一致性協議,用來保證分布式系統數據的一致性。絕大部分的關系型數據庫都是采用兩階段提交協議來完成分布式事務處理。
兩階段提交事務在執行時分為兩個階段,第一階段為表決階段Prepare,第二階段為執行階段Commit,由協調者發起,并根據所有參與者返回的狀態,判斷是否需要執行下一階段,Commit提交或回滾事務。
- 表決階段Prapare:所有參與者都將本事務能否成功的信息反饋發給協調者。
- 執行階段Commit:協調者根據所有參與者的反饋,通知所有參與者,步調一致地在所有分支上提交或者回滾。
兩階段提交機制的潛在問題:
- 數據不一致問題:當部分參與者故障,各參與者在兩階段提交事務中的狀態就會出現不一致的情況,如:部分節點commit,部分prepare,或部分commit,部分rollback,這都會導致該事務更新的數據在所有參與者中出現不一致。
- 同步阻塞問題:兩階段提交過程中的一些步驟是同步阻塞的,沒有超時機制,可能會有長時間阻塞的問題。同時,如果異常時,有prepare狀態的兩階段事務殘留,殘留事務仍會持有鎖,會阻塞后續會話對這些數據的訪問和更新。
- 協調節點單點故障問題:如果協調節點故障后短時間不能恢復,參與者的兩階段事務會一直殘留,導致出現數據不一致、資源阻塞的問題。
TeleDB在內核處理機制,以及異常處理兩個角度,對兩階段提交進行了優化,確保在兩階段事務異常時能自動恢復,不會出現上述問題。
-
內核處理機制優化
- 在兩階段事務執行過程中記錄信息,用于異常時恢復殘留的兩階段事務;
- 避免進入“Commit Prepared”的兩階段事務在所有參與節點被回滾。
-
分布式死鎖檢測模塊:該模塊對數據庫狀態進行實時監測,當發現存在長時間等待依賴時自動開啟分布式死鎖檢測,經過節點間信息傳遞和算法分析可快速檢測并解除死鎖環。檢測算法不影響系統查詢效率,用戶對死鎖檢測過程無感知。分布式死鎖主要分為四個模塊,分別為鎖等待依賴關系的管理、線程模型模塊、檢測算法模塊和監控與追蹤模塊。
- 鎖等待依賴關系的管理:對分布式數據庫中出現的長時間等待事務依賴對進行檢測與上報。
- 線程模型模塊:包含DDS專用線程工作模式和方法的設計、實現。
- 檢測算法模塊:分布式死鎖檢測的執行算法,根據上游節點發送的消息進行兩階段算法推演,再發送消息給下游節點。
- 監控與追蹤模塊:包含DDS依賴消息產生和傳播的追蹤日志、各節點依賴可視化、最近死鎖記錄保存。
其優點是內核原生支持、自動檢測并解鎖、分布式算法,需要傳輸的信息量少、網絡資源消耗少、解鎖速度快、無死鎖誤判、支持優先級解鎖和抗丟包性強。
-
異常處理優化:提供兩階段事務的自動處理插件,在監測到兩階段事務殘留時,通過訪問兩階段事務執行過程中記錄的信息,來判斷各個參與節點的狀態,根據狀態參照對應規則,對殘留事務進行清理,恢復各節點數據到全局一致。
| PREPARED狀態 | COMMIT狀態 | ROLLBACK狀態 | 異常階段及原因 | 動作 |
|---|---|---|---|---|
| 有 | 有 | 無 | commit階段異常參與節點故障 | COMMIT剩余事務 |
| 有 | 無 | 有 | prepare階段異常參與節點宕機 | ROLLBACK剩余事務 |
| 有 | 無 | 無 | prepare階段異常發起節點宕機 | ROLLBACK剩余事務 |