分布式系統(tǒng)中處理同步消息的方法、裝置、分布式系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及分布式系統(tǒng)同步技術(shù),尤其涉及分布式系統(tǒng)中數(shù)據(jù)同步的方法、裝置、分布式系統(tǒng)。
【背景技術(shù)】
[0002]分布式系統(tǒng)中,主用設(shè)備和備用設(shè)備之間經(jīng)常會(huì)需要進(jìn)行數(shù)據(jù)同步,這種同步通常包括批量同步和實(shí)時(shí)同步,而批量同步消息具有時(shí)效性,需要保證批量同步消息在過(guò)期前被處理。
[0003]現(xiàn)有技術(shù)通過(guò)圖1所示的方式來(lái)保證處理兩種同步消息的時(shí)序問(wèn)題。主用實(shí)體通過(guò)組播通道發(fā)送實(shí)時(shí)同步消息,通過(guò)單播通道發(fā)送批量同步消息,當(dāng)主用實(shí)體切換通道時(shí),向原通道發(fā)送一個(gè)通道切換消息,備用實(shí)體根據(jù)通道切換消息來(lái)切換處理通道,從而保證備用實(shí)體對(duì)同步消息的處理順序與主用主控板發(fā)送的同步消息的順序一致。
[0004]由于此做法實(shí)現(xiàn)較為復(fù)雜,需要增加額外的通道切換消息,通道切換頻繁會(huì)產(chǎn)生一定的開(kāi)銷(xiāo)。
【發(fā)明內(nèi)容】
[0005]本申請(qǐng)?zhí)峁┮环N分布式系統(tǒng)中處理同步消息的方法、裝置、分布式系統(tǒng),能夠保證實(shí)時(shí)同步消息和批量同步消息的處理時(shí)序,并且實(shí)現(xiàn)簡(jiǎn)單,不產(chǎn)生額外開(kāi)銷(xiāo)。
[0006]根據(jù)本申請(qǐng)實(shí)施例的第一方面,提供一種分布式系統(tǒng)中處理同步消息的方法,該方法包括步驟:
[0007]步驟1,接收同步消息,所述同步消息包括實(shí)時(shí)同步消息和批量同步消息,且所述同步消息攜帶有序列號(hào),所述序列號(hào)用以標(biāo)識(shí)所發(fā)送的所述同步消息的先后次序;
[0008]步驟2,如果存在未處理的所述批量同步消息,則處理所述批量同步消息,記錄已處理的最后一個(gè)批量同步消息的序列號(hào),并執(zhí)行步驟3;如果所述批量同步消息已接收完畢,且所述批量同步消息均已處理,則處理所述實(shí)時(shí)同步消息;
[0009]步驟3,如果所述實(shí)時(shí)同步消息所攜帶的序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的序列號(hào),則處理所述實(shí)時(shí)同步消息,否則返回步驟2。
[0010]在一個(gè)實(shí)施例中,所述批量同步消息存儲(chǔ)于第一隊(duì)列中,步驟2中處理所述批量同步消息的過(guò)程包括:
[0011]將所述第一隊(duì)列中當(dāng)前所存儲(chǔ)的所有批量同步消息依次進(jìn)行處理;或
[0012]按照第一預(yù)定規(guī)則處理所述第一隊(duì)列中的一個(gè)或多個(gè)批量同步消息;所述第一預(yù)定規(guī)則為每輪所處理的批量同步消息的數(shù)量小于第一預(yù)定值。
[0013]在一個(gè)實(shí)施例中,所述實(shí)時(shí)同步消息存儲(chǔ)于第二隊(duì)列中,步驟3中處理所述實(shí)時(shí)同步消息的過(guò)程包括:
[0014]將所述第二隊(duì)列中當(dāng)前所存儲(chǔ)的所有序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的實(shí)時(shí)同步消息依次進(jìn)行處理;或
[0015]按照第二預(yù)定規(guī)則處理所述第二隊(duì)列中的一個(gè)或多個(gè)序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的實(shí)時(shí)同步消息;所述第二預(yù)定規(guī)則為每輪所處理的實(shí)時(shí)同步消息的數(shù)量小于第二預(yù)定值。
[0016]作為一個(gè)實(shí)施例,步驟2中判斷所述批量同步消息已接收完畢的過(guò)程包括:
[0017]接收到結(jié)束報(bào)文,所述結(jié)束報(bào)文用于標(biāo)記所述批量同步消息已接收完。
[0018]根據(jù)本申請(qǐng)實(shí)施例的第二方面,本申請(qǐng)還提供一種分布式系統(tǒng)中處理同步消息的裝置,包括:
[0019]接收模塊,用于接收同步消息,所述同步消息包括實(shí)時(shí)同步消息和批量同步消息,且所述同步消息攜帶有序列號(hào),所述序列號(hào)用以標(biāo)識(shí)所發(fā)送的所述同步消息的先后次序;
[0020]第一存儲(chǔ)模塊,用于存儲(chǔ)實(shí)時(shí)同步消息;
[0021]第二存儲(chǔ)模塊,用于存儲(chǔ)批量同步消息;
[0022]處理模塊,用于如果存在未處理的所述批量同步消息,則從所述第一存儲(chǔ)模塊讀取所述批量同步消息并處理,記錄已處理的最后一個(gè)批量同步消息的序列號(hào),然后從所述第二存儲(chǔ)模塊讀取所述實(shí)時(shí)同步消息,如果所述實(shí)時(shí)同步消息所攜帶的序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的序列號(hào),則處理所述實(shí)時(shí)同步消息,否則繼續(xù)從所述第一存儲(chǔ)模塊讀取所述批量同步消息并處理;如果所述批量同步消息已接收完畢,且所述批量同步消息均已處理,則從所述第二存儲(chǔ)模塊讀取所述實(shí)時(shí)同步消息并處理。
[0023]在一個(gè)實(shí)施例中,所述處理模塊處理所述批量同步消息的過(guò)程包括:
[0024]從所述第一存儲(chǔ)模塊中讀取當(dāng)前所存儲(chǔ)的所有批量同步消息依次進(jìn)行處理;或
[0025]按照第一預(yù)定規(guī)則處理所述第一存儲(chǔ)模塊中的一個(gè)或多個(gè)批量同步消息;所述第一預(yù)定規(guī)則為每輪所處理的批量同步消息的數(shù)量小于第一預(yù)定值。
[0026]在一個(gè)實(shí)施例中,如果所述實(shí)時(shí)同步消息所攜帶的序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的序列號(hào),所述處理模塊處理所述實(shí)時(shí)同步消息的過(guò)程包括:
[0027]將第二存儲(chǔ)模塊中所存儲(chǔ)的所有序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的實(shí)時(shí)同步消息依次進(jìn)行處理;或
[0028]按照第二預(yù)定規(guī)則處理所述第二存儲(chǔ)模塊中的一個(gè)或多個(gè)序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的實(shí)時(shí)同步消息;所述第二預(yù)定規(guī)則為每輪所處理的實(shí)時(shí)同步消息的數(shù)量小于第二預(yù)定值。
[0029]進(jìn)一步的,所述接收模塊還用于接收結(jié)束報(bào)文,所述結(jié)束報(bào)文用于標(biāo)記所述批量同步消息已接收完。
[0030]根據(jù)本申請(qǐng)實(shí)施例的第三方面,本申請(qǐng)還提供一種分布式系統(tǒng),包括主用實(shí)體和備用實(shí)體,
[0031]所述主用實(shí)體,用于發(fā)送同步消息,所述同步消息包括實(shí)時(shí)同步消息和批量同步消息,且所述同步消息攜帶有序列號(hào),所述序列號(hào)用以標(biāo)識(shí)所發(fā)送的所述同步消息的先后次序;
[0032]所述備用實(shí)體,用于接收所述同步消息,如果所述批量同步消息尚未接收完畢,且存在未處理的所述批量同步消息,則讀取所述批量同步消息并處理,記錄已處理的最后一個(gè)批量同步消息的序列號(hào),然后讀取所述實(shí)時(shí)同步消息,如果所述實(shí)時(shí)同步消息所攜帶的序列號(hào)小于所述已處理的最后一個(gè)批量同步消息的序列號(hào),則處理所述實(shí)時(shí)同步消息,否則繼續(xù)讀取所述批量同步消息并處理;如果所述批量同步消息已接收完畢,且所述批量同步消息均已處理,則讀取所述實(shí)時(shí)同步消息并處理。
[0033]進(jìn)一步的,所述主用實(shí)體還用于發(fā)送結(jié)束報(bào)文,所述結(jié)束報(bào)文用于標(biāo)記所述批量同步消息已接收完;
[0034]所述備用實(shí)體還用于接收結(jié)束報(bào)文。
[0035]本申請(qǐng)通過(guò)在同步消息中攜帶序列號(hào),并通過(guò)序列號(hào)控制批量同步消息與實(shí)時(shí)同步消息的處理先后關(guān)系,在處理先后順序時(shí),基于批量同步消息和實(shí)時(shí)同步消息的特點(diǎn),提供了相應(yīng)的接收控制機(jī)制,即首先處理的同步消息需要是批量同步消息,處理批量同步消息后所處理的實(shí)時(shí)同步消息的發(fā)送順序需先于此輪批量同步消息中已處理的最后一條批量同步消息的發(fā)送順序。當(dāng)處理完所有的批量同步消息后,實(shí)時(shí)同步消息的處理過(guò)程無(wú)需再判斷實(shí)時(shí)同步消息的序列號(hào)與已處理的批量同步消息的關(guān)系,從而保證了接收端批量同步消息與實(shí)時(shí)同步消息最終正確處理。由于此套接收控制機(jī)制實(shí)現(xiàn)簡(jiǎn)單,因此不產(chǎn)生額外的開(kāi)銷(xiāo)。
【附圖說(shuō)明】
[0036]圖1為現(xiàn)有技術(shù)中數(shù)據(jù)同步的方法示意圖;
[0037]圖2為本申請(qǐng)實(shí)施例中分布式系統(tǒng)的架構(gòu)圖;
[0038]圖3為本申請(qǐng)實(shí)施例中處理同步消息的方法的流程圖;
[0039]圖4a為本申請(qǐng)應(yīng)用實(shí)例中分布式系統(tǒng)的實(shí)例圖;
[0040]圖4b為本申請(qǐng)應(yīng)用實(shí)例中發(fā)送端和接收端交互信息的流程圖;
[0041]圖4c為本申請(qǐng)應(yīng)用實(shí)例中接收端處理同步消息的流程圖;
[0042]圖5為本申請(qǐng)應(yīng)用實(shí)例中處理同步消息的裝置的硬件架構(gòu)圖;
[0043]圖6為本申請(qǐng)應(yīng)用實(shí)例中處理同步消息的