源碼地址:https://github.com/sunpengChina/dog
Dog Tcc是什麼?
- DogTcc是一個2019年3月開源的,基於註解的高性能 分佈式事務 TCC框架。感謝於他的框架設計,可達到2ms/事務,支持鏈式調用,損耗線性增長。
框架特性
- 高速,事務發起方損耗 2.15ms每事務,事務被調方損耗 2.13ms每事務
- 損耗隨事務鏈變寬[A 調用B,C,D,E…],或者變深[A 調用B,B調用C,C調用D…],線性增長
- 對原有服務無侵入,標註是基於方法而不是RPC接口的,可以在需要回滾的最小單位方法上添加標註
- 框架自動實現冪等
- 框架實現分佈式環境下的可重入鎖
- 易用性高,使用者通過標註,和實現指定的回滾和確認接口,即可集成框架
- 節點無本地狀態,部署多臺即可實現集羣,無需多餘配置
- 和協議無關,使用者只要實現事務的協議注入即可集成到框架中,可參照Spring模塊
- 和消息服務器無關,框架提供了消息服務接口,使用者可使用其他消息中間件,可參考zookeeper模塊
- 支持事務鏈,事務鏈長度不影響事務性能
- 故障恢復,任何服務節點丟失都不會影響最終一致性,丟失節點的事務會被同類節點託管,或者在丟失節點啓動時候恢復
- 錯誤通知,對於極端情況,Confirm或者Cancel失敗,系統會通過第三方接口通知,用戶需要實現該接口定義的方法
性能報告
-
測試機配置
- Cpu
cpu family : 6
model : 63
model name : Intel® Xeon® CPU E5-2620 v3 @ 2.40GHz- 操作系統
Linux version 3.10.0-327.el7.x86_64
- 內存
4G
-
啓動配置
-
zookeeper 默認配置啓動
-
註冊中心 和 Server1 Server2 Server3
啓動參數:-Xms256m -Xmx512m
-
-
測試用例 [見Server1工程的Server1ApplicationController]
-
鏈式調用:Server1 調用 Server2 ,Server3 ; Server2 調用 Server3
-
單次調用:Server1 調用 Server3
-
爲了降低業務對框架性能測試的影響,Server2 和 Server3 的業務代碼爲空。
-
Server2 中有一個Call單元
Call(有回滾需求的方法)定義請見: https://github.com/sunpengChina/dog/wiki/DogTcc-architecture
-
Server3 中有兩個Call單元
-
-
性能報告
- [1]非線程5000次非TCC事務調用: 11325ms
- [2]非線程5000次TCC事務單次調用: 34133ms
- [3]10線程,各500次循環,共5000次鏈式,TCC事務調用:49826ms
- [4]10線程,各500次循環,共5000次鏈式,非TCC事務調用:6458ms
- [5]10線程,各500次循環,共5000次,TCC事務單次調用:35566ms
- [6]10線程,各500次循環,共5000次,非TCC事務單次調用:2884ms
-
結論
設tcc單次調用,發起方損耗爲x (ms),call損耗爲y (ms)
- 根據性能報告的[3]和[4],可得 x + 3y = (49826 - 6458)/5000 = 8.67 ms
- 根據性能報告的[5]和[6], 可得 x + 2y = (35566-2884)/5000 = 6.52 ms
- 可得tcc發起方單次損耗爲:2.25 ms ; Call方損耗爲 2.13 ms
快速開始
-
準備zookeeper
wget https://raw.githubusercontent.com/wiki/sunpengChina/dog/zookeeper-3.4.13.zip
解壓文件 unzip zookeeper-3.4.13.zip
進入zk目錄 cd zookeeper-3.4.13/bin
啓動zk服務器 ./zkServer.sh start
打開zk客戶端 ./zkCli.sh
在zk 客戶端中執行 create /dog “dog”
-
下載源碼
進入源碼根目錄,編譯源碼 mvn clean install
-
啓動服務
啓動springCloud配置中心: cd jar -jar eureka/target/eureka-1.0-SNAPSHOT.jar
啓動服務Server1:jar -jar Server1/target/Server1-1.0-SNAPSHOT.jar
啓動服務Server2:jar -jar Server2/target/Server2-1.0-SNAPSHOT.jar
啓動服務Server3:jar -jar Server3/target/Server3-1.0-SNAPSHOT.jar
-
在瀏覽器中測試
http://127.0.0.1:8081/chainTcc 一次鏈式事務調用,檢驗你的系統是否正常部署
http://127.0.0.1:8081/noTcc5000 5000次無事務調用的時間
http://127.0.0.1:8081/singleTcc5000 5000次簡單事務單元的時間
http://127.0.0.1:8081/chainTcc5000thread 10個線程各500次調用TCC鏈式事務,調用需要的時間
http://127.0.0.1:8081/chainNoTcc5000thread 10個線程各500次調用鏈式非TCC事務,調用需要的時間
http://127.0.0.1:8081/singleTcc5000thread 10個線程各500次調用非鏈式TCC事務,調用需要的時間
http://127.0.0.1:8081/singleNoTcc5000thread 10個線程各500次調用非鏈式非TCC事務,調用需要的時間