分散式事務以及鎖
阿新 • • 發佈:2018-12-18
標題格
1、非公平鎖
2、TCC分散式事務
1、非公平鎖
在加鎖過程,執行緒1執行,執行緒2處於等待佇列。 執行緒1執行結束,結果執行緒3搶先於執行緒2進行。這就是非公平鎖的簡單含義。
在ReentrantLock lock = new ReentrantLock()預設的就是非公平鎖,建構函式中加入true:ReentrantLock lock = new ReentrantLock(true)。
公平鎖原則就是執行緒3就緒後,會先檢視等待佇列是否有執行緒,有就排隊。
2、TCC分散式事務
使用springcloud微服務,也有可能各個服務之間,沒有形成一個整體的事務
分步實現:
1)、try階段:多個服務之間,在操作的時候對資料庫的操作都是一個"預"操作階段,鎖定某個資源,凍結某部分資源等(把改變的資料先存
臨時表)
2)、confirm階段:如果服務全部通過,依靠TCC分散式事務框架來執行---加入一個confirm類,提供一個介面,將剛剛的臨時表資料,變為對
資料庫真實的操作。(完成所有邏輯)
3)、Cancel階段:如果某個服務掛了---也是提供一個介面,將臨時表中的資料,恢復到原資料庫中。(回滾所有邏輯)
該事務適用於同步操作
參考:純潔的微笑、石杉的架構筆記、java版web專案、架構師之路、springForAll社群等公眾號。