本申請涉及計算機,尤其涉及一種多數據庫事務處理方法及相關裝置。
背景技術:
1、在數據庫事務處理領域,單服務單庫的事務操作可以直接通過單機事務機制保證事務處理的acid特性(atomicity原子性、consistency一致性、isolation隔離性和持久性durability)。隨著企業數據庫架構的升級、業務表數據遷移需求的產生,出現了單服務多庫的事務場景。
2、為保證多庫事務的處理可靠性,當前通常采用業務層手動實現逆流程回滾的方案。例如,對于結算收單服務,在將流水表從數據庫sqlserver遷移至數據庫tidb后,該服務需要操作數據庫sqlserver存儲結算數據,操作數據庫tidb存儲結算流水,使得原本的單庫事務拆分為跨sqlserver與tidb的多庫事務,基于現有方案,需要在結算數據保存失敗的情況下,手動執行sql回滾結算流水表的數據。
3、由于多庫事務涉及多個數據庫,使得應用現有方案進行回滾時可能發生某個數據庫回滾失敗導致的數據不一致問題,并且由于每個回滾任務都需要根據業務場景進行定制化開發,無通用復用能力,開發工作量大。
技術實現思路
1、鑒于上述問題,本申請提供了一種多數據庫事務處理方法及相關裝置,以解決單服務的多數據庫事務處理任務中的數據不一致問題。
2、具體方案如下:
3、本申請第一方面提供一種多數據庫事務處理方法,包括:
4、生成待處理事務的全局事務id;所述待處理事務由單服務發起且涉及多個數據庫;
5、從分布式鎖集群獲取所述全局事務id對應的分布式鎖;
6、向事務協調器發送攜帶所述全局事務id的事務開始消息,以使所述事務協調器在超時未收到所述待處理事務的事務終態消息且滿足預設條件時根據所述全局事務id進行異常兜底處理,所述預設條件包括所述全局事務id對應的分布式鎖未被釋放或所述全局事務id對應的分布式鎖被所述事務協調器獲?。?/p>
7、執行構成所述待處理事務的各個單庫事務,并通過回滾日志記錄執行過程;所記錄的回滾日志包括所述全局事務id和數據信息,所述數據信息用于指示執行單庫事務對應的數據操作前后的數據情況;
8、若各個單庫事務均執行成功,則向所述待處理事務涉及的各個數據庫寫入已提交的事務終態;否則依據所記錄的回滾日志進行全局回滾處理,向所述待處理事務涉及的各個數據庫寫入已回滾的事務終態;
9、釋放所述全局事務id對應的分布式鎖,并向所述事務協調器發送攜帶所述全局事務id的事務終態消息。
10、在一種可能實現中,執行構成所述待處理事務的各個單庫事務,并通過回滾日志記錄執行過程,包括:
11、執行非終態事務,并通過回滾日志記錄所述非終態事務的執行過程;
12、在各個非終態事務均執行完成后,對終態事務對應的數據庫執行所述終態事務對應的數據操作,并向所述終態事務對應的數據庫寫入所述終態事務對應的事務狀態,以供所述事務協調器在進行所述異常兜底處理時確定全局事務走向;
13、其中,所述終態事務為構成所述待處理事務的各個單庫事務中最后一個執行的單庫事務,所述非終態事務為構成所述待處理事務的各個單庫事務中除所述終態事務外的單庫事務。
14、在一種可能實現中,對于各個非終態事務的每一個事務,當前事務的執行過程包括:
15、對所述當前事務對應的數據庫執行所述當前事務對應的數據操作;
16、在執行所述當前事務對應的數據操作之后,查詢所述當前事務所要處理的目標數據的操作后狀態,并向所述當前事務對應的數據庫的回滾日志中寫入查詢到的操作后狀態;
17、在完成操作后狀態寫入后,提交所述當前事務;
18、在所述當前事務對應的數據操作為修改操作或刪除操作的情況下,所述當前事務的執行過程還包括:
19、在執行所述當前事務對應的數據操作之前,查詢所述目標數據的舊數據,并向所述當前事務對應的數據庫的回滾日志中寫入查詢到的舊數據。
20、在一種可能實現中,在所述當前事務對應的數據操作為新增操作的情況下,所記錄的所述當前事務的回滾日志還包括所述當前事務對應的數據庫回寫的自增id。
21、在一種可能實現中,在所述當前事務對應的數據操作為新增操作的情況下,所記錄的所述當前事務的回滾日志還包括所述當前事務對應的數據庫回寫的自增id。
22、在一種可能實現中,所述事務協調器的兜底回滾時長小于所述分布式鎖集群的預設上鎖時長。
23、在一種可能實現中,所述向事務協調器發送攜帶所述全局事務id的事務開始消息包括:
24、通過消息中間件向事務協調器發送攜帶所述全局事務id的事務開始消息;
25、向所述事務協調器發送攜帶所述全局事務id的事務終態消息包括:
26、通過所述消息中間件向所述事務協調器發送攜帶所述全局事務id的事務終態消息。
27、本申請第二方面提供一種多數據庫事務處理設備,包括至少一個處理器和與所述處理器連接的存儲器,其中:
28、所述存儲器用于存儲計算機程序;
29、所述處理器用于執行所述計算機程序,以實現上述第一方面所述的多數據庫事務處理方法。
30、本申請第三方面提供一種存儲介質,所述存儲介質承載有一個或多個計算機程序,當所述一個或多個計算機程序被電子設備執行時,能夠使所述電子設備實現上述第一方面所述的多數據庫事務處理方法。
31、本申請第四方面提供一種計算機程序產品,包括計算機可讀指令,當所述計算機可讀指令在電子設備上運行時,能夠使所述電子設備實現上述第一方面所述的多數據庫事務處理方法。
32、借由上述技術方案,本申請在處理多數據庫事務時,先生成待處理事務的全局事務id,再從分布式鎖集群獲取所述全局事務id對應的分布式鎖,向事務協調器發送攜帶所述全局事務id的事務開始消息,以使所述事務協調器在超時未收到所述待處理事務的事務終態消息且滿足預設條件時根據所述全局事務id進行異常兜底處理,而后執行構成所述待處理事務的各個單庫事務,并通過回滾日志記錄執行過程,若各個單庫事務均執行成功,則向所述待處理事務涉及的各個數據庫寫入已提交的事務終態,若任一單庫事務執行失敗,則依據所記錄的回滾日志進行全局回滾處理,向所述待處理事務涉及的各個數據庫寫入已回滾的事務終態,最后,釋放所述全局事務id對應的分布式鎖,并向所述事務協調器發送攜帶所述全局事務id的事務終態消息。
33、本申請通過全局分布式鎖避免了數據并發以及臟讀臟寫問題,通過記錄回滾日志實現了數據的可回溯回滾,通過tc異常兜底流程解決了由服務器宕機等因素導致的事務異常中斷問題,依此解決了現有手動回滾方案導致的數據一致性風險問題。
1.一種多數據庫事務處理方法,其特征在于,該方法包括:
2.根據權利要求1所述的多數據庫事務處理方法,其特征在于,執行構成所述待處理事務的各個單庫事務,并通過回滾日志記錄執行過程,包括:
3.根據權利要求2所述的多數據庫事務處理方法,其特征在于,對于各個非終態事務的每一個事務,當前事務的執行過程包括:
4.根據權利要求3所述的多數據庫事務處理方法,其特征在于,在所述當前事務對應的數據操作為新增操作的情況下,所記錄的所述當前事務的回滾日志還包括所述當前事務對應的數據庫回寫的自增id。
5.根據權利要求1-4中任一項所述的多數據庫事務處理方法,其特征在于,在存在執行失敗的單庫任務的情況下,該方法還包括:
6.根據權利要求5所述的多數據庫事務處理方法,其特征在于,所述事務協調器的兜底回滾時長小于所述分布式鎖集群的預設上鎖時長。
7.根據權利要求1-4中任一項所述的多數據庫事務處理方法,其特征在于,所述向事務協調器發送攜帶所述全局事務id的事務開始消息包括:
8.一種多數據庫事務處理設備,其特征在于,包括至少一個處理器和與所述處理器連接的存儲器,其中:
9.一種存儲介質,其特征在于,所述存儲介質承載有一個或多個計算機程序,當所述一個或多個計算機程序被電子設備執行時,能夠使所述電子設備實現如權利要求1至7中任意一項所述的多數據庫事務處理方法。
10.一種計算機程序產品,其特征在于,包括計算機可讀指令,當所述計算機可讀指令在電子設備上運行時,能夠使所述電子設備實現如權利要求1至7中任意一項所述的多數據庫事務處理方法。