華為云微服務引擎CSE事務方案一:TCC機制的數據最終一致性處理

      網友投稿 1216 2022-05-28

      華為云微服務引擎CSE事務方案一:TCC機制的數據最終一致性處理

      限時免費領取華為云微服務

      TCC機制的數據最終一致性處理

      在一個長事務中,一個由兩臺服務器一起參與的事務,服務器A發起事務,服務器B參與事務,B的事務需要人工參與,所以處理時間可能很長。如果按照ACID的原則,要保持事務的隔離性、一致性,A發起的事務中使用到的事務資源將會被鎖定,不允許其他應用訪問到事務過程中的中間結果,直到整個事務被提交或者回滾。這就造成事務A中的資源被長時間鎖定,系統將不可用。

      為了解決在事務運行過程中大顆粒度資源鎖定的問題,業界提出一種新的事務模型,它是基于業務層面的事務定義。鎖粒度完全由業務自己控制。它本質是一種補償的思想。它把事務運行過程分成Try、Confirm/Cancel兩個階段。在每個階段的邏輯由業務代碼控制。這樣就事務的鎖粒度可以完全自由控制。業務可以在犧牲強隔離性的情況下,獲取更高的性能。

      Try:嘗試執行業務

      完成所有業務檢查(一致性)

      預留必須業務資源(準隔離性)

      Confirm:確認執行業務

      真正執行業務

      不作任何業務檢查

      只是用Try階段預留的業務資源

      Confirm操作滿足冪等性

      Cancel:取消執行業務

      釋放Try階段預留的業務資源

      Cancel操作滿足冪等性

      與2PC協議比較

      位于業務服務層而非資源層

      沒有單獨的準備(Prepare)階段,Try操作兼備資源操作與準備能力

      Try操作可以靈活選擇業務資源的鎖定粒度

      較高開發成本

      POM中引入TCC事務對應的依賴包:

      ????com.huawei.paas.cse ????cse-handler-tcc

      在microservice.yaml中添加進處理鏈:

      cse: ??...... ??handler: ????chain: ??????Provider: ????????default:?perf-stats,tcc-server ??......

      定義服務實現類

      @RpcSchema(schemaId?=?"helloworld") public?class?TccHelloworldImpl?implements?ITccHelloworld?{ ????private?static?final?Logger?LOGGER?=?LoggerFactory.getLogger(TccHelloServiceImpl.class); ????@Override ????@TccTransaction(confirmMethod?=?"confirm",?cancelMethod?=?"cancel") ????public?String?sayHello(String?name)?{ ????????LOGGER.info("Try?say?hello?from?client,?{}",?name); ????????return?"Hello,?"?+?name; ????} ????public?String?confirm(String?name)?{ ????????LOGGER.info("Confirm?say?hello?from?client,?{}",?name); ????????return?null; ????} ????public?String?cancel(String?name)?{ ????????LOGGER.info("Cancel?say?hello?from?client,?{}",?name); ????????return?null; ????} }

      在支持TCC事務的方法上打上@TccTransaction標注,并注明confirmMethod和cancelMethod方法。confirmMethod和cancelMethod的參數和返回值必須和服務提供函數相同。如果Try正常執行,confirm方法也會被執行。如果Try拋出異常,則cancel會被執行。

      注意:

      如果不使用標注的方式發布服務,那么需要在實現類上面打上@Component標注。

      TCC事務對業務邏輯定義需要有一定要求,TCC操作應該支持冪等性原則,否則容

      易產生過度補償等問題。

      TCC支持運行在微服務多實例中,其原理是將事務數據統一存儲到數據庫中,TCC組件提供統一的事務存儲接口,以便開發對接不同的數據庫,只需要繼承實現com.huawei.paas.cse.tcc.repository.CachableTransactionRepository類即可完成多實例TCC支持;也可參考com.huawei.paas.cse.tcc.repository包中簡單的數據庫存儲類實現,已簡單實現了Jdbc/redis/ZooKeeper的對接。

      yaml文件中bizkeeper和tcc-server配置先后順序會引起前臺儀表盤不同的計數方式。若將tcc-server配置在bizkeeper前,儀表盤中顯示server端一次調用,反之儀表盤顯示兩次調用,因為bizkeeper的計數在tcc-sever的打點前則會有2次restful接口調用。

      TCC配置在microservice.yaml文件中,相關配置項如下。

      配置項

      默認值

      取值范圍

      是否必選

      含義

      cse.tcc.transaction.repository

      com.huawei.paas.cse.tcc.repository.FileSystemTransactionRepository

      true/false

      事務存儲倉庫

      cse.tcc.transaction.repository.file.path

      tcc

      -

      使用文件系統存儲事務時,指定文件存儲根路徑,默認在當前目錄的tcc文件夾下

      cse.tcc.transaction.recover

      true

      true/false

      是否啟動恢復機制

      立即體驗華為微服務CSE:https://console.huaweicloud.com/cse/?region=cn-north-1#/cse/home

      了解詳情:https://www.huaweicloud.com/product/cse.html

      微服務 ServiceComb 微服務引擎 CSE

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:進程間通信之內存映射區筆記
      下一篇:云端大事件|華為云服務器升級提速,全力助戰“雙11”
      相關文章
      亚洲欧美aⅴ在线资源| 久久精品国产99国产精品亚洲| 亚洲精品国产av成拍色拍| 亚洲an日韩专区在线| 亚洲精品在线播放| 亚洲视频免费播放| 91亚洲自偷手机在线观看| 亚洲黄色免费网址| 亚洲综合成人网在线观看| 久久亚洲精品国产精品| 亚洲国产精品久久久久久| 亚洲一本综合久久| 337p日本欧洲亚洲大胆艺术| 麻豆亚洲av熟女国产一区二| 亚洲理论在线观看| 亚洲人成影院在线高清| 国产成人精品日本亚洲网址| 国产亚洲中文日本不卡二区| 亚洲精品国产摄像头| 国产精品观看在线亚洲人成网| 国产偷国产偷亚洲高清在线| 午夜在线亚洲男人午在线| 亚洲国产成人影院播放| 中文字幕亚洲第一| 亚洲国产成人片在线观看| 香蕉视频在线观看亚洲| 亚洲视频在线免费播放| 91亚洲国产成人久久精品| 亚洲三级在线视频| 亚洲一区二区三区写真| 亚洲AV永久无码精品放毛片| 亚洲AV蜜桃永久无码精品| 成人午夜亚洲精品无码网站| 亚洲成AV人在线观看天堂无码| 亚洲日韩区在线电影| 亚洲免费在线视频播放| 亚洲色在线无码国产精品不卡| 亚洲欧美在线x视频| 国产亚洲精品看片在线观看| 亚洲第一AAAAA片| 亚洲精品视频在线播放|