mysql 分库分表 ~ 柔性事务
一 定義 TCC方案是可能是目前最火的一種柔性事務方案
二 具體 內容 TCC=try(預設)-confrim(應用確認)-canal(回滾取消)
三 目的 解決跨服務調用場景下的分布式事務問題,避免使用XA分步事務導致的鎖爭用和事務堆積問題,用程序設計來實現分布式事務功能
四 具體過程
?1 ) 在階段1:
? 在XA中,各個RM準備提交各自的事務分支,事實上就是準備提交資源的更新操作(insert、delete、update等);而在TCC中,是主業務活動請求(try)各個從業務服務預留資源。
?2) 在階段2:
?XA根據第一階段每個RM是否都prepare成功,判斷是要提交還是回滾。如果都prepare成功,那么就commit每個事務分支,反之則rollback每個事務分支。
?TCC中,如果在第一階段所有業務資源都預留成功,那么confirm各個從業務服務,否則取消(cancel)所有從業務服務的資源預留請求
五 兩者對比
? XA是資源層面的分布式事務,強一致性,在兩階段提交的整個過程中,一直會持有資源的鎖。
? 1 XA事務中的兩階段提交內部過程是對開發者屏蔽的,回顧我們之前講解JTA規范時,通過UserTransaction的commit方法來提交全局事務,這只是一次方法調用,其內部會委派給TransactionManager進行真正的兩階段提交,因此開發者從代碼層面是感知不到這個過程的。而事務管理器在兩階段提交過? 程? 中,從prepare到commit/rollback過程中,資源實際上一直都是被加鎖的。如果有其他人需要更新這兩條記錄,那么就必須等待鎖釋放。
? TCC是業務層面的分布式事務,最終一致性,不會一直持有資源的鎖。
? ?1 TCC中的兩階段提交并沒有對開發者完全屏蔽,也就是說從代碼層面,開發者是可以感受到兩階段提交的存在
? ? ?1 try、confirm/cancel在執行過程中,一般都會開啟各自的本地事務,來保證方法內部業務邏輯的ACID特性。其中:
? ? ? ?1、try過程的本地事務,是保證資源預留的業務邏輯的正確性。
? ? ? ?2、confirm/cancel執行的本地事務邏輯確認/取消預留資源,以保證最終一致性,也就是所謂的補償型事務(Compensation-Based Transactions)。
? 2 由于是多個獨立的本地事務,因此不會對資源一直加鎖。
六 TCC事務的優缺點:
?優點:XA兩階段提交資源層面的,而TCC實際上把資源層面二階段提交上提到了業務層面來實現。有效了的避免了XA兩階段提交占用資源鎖時間過長導致的性能地下問題。?
?缺點:主業務服務和從業務服務都需要進行改造,從業務方改造成本更高。還是航班預定案例,原來只需要提供一個購買接口,現在需要改造成try、confirm、canel3個接口,開發成本高。
七 總結 本文只是簡單的概括 具體可參考
http://www.tianshouzhi.com/api/tutorials/distributed_transaction/388 柔性事務與TCC方案,本文內容來源于此篇文章
轉載于:https://www.cnblogs.com/danhuangpai/p/10670119.html
總結
以上是生活随笔為你收集整理的mysql 分库分表 ~ 柔性事务的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于自增id 你可能还不知道
- 下一篇: day12 装饰器进阶