【C#編程最佳實踐 十五】DTC使用最佳實踐

最近由於校驗工具出現bug,但無法定位問題,又涉及到數據庫的創建和更新,所以在武哥的幫助下,學習了下DTC,也就是分佈式事務協調管理,主要解決事務完整性問題和提供自動修復功能。當然現在我只涉及到了監測功能,修復功能需要運維的配合。

函數原型

當一個函數對數據庫執行多步操作需要保證其完整性的時候(同時數據的複雜性也會導致某些執行成功,某些失敗,不一定是邏輯錯誤,當然如果百分百執行不到下一步,很有可能邏輯錯誤

fun(storevalue){

  dtc(order1,storevalue)    //初始化參數,如果只有order1得到了增長,則表明 step1fun()執行失敗
  step1fun()===========執行完之後產生參數A

  dtc(order2,storevalue)  //第一步函數執行後參數,如果order1和order2得到了增長,order3沒有增長,則表明 step2fun()執行失敗
  step2fun()===========執行完之後產生參數B

  dtc(order3,storevalue)  //第二步函數執行後參數,如果order1、order2和order3得到了增長,order4沒有增長,則表明 step3fun()執行失敗
  step3fun()===========
  dtc(order4,storevalue) //第三步函數執行後參數,如果order1、order2、order3和order4都得到了增長,則表明 全部執行成功

}

數據巴士

這裏寫圖片描述
上邊的函數部分可以圖形化爲上圖,也就是上下文數據再不斷膨脹,但在每一步執行完時候都會將下一個步驟執行所需的數據序列化存儲到DTC日誌,方便復現當時場景。

線上監測

這裏寫圖片描述

線上發現order1執行了3次,而order2只執行了2次,說明step1fun()有一次執行失敗,同時,order4只執行了1次,說明,step3fun()有兩次執行失敗,當四次執行都成功的時候,每一個order都抵消1

注意:這裏不光是自己的代碼要寫完,還要往配置里加東西,具體來說我從本地代碼往運維的數據庫裏存入數據,運維不管是在什麼環境下,只要有配置文件就可以依賴其從自己的庫裏讀取數據,所以我只需要給運維他需要的配置就行,數據庫(不管是線上還是測試)大家都能看到,他也不用關心我的代碼實現。

如果步驟都執行完了,完成數加1,如果有沒有執行完的,流程中各步數量柱狀圖會有所不同
這裏寫圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章