本發(fā)明涉及數(shù)據(jù)處理,尤其是涉及一種分布式事務(wù)處理系統(tǒng)和方法。
背景技術(shù):
1、隨著互聯(lián)網(wǎng)技術(shù)的快速發(fā)展,分布式系統(tǒng)已成為大規(guī)模數(shù)據(jù)處理和服務(wù)的首選架構(gòu)。然而分布式系統(tǒng)中的事務(wù)處理問題一直是技術(shù)難題之一。在分布式系統(tǒng)中,事務(wù)處理是一個(gè)復(fù)雜且關(guān)鍵的問題。傳統(tǒng)的xa事務(wù)協(xié)議雖然能夠提供強(qiáng)一致性保證,但在處理大量并發(fā)事務(wù)時(shí),其性能瓶頸和復(fù)雜性限制了其在大型分布式系統(tǒng)中的應(yīng)用。因此急需一種能夠結(jié)合xa事務(wù)優(yōu)點(diǎn),同時(shí)提高并發(fā)性能和降低復(fù)雜性的分布式事務(wù)處理方案。
技術(shù)實(shí)現(xiàn)思路
1、針對(duì)以上至少一個(gè)技術(shù)問題,本發(fā)明實(shí)施例提供一種分布式事務(wù)處理系統(tǒng)和方法。
2、第一方面,本發(fā)明實(shí)施例提供的分布式事務(wù)處理系統(tǒng)包括事務(wù)協(xié)調(diào)器、事務(wù)管理器和多個(gè)資源管理器;其中:
3、所述事務(wù)管理器用于:在具有業(yè)務(wù)處理需求時(shí),向所述事務(wù)協(xié)調(diào)器注冊(cè)全局事務(wù);
4、所述事務(wù)協(xié)調(diào)器用于:為所述全局事務(wù)創(chuàng)建全局事務(wù)標(biāo)識(shí);在所述全局事務(wù)標(biāo)識(shí)下為每一個(gè)分支事務(wù)創(chuàng)建對(duì)應(yīng)的分支事務(wù)標(biāo)識(shí);
5、所述資源管理器用于:針對(duì)所述業(yè)務(wù)處理需求,向所述事務(wù)協(xié)調(diào)器注冊(cè)所述全局事務(wù)下的分支事務(wù);獲取所述業(yè)務(wù)處理需求在該資源管理器對(duì)應(yīng)的分支事務(wù)中的業(yè)務(wù)處理語句,執(zhí)行所述業(yè)務(wù)處理語句,得到更新后業(yè)務(wù)數(shù)據(jù),根據(jù)所述更新后業(yè)務(wù)數(shù)據(jù)和更新前業(yè)務(wù)數(shù)據(jù)生成回滾日志,將所述更新后業(yè)務(wù)數(shù)據(jù)和所述回滾日志提交給數(shù)據(jù)庫,以完成該資源管理器在第一階段的提交操作,并釋放提交操作所用到的資源;
6、所述事務(wù)協(xié)調(diào)器還用于:判斷所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)在第一階段的提交操作是否均成功;若均成功,則通知所述事務(wù)管理器,以使所述事務(wù)管理器發(fā)起第二階段的全局提交確認(rèn)請(qǐng)求;在接收到所述全局提交確認(rèn)請(qǐng)求后,則異步通知所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)對(duì)應(yīng)的各個(gè)資源管理器將所述回滾日志進(jìn)行刪除操作。
7、在一個(gè)實(shí)施例中,每一個(gè)資源管理器執(zhí)行的所述執(zhí)行所述業(yè)務(wù)處理語句,得到更新后業(yè)務(wù)數(shù)據(jù),根據(jù)所述更新后業(yè)務(wù)數(shù)據(jù)和更新前業(yè)務(wù)數(shù)據(jù)生成回滾日志,包括:根據(jù)所述業(yè)務(wù)處理語句查找所述業(yè)務(wù)處理語句對(duì)應(yīng)的更新前業(yè)務(wù)數(shù)據(jù),將所述更新前業(yè)務(wù)數(shù)據(jù)保存為更新前鏡像,執(zhí)行所述業(yè)務(wù)處理語句得到更新后業(yè)務(wù)數(shù)據(jù),將所述更新后業(yè)務(wù)數(shù)據(jù)保存為更新后鏡像,并將所述更新前鏡像和所述更新后鏡像保存為回滾日志。
8、在一個(gè)實(shí)施例中,每一個(gè)資源管理器還用于:在得到所述回滾日志時(shí),還生成行鎖,并通過所述行鎖將所述回滾日志進(jìn)行鎖定,將所述行鎖與所述更新后業(yè)務(wù)數(shù)據(jù)和所述回滾日志一并提交給數(shù)據(jù)庫;其中,所述回滾日志在鎖定狀態(tài)下無法通過所述回滾日志進(jìn)行回滾操作。
9、在一個(gè)實(shí)施例中,所述更新后業(yè)務(wù)數(shù)據(jù)存儲(chǔ)在所述數(shù)據(jù)庫中的業(yè)務(wù)表中,所述回滾日志存儲(chǔ)在所述數(shù)據(jù)庫中的日志表中,所述行鎖存儲(chǔ)在所述數(shù)據(jù)庫中的鎖表中。
10、在一個(gè)實(shí)施例中,所述事務(wù)協(xié)調(diào)器還用于:在異步通知所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)對(duì)應(yīng)的各個(gè)資源管理器將所述回滾日志進(jìn)行刪除操作時(shí),通知所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)對(duì)應(yīng)的各個(gè)資源管理器將行鎖進(jìn)行刪除操作。
11、在一個(gè)實(shí)施例中,所述事務(wù)協(xié)調(diào)器還用于:若至少一個(gè)分支事務(wù)在第一階段的提交操作未成功,則通知所述事務(wù)管理器,以使所述事務(wù)管理器發(fā)起第二階段的全局回滾請(qǐng)求;在接收到所述全局回滾請(qǐng)求后,通知所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)對(duì)應(yīng)的各個(gè)資源管理器,以使各個(gè)資源管理器通過自己的所述行鎖將自己的所述回滾日志打開,依據(jù)自己的所述回滾日志生成反向的業(yè)務(wù)處理語句,執(zhí)行反向的業(yè)務(wù)處理語句得到更新前業(yè)務(wù)數(shù)據(jù),并刪除自己的所述回滾日志和自己的所述行鎖。
12、在一個(gè)實(shí)施例中,所述資源管理器還用于:在依據(jù)自己的回滾日志生成反向的業(yè)務(wù)處理語句之前,判斷所述數(shù)據(jù)庫中的當(dāng)前業(yè)務(wù)數(shù)據(jù)與所述回滾日志中的更新后鏡像是否一致;若一致,則依據(jù)自己的回滾日志生成反向的業(yè)務(wù)處理語句;否則,通知人工進(jìn)行數(shù)據(jù)回滾操作。
13、在一個(gè)實(shí)施例中,所述資源管理器還用于:在進(jìn)行回滾操作后,將所述數(shù)據(jù)庫中對(duì)應(yīng)的所述更新后業(yè)務(wù)數(shù)據(jù)、所述回滾日志和所述行鎖進(jìn)行刪除。
14、在一個(gè)實(shí)施例中,所述業(yè)務(wù)處理需求需要多個(gè)微服務(wù)實(shí)現(xiàn),每一個(gè)微服務(wù)對(duì)應(yīng)一個(gè)資源管理器;在所述業(yè)務(wù)處理需求在實(shí)現(xiàn)過程中調(diào)用每一個(gè)微服務(wù)時(shí),該微服務(wù)對(duì)應(yīng)的資源管理器會(huì)向所述事務(wù)協(xié)調(diào)器注冊(cè)分支事務(wù)。
15、根據(jù)第二方面,本發(fā)明實(shí)施例提供的分布式事務(wù)處理方法基于第一方面提供的分布式事務(wù)處理系統(tǒng)實(shí)現(xiàn),所述方法包括:
16、s110、通過所述事務(wù)管理器在具有業(yè)務(wù)處理需求時(shí),向所述事務(wù)協(xié)調(diào)器注冊(cè)全局事務(wù);通過所述事務(wù)協(xié)調(diào)器為所述全局事務(wù)創(chuàng)建全局事務(wù)標(biāo)識(shí);
17、s120、通過所述資源管理器針對(duì)所述業(yè)務(wù)處理需求向所述事務(wù)協(xié)調(diào)器注冊(cè)所述全局事務(wù)下的分支事務(wù);通過所述事務(wù)協(xié)調(diào)器為所述全局事務(wù)標(biāo)識(shí)下為每一個(gè)分支事務(wù)創(chuàng)建對(duì)應(yīng)的分支事務(wù)標(biāo)識(shí);
18、s130、通過所述資源管理器獲取所述業(yè)務(wù)處理需求在該資源管理器對(duì)應(yīng)的分支事務(wù)中的業(yè)務(wù)處理語句,執(zhí)行所述業(yè)務(wù)處理語句,得到更新后業(yè)務(wù)數(shù)據(jù),根據(jù)所述更新后業(yè)務(wù)數(shù)據(jù)和更新前業(yè)務(wù)數(shù)據(jù)生成回滾日志,將所述更新后業(yè)務(wù)數(shù)據(jù)和所述回滾日志提交給數(shù)據(jù)庫,以完成該資源管理器在第一階段的提交操作,并釋放提交操作所用到的資源;
19、s140、通過所述事務(wù)協(xié)調(diào)器判斷所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)在第一階段的提交操作是否均成功;若均成功,則通知所述事務(wù)管理器,以使所述事務(wù)管理器發(fā)起第二階段的全局提交確認(rèn)請(qǐng)求;在接收到所述全局提交確認(rèn)請(qǐng)求后,則異步通知所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)對(duì)應(yīng)的各個(gè)資源管理器將所述回滾日志進(jìn)行刪除操作。
20、本發(fā)明實(shí)施例提供的分布式事務(wù)處理系統(tǒng)和方法,在具有業(yè)務(wù)處理需求時(shí),所述事務(wù)管理器向所述事務(wù)協(xié)調(diào)器注冊(cè)全局事務(wù),這樣所述事務(wù)協(xié)調(diào)器為所述全局事務(wù)創(chuàng)建全局事務(wù)標(biāo)識(shí);所述資源管理器針對(duì)所述業(yè)務(wù)處理需求向所述事務(wù)協(xié)調(diào)器注冊(cè)所述全局事務(wù)下的分支事務(wù),這樣所述事務(wù)協(xié)調(diào)器為所述全局事務(wù)標(biāo)識(shí)下為每一個(gè)分支事務(wù)創(chuàng)建對(duì)應(yīng)的分支事務(wù)標(biāo)識(shí)。所述資源管理器在獲取到所述業(yè)務(wù)處理需求在該資源管理器對(duì)應(yīng)的分支事務(wù)中的業(yè)務(wù)處理語句后,執(zhí)行所述業(yè)務(wù)處理語句,得到更新后業(yè)務(wù)數(shù)據(jù),根據(jù)所述更新后業(yè)務(wù)數(shù)據(jù)和更新前業(yè)務(wù)數(shù)據(jù)生成回滾日志,將所述更新后業(yè)務(wù)數(shù)據(jù)和所述回滾日志提交給數(shù)據(jù)庫,以完成該資源管理器在第一階段的提交操作,并釋放提交操作所用到的資源;所述事務(wù)協(xié)調(diào)器判斷所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)在第一階段的提交操作是否均成功;若均成功,則通知所述事務(wù)管理器,這樣所述事務(wù)管理器發(fā)起第二階段的全局提交確認(rèn)請(qǐng)求;在接收到所述全局提交確認(rèn)請(qǐng)求后,則異步通知所述全局事務(wù)標(biāo)識(shí)下的各個(gè)分支事務(wù)標(biāo)識(shí)對(duì)應(yīng)的各個(gè)分支事務(wù)對(duì)應(yīng)的各個(gè)資源管理器將所述回滾日志進(jìn)行刪除操作。由于在第一階段中生成了回滾日志,而且在第一階段提交后會(huì)立馬釋放分支事務(wù)鎖定的資源,可見資源不需要鎖定到第二階段,而是在有了回滾日志之后在第一階段就釋放對(duì)資源的鎖定,降低了鎖范圍,提高效率。即使第二階段發(fā)生異常需要回滾,只需找到回滾日志并反解析成sql來達(dá)到回滾目的。而且各個(gè)資源管理器異步刪除所述回滾日志,提高處理效率??梢?,各個(gè)分支事務(wù)的操作可以并行執(zhí)行,因此可以提高分布式事務(wù)處理系統(tǒng)的并發(fā)性能。整個(gè)過程基于上述三種核心組件實(shí)現(xiàn),各個(gè)組件的功能不同且分工明確,可以降低分布式事務(wù)處理的復(fù)雜度。本發(fā)明實(shí)施例適用于對(duì)性能和穩(wěn)定性要求較高的場景,改善傳統(tǒng)的兩階段提交協(xié)議中的阻塞和性能開銷問題,同時(shí)保證分布式事務(wù)的一致性。