一種數(shù)據(jù)同步裝置和方法
【技術(shù)領域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領域,尤其涉及一種數(shù)據(jù)同步裝置和方法。
【背景技術(shù)】
[0002]隨著互聯(lián)網(wǎng)業(yè)務的迅猛發(fā)展,如大型的電商系統(tǒng)、社交平臺系統(tǒng)、運營商信息、通信技術(shù)(Informat1n Communicat1n Technology,ICT)系統(tǒng)、都在享受信息和流量洪流所帶來的商業(yè)利潤增長的同時,面臨著海量用戶、高并行等技術(shù)問題的挑戰(zhàn)。一方面需要系統(tǒng)能夠快速響應日新月異的業(yè)務需求,另一方面能夠保證系統(tǒng)的高可用性和安全性。因此傳統(tǒng)的系統(tǒng)架構(gòu)在這個業(yè)務需求的驅(qū)動下,都在逐步的向互聯(lián)網(wǎng)化的架構(gòu)演進。在這個演進的過程中,采用分布式架構(gòu),是一個核心的理念。
[0003]在一般的大型系統(tǒng)的實際場景中,系統(tǒng)架構(gòu)會通過讀寫分離、分庫、服務化對等集群方式實現(xiàn)系統(tǒng)的水平可擴展和容量的擴容。在此架構(gòu)下必然會需要將管理系統(tǒng)(面向運營人員的管理系統(tǒng))產(chǎn)生的數(shù)據(jù)變更信息同步到生產(chǎn)系統(tǒng)(面向終端用戶的業(yè)務承載系統(tǒng)),而生產(chǎn)系統(tǒng)多為分布式集群,一個消息需要分解為多個子消息,將一個同步操作變成多個異步的同步操作。這樣就使得一個原子操作變成多個原子操作,必然會存在事務上的不一致性,就需要這些子消息能夠在一個父消息事務上保持同時生效且當部分失敗后時能夠?qū)崿F(xiàn)彌補操作或回滾操作。
[0004]目前分布式系統(tǒng)中保證消息同步和事務一致性的方法是消息推送模式的消息同步技術(shù),如圖1所示,消息推送模式的消息同步技術(shù)由一個中轉(zhuǎn)的數(shù)據(jù)同步系統(tǒng)負責接收來自管理系統(tǒng)的數(shù)據(jù)變更消息,并通過異步模式將消息拆分為多個子消息,分別通過接口調(diào)用方式將消息同步到多個生產(chǎn)集群中。由于現(xiàn)實情況下生產(chǎn)集群的接口一般不會支持事務能力,所以對于部分節(jié)點失敗時,需要由中轉(zhuǎn)的同步系統(tǒng)進行重試操作,直到成功或達到重試上限。這里就需要生產(chǎn)集群的接口支持冪等性(即同樣的消息重復調(diào)用的結(jié)果一致)。如果整個事務失敗時,需要中轉(zhuǎn)的同步系統(tǒng)記錄錯誤日志或?qū)⑹⌒畔⒎答伣o管理系統(tǒng),由管理系統(tǒng)修改數(shù)據(jù)變更狀態(tài)為失敗。但是這種方法存在一定的不足,如當整個事務失敗時,部分成功的節(jié)點中就會存在臟數(shù)據(jù),存在數(shù)據(jù)不一致的問題,不能真正實現(xiàn)消息在事務層面上的一致性。
【發(fā)明內(nèi)容】
[0005]本發(fā)明實施例提供一種數(shù)據(jù)同步裝置和方法,以使分布式系統(tǒng)中消息同步和事務一致性更完善。
[0006]本發(fā)明實施例提供的具體技術(shù)方案如下:
[0007]第一方面,提供一種數(shù)據(jù)同步裝置,包括存儲單元、管理單元和操作單元,其中:
[0008]所述存儲單元,用于存儲管理系統(tǒng)發(fā)送的數(shù)據(jù)變更消息;
[0009]所述管理單元,用于按照所述存儲單元中存儲數(shù)據(jù)變更消息的先后順序,依次讀取數(shù)據(jù)變更消息,并根據(jù)讀取的數(shù)據(jù)變更消息的事務狀態(tài)向操作單元下發(fā)針對所述讀取的數(shù)據(jù)變更消息的事務操作指令,所述事務狀態(tài)用于描述所述數(shù)據(jù)變更消息所處的處理階段;
[0010]所述操作單元,用于通過調(diào)用各個生產(chǎn)集群中與管理單元下發(fā)的事務操作指令對應的指令接口,將管理單元下發(fā)的事務操作下發(fā)到所述各個生產(chǎn)集群,并接收各個生產(chǎn)集群對本次下發(fā)的事務操作指令的執(zhí)行結(jié)果,將所述執(zhí)行結(jié)果反饋至管理單元;
[0011]所述管理單元,還用于基于接收的各個生產(chǎn)集群對本次下發(fā)的針對所述數(shù)據(jù)變更消息的事務操作指令的執(zhí)行結(jié)果形成事務處理結(jié)果,并反饋至管理系統(tǒng)。
[0012]結(jié)合第一方面,在第一方面的第一種可能的實現(xiàn)方式中,所述管理單元根據(jù)讀取的數(shù)據(jù)變更消息的事務狀態(tài)向操作單元下發(fā)針對所述讀取的數(shù)據(jù)變更消息的事務操作指令時,具體用于:
[0013]所述管理單元在讀取的數(shù)據(jù)變更消息的事務狀態(tài)為事務初始狀態(tài)時,則向操作單元下發(fā)針對所述讀取的數(shù)據(jù)變更消息的嘗試指令;
[0014]所述管理單元在讀取的數(shù)據(jù)變更消息的事務狀態(tài)為事務成功狀態(tài)時,則向操作單元下發(fā)針對所述讀取的數(shù)據(jù)變更消息的提交指令;
[0015]所述管理單元在讀取的數(shù)據(jù)變更消息的事務狀態(tài)為事務失敗狀態(tài)時,則向操作單元下發(fā)針對所述讀取的數(shù)據(jù)變更消息的取消指令。
[0016]結(jié)合第一方面的第一種可能的實現(xiàn)方式,在第一方面的第二種可能的實現(xiàn)方式中,所述管理單元在基于接收的各個生產(chǎn)集群對本次下發(fā)的針對所述數(shù)據(jù)變更消息的事務操作指令的執(zhí)行結(jié)果形成事務處理結(jié)果,具體用于:
[0017]所述管理單元在所有的生產(chǎn)集群對本次下發(fā)的提交指令的執(zhí)行結(jié)果均為成功時,形成針對所述數(shù)據(jù)變更消息的事務處理結(jié)果為事務處理成功;或
[0018]在所有的生產(chǎn)集群對本次下發(fā)的取消執(zhí)行結(jié)果均為成功時,形成針對所述數(shù)據(jù)變更消息的事務處理結(jié)果為事務處理失敗,所述生產(chǎn)集群包括若干臺負責具體業(yè)務處理的生產(chǎn)主機。
[0019]第二方面,提供一種生產(chǎn)主機,包括:
[0020]接口單元,用于接收針對數(shù)據(jù)變更消息的事務操作指令;
[0021]處理單元,用于根據(jù)所述接口單元接收的事務操作指令,執(zhí)行針對所述數(shù)據(jù)變更消息的相應操作,得到針對所述事務操作指令的執(zhí)行結(jié)果;并通過所述接口單元將所述執(zhí)行結(jié)果反饋至所述系統(tǒng)。
[0022]結(jié)合第二方面,在第二方面的第一種可能的實現(xiàn)方式中,所述處理單元在根據(jù)所述事務操作指令,執(zhí)行針對所述數(shù)據(jù)變更消息的相應操作時,得到針對所述事務操作指令的執(zhí)行結(jié)果,具體用于:
[0023]所述處理單元在所述數(shù)據(jù)變更消息的事務操作指令為嘗試指令時,對所述數(shù)據(jù)變更消息的消息內(nèi)容進行校驗;
[0024]在校驗失敗時,得到針對所述嘗試指令的執(zhí)行結(jié)果為失??;
[0025]在校驗成功時,比較所述數(shù)據(jù)變更消息的版本是否比所述主機中需要更新的數(shù)據(jù)信息的版本新,若是,則將所述數(shù)據(jù)變更消息作為第一數(shù)據(jù)信息緩存,并得到針對所述嘗試指令的執(zhí)行結(jié)果為成功;否則,得到針對所述嘗試指令的執(zhí)行結(jié)果為失敗。
[0026]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第二種可能的實現(xiàn)方式中,所述處理單元,還用于:
[0027]在得到針對所述嘗試指令的執(zhí)行結(jié)果為成功時,通過所述接口單元通知所述系統(tǒng)將所述數(shù)據(jù)變更消息的事務狀態(tài)更新為事務成功狀態(tài);以及
[0028]在得到針對所述嘗試指令的執(zhí)行結(jié)果為失敗時,通過所述接口單元通知所述系統(tǒng)將所述數(shù)據(jù)變更消息的事務狀態(tài)更新為事務失敗狀態(tài)。
[0029]結(jié)合第二方面的第一種可能的實現(xiàn)方式,在第二方面的第三種可能的實現(xiàn)方式中,所述處理單元在根據(jù)所述事務操作指令,執(zhí)行針對所述數(shù)據(jù)變更消息的相應操作時,得到針對所述事務操作指令的執(zhí)行結(jié)果,具體用于:
[0030]所述處理單元在所述數(shù)據(jù)變更消息的事務操作指令為提交指令時,將所述主機在線使用的第二數(shù)據(jù)信息與本地緩存的所述第一數(shù)據(jù)信息進行互換操作,若操作成功,得到針對所述提交指令的執(zhí)行結(jié)果為成功;否則,得到針對所述嘗試指令的執(zhí)行結(jié)果為失敗。
[0031]結(jié)合第二方面的第三種可能的實現(xiàn)方式,在第二方面的第四種可能的實現(xiàn)方式中,所述處理單元,還用于:
[0032]在得到針對所述提交指令的執(zhí)行結(jié)果為成功時,通過所述接口單元輸出所述數(shù)據(jù)變更消息的提交指令的執(zhí)行結(jié)果為成功;以及
[0033]在得到針對所述提交指令的執(zhí)行結(jié)果為失敗時,通過所述接口單元通知輸出所述數(shù)據(jù)變更消息的事務狀態(tài)更新為事務失敗狀態(tài)。
[0034]結(jié)合第二方面或者以上任何一種可能的實現(xiàn)方式,在第二方面的第五種可能的實現(xiàn)方式中,所述處理單元在根據(jù)所述事務操作指令,執(zhí)行針對所述數(shù)據(jù)變更消息的相應操作時,得到針對所述事務操作指令的執(zhí)行結(jié)果,具體用于:
[0035]所述處理單元在所述數(shù)據(jù)變更消息的事務操作指令為取消指令時,進一步確定針對所述數(shù)據(jù)變更消息的上一個事務操作指令,
[0036]若所述上一個事務操作指令為嘗試指令,刪除本地緩存的所述第一數(shù)據(jù)信息,若成功刪除,得到針對所述取消指令的執(zhí)行結(jié)果為成功;否則,得到針對所述取消指令的執(zhí)行結(jié)果為失敗;
[0037]若所述上一個事務操作指令為提交指令,將所述主機中的第二數(shù)據(jù)信息與本地緩存的第一數(shù)據(jù)消息進行互換操作,若操作成功,得到針對所述取消指令的執(zhí)行結(jié)果為成功;否則,得到針對所述取消指令的執(zhí)行結(jié)果為失敗。
[0038]結(jié)合第二方面或者以上任何一種可能的實現(xiàn)方式,在第二方面的第六種可能的實現(xiàn)方式中,所述處理單元,還用于:
[0039]在得到針對所述取消指令的執(zhí)行結(jié)果為成功時,通過所述接口單元輸出所述數(shù)據(jù)變更消息的取消指令的執(zhí)行結(jié)果為成功;以及
[0040]在得到針對所述取消指令的執(zhí)行結(jié)果為失敗時,通過所述接口單元輸出所述數(shù)據(jù)變更消息的取消指令的執(zhí)行結(jié)果為失敗。
[0041 ]第三方面,提供一種數(shù)據(jù)同步方法,包括:
[0042]存儲管理系統(tǒng)發(fā)送的數(shù)據(jù)變更消息;
[0043]按照存儲的數(shù)據(jù)變更消息的先后順序,依次讀取數(shù)據(jù)變更消息,并根據(jù)讀取的數(shù)據(jù)變更消息的事務狀態(tài)向各個生產(chǎn)集群下發(fā)針對所述讀取的數(shù)據(jù)變更消息的事務操作指令,所述事務狀態(tài)用于描述所述數(shù)據(jù)變更消息所處的處理階段;
[0044]接收各個生產(chǎn)集群對本次下發(fā)的事務操作指令的執(zhí)行結(jié)果,將所述執(zhí)行結(jié)果形成事務處理結(jié)果,并反饋至管理系統(tǒng)。
[0045]結(jié)合第三方面,在第三方面的第一種可能的實現(xiàn)方式中,根據(jù)讀取的數(shù)據(jù)變更消息的事務狀態(tài)向各個生產(chǎn)集群下發(fā)針對所述讀取的數(shù)據(jù)變更消息的事務操作指令,包括:
[0046]在讀取的數(shù)據(jù)變更消息的事務狀態(tài)為事務初始狀態(tài)時,則向各個生產(chǎn)集群下發(fā)針對所述讀取的數(shù)據(jù)變更消息的嘗試指令;
[0047]在讀取的數(shù)據(jù)變更消息的事務狀態(tài)為事務成功狀態(tài)時,則向各個生產(chǎn)集群下發(fā)針對所述讀取的數(shù)據(jù)變更消息的提交指令;
[0048]在讀取的數(shù)據(jù)變更消息的事務狀態(tài)為事務失敗狀態(tài)時,則向各個生產(chǎn)集群下發(fā)針對所述讀取的數(shù)據(jù)變更消息的取消指令。
[0049]結(jié)合第三方面的第一種可能的實現(xiàn)方式,在第三方面的第二種可能的實現(xiàn)方式中,,接收各個生產(chǎn)集群對本次下發(fā)的事務操作指令的執(zhí)行結(jié)果,將所述執(zhí)行結(jié)果形成事務處理結(jié)果,包括:
[0050]在所有的生產(chǎn)集群對本次下發(fā)的提交指令的執(zhí)行結(jié)果均為成功時,形成針對所述數(shù)據(jù)變更消息的事務處理結(jié)果為事務處理成功;或
[0051]在所有的生產(chǎn)集群對本次下發(fā)的取消執(zhí)行結(jié)果均為成功時,形成針對所述數(shù)據(jù)變更消息的事務處理結(jié)果為事務處理失敗。
[0052]第四方面,提供一種數(shù)據(jù)同步方法,應用在業(yè)務主機,包括:
[0053]接收針對數(shù)據(jù)變更消息下發(fā)的事務操作指令;
[0054]根據(jù)接收的事務操作指令,執(zhí)行針對所述數(shù)據(jù)變更消息的相應操作,得到針對所述事務操作指令的執(zhí)行結(jié)果;并將所述執(zhí)行結(jié)果反饋。
[0055]結(jié)合第四方面,在第四方面的第一種可能的實現(xiàn)方式中,根據(jù)所述事務操作指令,執(zhí)行針對所述數(shù)據(jù)變更消息的相應操作,得到針對所述事務操作指令的執(zhí)行結(jié)果,包括:
[0056]在所述數(shù)據(jù)變更消息的事務操作指令為嘗試指令時,對所述數(shù)據(jù)變更消息的消息內(nèi)容進行校驗;
[0057]在校驗失敗時,得到針對所述嘗試指令的執(zhí)行結(jié)果為失