一種任務(wù)同步方法
【專(zhuān)利摘要】本申請(qǐng)公開(kāi)了一種任務(wù)同步方法,該方法中利用一集中存儲(chǔ)設(shè)備存儲(chǔ)分布式系統(tǒng)中各實(shí)例的任務(wù)執(zhí)行信息,每個(gè)實(shí)例通過(guò)周期性地從該集中存儲(chǔ)設(shè)備中獲取其他實(shí)例的任務(wù)執(zhí)行信息,可以及時(shí)掌握各實(shí)例的步驟執(zhí)行狀態(tài),從而可以實(shí)現(xiàn)任務(wù)在各實(shí)例間的同步執(zhí)行。采用本發(fā)明,可以避免新增實(shí)例時(shí)對(duì)原有實(shí)例正常運(yùn)行的影響,且易于實(shí)現(xiàn)。
【專(zhuān)利說(shuō)明】一種任務(wù)同步方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及分布式應(yīng)用技術(shù),特別是涉及一種分布式應(yīng)用系統(tǒng)中的任務(wù)同步方法。
【背景技術(shù)】
[0002]目前,對(duì)于步驟運(yùn)算數(shù)據(jù)量非常大且有時(shí)間要求的業(yè)務(wù)應(yīng)用,通常使用分布式系統(tǒng)實(shí)現(xiàn)。具體而言,對(duì)于一個(gè)業(yè)務(wù)應(yīng)用,如果有若干步驟需要在指定時(shí)間內(nèi)完成且需要計(jì)算的數(shù)據(jù)量非常大,該業(yè)務(wù)應(yīng)用的執(zhí)行將需要由分布在多臺(tái)機(jī)器上的多個(gè)實(shí)例共同完成。該類(lèi)業(yè)務(wù)應(yīng)用中的各步驟通常需要按照先后順序執(zhí)行,即一個(gè)步驟必須在前一步驟的所有執(zhí)行實(shí)例完成后才能開(kāi)始執(zhí)行。
[0003]在實(shí)際應(yīng)用中,每個(gè)實(shí)例執(zhí)行某個(gè)步驟的計(jì)算任務(wù)很難在同一時(shí)間完成。例如,當(dāng)分布在N臺(tái)服務(wù)器上的M個(gè)實(shí)例共同執(zhí)行步驟Pl時(shí),假設(shè)給每個(gè)實(shí)例分配同樣多的計(jì)算任務(wù)(如10萬(wàn)條數(shù)據(jù)),因?yàn)榉?wù)器本身配置的原因或網(wǎng)絡(luò)1的原因,造成實(shí)例I計(jì)算10萬(wàn)條記錄需要10分鐘,而實(shí)例2完成10萬(wàn)條記錄可能需要11分鐘,并且實(shí)際上也存在計(jì)算數(shù)據(jù)條數(shù)不能絕對(duì)平均的分配給M個(gè)實(shí)例的情況;再假設(shè)如果給每個(gè)實(shí)例設(shè)置一個(gè)完成任務(wù)的時(shí)間點(diǎn),比如凌晨3點(diǎn)整完成Pl步驟中的任務(wù),也可能因?yàn)橥瑯拥脑?,存在部分?shí)例無(wú)法在指定時(shí)間內(nèi)完成的情況(這種情況在實(shí)際的分布式系統(tǒng)運(yùn)行中出現(xiàn)的概率較高)。
[0004]基于以上原因,為了確保各步驟按照先后順序執(zhí)行,需要實(shí)現(xiàn)在各個(gè)實(shí)例之間多個(gè)任務(wù)步驟的同步。各個(gè)實(shí)例需要在等待其他實(shí)例都完成了相同步驟的任務(wù)后才能開(kāi)始下個(gè)步驟的任務(wù)。例如:當(dāng)執(zhí)行步驟Pl時(shí),從實(shí)例I到實(shí)例M,在分別完成所分配任務(wù)后需要各自等待,直到最后一個(gè)完成Pl步驟任務(wù)的實(shí)例執(zhí)行完成后(也就意味著Pl步驟任務(wù)已經(jīng)全部完成),各個(gè)實(shí)例在判斷到Pl步驟全部完成后自己開(kāi)始執(zhí)行P2步驟的任務(wù),同Pl —樣,當(dāng)全部實(shí)例都完成各自的P2步驟任務(wù)后,再開(kāi)始執(zhí)行下一個(gè)步驟P3,依次類(lèi)推,從而實(shí)現(xiàn)每個(gè)任務(wù)步驟執(zhí)行的同步。
[0005]目前,在分布式應(yīng)用場(chǎng)景下,每個(gè)實(shí)例完成一項(xiàng)任務(wù)步驟工作后,是通過(guò)廣播的方式通知其他實(shí)例本實(shí)例的步驟執(zhí)行狀態(tài)信息,從而實(shí)現(xiàn)了將每個(gè)實(shí)例的任務(wù)執(zhí)行情況信息同步到全部實(shí)例。
[0006]上述采用廣播方式實(shí)現(xiàn)的實(shí)例間任務(wù)同步的方法,需要每個(gè)實(shí)例知道其他實(shí)例的存在,才可以將信息廣播給其他實(shí)例中。對(duì)于正在線上運(yùn)行的系統(tǒng),當(dāng)動(dòng)態(tài)增加了新實(shí)例時(shí),需要老的實(shí)例重新配置才能知道該新實(shí)例的存在,因此,新實(shí)例的增加可能會(huì)引起老實(shí)例的線上重啟。
[0007]另外,廣播方式需要每個(gè)實(shí)例開(kāi)發(fā)通訊的接口,接收其他實(shí)例傳播來(lái)的任務(wù)執(zhí)行信息,要從應(yīng)用開(kāi)發(fā)實(shí)現(xiàn)上確保通訊的及時(shí)性和可用性,技術(shù)實(shí)現(xiàn)有一定的復(fù)雜度。一旦信息在傳播過(guò)程中丟失,會(huì)造成整個(gè)任務(wù)同步機(jī)制受影響,計(jì)劃業(yè)務(wù)將無(wú)法執(zhí)行,存在有較大風(fēng)險(xiǎn)。
[0008]由此可見(jiàn),現(xiàn)有的采用廣播方式實(shí)現(xiàn)的任務(wù)同步方法存在新增實(shí)例時(shí)影響原有實(shí)例的正常運(yùn)行以及通訊技術(shù)要求高、實(shí)現(xiàn)復(fù)雜度高等問(wèn)題。
【發(fā)明內(nèi)容】
[0009]有鑒于此,本發(fā)明的主要目的在于提供一種任務(wù)同步方法,該方法應(yīng)用于分布式應(yīng)用系統(tǒng)中,可避免新增實(shí)例時(shí)對(duì)原有實(shí)例正常運(yùn)行的影響,且易于實(shí)現(xiàn)。
[0010]為了達(dá)到上述目的,本發(fā)明提出的技術(shù)方案為:
[0011]一種任務(wù)同步方法,該方法應(yīng)用于分布式系統(tǒng)中,包括:
[0012]當(dāng)執(zhí)行業(yè)務(wù)應(yīng)用任務(wù)的每個(gè)實(shí)例啟動(dòng)后,將本實(shí)例的實(shí)例信息記錄在系統(tǒng)的集中存儲(chǔ)設(shè)備中;
[0013]對(duì)于當(dāng)前執(zhí)行所述任務(wù)的每個(gè)實(shí)例,在每個(gè)預(yù)設(shè)的更新周期到達(dá)時(shí),根據(jù)本周期從所述集中存儲(chǔ)設(shè)備中獲取的所述任務(wù)的任務(wù)執(zhí)行信息以及當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例,確定出當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟,并在本實(shí)例未執(zhí)行所確定出的步驟時(shí),啟動(dòng)本實(shí)例執(zhí)行該步驟,在所述集中存儲(chǔ)設(shè)備中所述任務(wù)的任務(wù)執(zhí)行信息中記錄相應(yīng)的步驟執(zhí)行信息,所述步驟執(zhí)行信息包括用于指示本實(shí)例已執(zhí)行所述步驟的信息以及用于指示本實(shí)例執(zhí)行所述步驟的狀態(tài)為執(zhí)行中的信息;
[0014]對(duì)于每個(gè)所述實(shí)例,當(dāng)該實(shí)例執(zhí)行完所述任務(wù)的一個(gè)步驟時(shí),將所述集中存儲(chǔ)設(shè)備的所述任務(wù)執(zhí)行信息中所記錄的該實(shí)例執(zhí)行所述步驟的狀態(tài)修改為執(zhí)行完成。
[0015]綜上所述,本發(fā)明提出的任務(wù)同步方法,利用一集中存儲(chǔ)設(shè)備存儲(chǔ)分布式系統(tǒng)中各實(shí)例的任務(wù)執(zhí)行信息,這樣,每個(gè)實(shí)例通過(guò)周期性地從該集中存儲(chǔ)設(shè)備中獲取其他實(shí)例的任務(wù)執(zhí)行信息,可以及時(shí)掌握各實(shí)例的步驟執(zhí)行狀態(tài),從而可以實(shí)現(xiàn)任務(wù)在各實(shí)例間的同步執(zhí)行。同時(shí),本發(fā)明在新增實(shí)例時(shí)對(duì)原有實(shí)例正常運(yùn)行沒(méi)有影響,且不需要大幅度地增加通訊接口的開(kāi)銷(xiāo)、應(yīng)用成本較低、易于實(shí)現(xiàn)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0016]圖1為本發(fā)明實(shí)施例一的流程示意圖。
【具體實(shí)施方式】
[0017]為使本發(fā)明的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例對(duì)本發(fā)明作進(jìn)一步地詳細(xì)描述。
[0018]本發(fā)明的核心思想是:在分布式系統(tǒng)中引入一集中存儲(chǔ)設(shè)備,用于存儲(chǔ)分布式系統(tǒng)中各實(shí)例的任務(wù)執(zhí)行信息,每個(gè)實(shí)例啟動(dòng)后在執(zhí)行每一步驟時(shí)以及步驟執(zhí)行完畢時(shí)都需要修改其在集中存儲(chǔ)設(shè)備中的任務(wù)執(zhí)行信息,并且每個(gè)實(shí)例需要周期性地從該集中存儲(chǔ)設(shè)備中獲取其他實(shí)例的任務(wù)執(zhí)行信息,以實(shí)現(xiàn)任務(wù)中各步驟執(zhí)行的同步。如此,既可避免新增實(shí)例時(shí)對(duì)原有實(shí)例正常運(yùn)行的影響,又不需要大幅度增加通訊接口的開(kāi)銷(xiāo),應(yīng)用成本較低、易于實(shí)現(xiàn)。
[0019]圖1為本發(fā)明實(shí)施例一的流程示意圖,如圖1所示,該實(shí)施例主要包括:
[0020]步驟101、當(dāng)執(zhí)行業(yè)務(wù)應(yīng)用任務(wù)的每個(gè)實(shí)例啟動(dòng)后,將本實(shí)例的實(shí)例信息記錄在系統(tǒng)的集中存儲(chǔ)設(shè)備中。
[0021]本步驟中,用于實(shí)現(xiàn)實(shí)例在集中存儲(chǔ)設(shè)備的注冊(cè),這樣,集中存儲(chǔ)設(shè)備中將保存執(zhí)行任務(wù)的所有實(shí)例。當(dāng)在任務(wù)執(zhí)行過(guò)程中,新增新的實(shí)例時(shí),直接在集中存儲(chǔ)設(shè)備中記錄該實(shí)例的實(shí)例信息即可,由于實(shí)例啟動(dòng)后會(huì)周期性的到集中存儲(chǔ)設(shè)備中獲取當(dāng)前所執(zhí)行任務(wù)的實(shí)例信息以及任務(wù)執(zhí)行信息,因此,可以確保之前已啟動(dòng)的實(shí)例可以及時(shí)獲知新增實(shí)例的相關(guān)信息,而不需要再進(jìn)行新增實(shí)例的通知以及對(duì)已啟動(dòng)的實(shí)例進(jìn)行重啟。
[0022]所述實(shí)例信息可以包括實(shí)例的編號(hào)、實(shí)例的名稱等信息。較佳地,還可以包括實(shí)例的更新時(shí)間,所述更新時(shí)間為進(jìn)行記錄所述實(shí)例信息的時(shí)刻,以供此后進(jìn)行實(shí)例有效性的判斷。
[0023]步驟102、對(duì)于當(dāng)前執(zhí)行所述任務(wù)的每個(gè)實(shí)例,在每個(gè)預(yù)設(shè)的更新周期到達(dá)時(shí),根據(jù)本周期從所述集中存儲(chǔ)設(shè)備中獲取的所述任務(wù)的任務(wù)執(zhí)行信息以及當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例,確定出當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟,并在本實(shí)例未執(zhí)行所確定出的步驟時(shí),啟動(dòng)本實(shí)例執(zhí)行該步驟,在所述集中存儲(chǔ)設(shè)備中所述任務(wù)的任務(wù)執(zhí)行信息中記錄相應(yīng)的步驟執(zhí)行信息,所述步驟執(zhí)行信息包括用于指示本實(shí)例已執(zhí)行所述步驟的信息以及用于指示本實(shí)例執(zhí)行所述步驟的狀態(tài)為執(zhí)行中的信息。
[0024]本步驟中,每個(gè)實(shí)例啟動(dòng)后,需要周期性地去集中存儲(chǔ)設(shè)備中獲取當(dāng)前所執(zhí)行任務(wù)的實(shí)例信息以及任務(wù)的任務(wù)執(zhí)行信息,基于這些信息,可以確定出當(dāng)前任務(wù)的執(zhí)行情況,即當(dāng)前執(zhí)行任務(wù)的有效實(shí)例有哪些,以及當(dāng)前任務(wù)執(zhí)行到哪一步了,進(jìn)而可以基于此確定當(dāng)前是否需要啟動(dòng)新的步驟的執(zhí)行,還是需要等待其他實(shí)例執(zhí)行完成本實(shí)例最近已執(zhí)行完成的步驟,從而可以實(shí)現(xiàn)任務(wù)的同步。
[0025]這里,實(shí)例在啟動(dòng)執(zhí)行每個(gè)步驟時(shí)都要在集中存儲(chǔ)設(shè)備中記錄該狀態(tài)信息,以使其他實(shí)例可以及時(shí)獲知該步驟已被本實(shí)例正在執(zhí)行,實(shí)現(xiàn)實(shí)例間步驟執(zhí)行狀態(tài)的共享。
[0026]在實(shí)際應(yīng)用中,所述更新周期的長(zhǎng)度越短,所獲取信息的實(shí)時(shí)性越高,但是也會(huì)存在監(jiān)控開(kāi)銷(xiāo)過(guò)大的情況,具體可由本領(lǐng)域技術(shù)人員根據(jù)實(shí)際需要在信息實(shí)時(shí)性和處理開(kāi)銷(xiāo)之間進(jìn)行平衡,設(shè)置合適的更新周期。
[0027]較佳地,為了便于對(duì)實(shí)例有效性的識(shí)別,每個(gè)實(shí)例在其更新周期到達(dá)時(shí),可以在所述集中存儲(chǔ)設(shè)備中將本實(shí)例的更新時(shí)間記錄為當(dāng)前時(shí)刻,這樣可以基于實(shí)例的更新時(shí)間判斷該實(shí)例是否已經(jīng)退出任務(wù)的執(zhí)行成為無(wú)效實(shí)例。
[0028]較佳地,可以采用下述方法,確定出當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例:
[0029]將所述集中存儲(chǔ)設(shè)備中當(dāng)前記錄的執(zhí)行所述任務(wù)的實(shí)例中,選擇出所有滿足:tnow-t0 ( tupdate ( tnow的實(shí)例作為當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例,其中,tupdate為所述集中存儲(chǔ)設(shè)備中記錄的實(shí)例的更新時(shí)間,tnow為當(dāng)前時(shí)間,t0為預(yù)設(shè)的有效時(shí)間間隔,所述h大于所述更新周期的間隔。
[0030]較佳地,可以采用下述方法確定出當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟:
[0031]步驟xl、從所述任務(wù)的步驟序列中取出第一個(gè)當(dāng)前未被檢查的步驟,所述步驟序列中的步驟按照?qǐng)?zhí)行序號(hào)的升序排列。
[0032]采用本步驟,可以從所述任務(wù)的步驟序列中取出一個(gè)當(dāng)前未被檢查且執(zhí)行序號(hào)最小的步驟,作為步驟x2中進(jìn)行檢查的對(duì)象。
[0033]步驟x2、根據(jù)所述任務(wù)的任務(wù)執(zhí)行信息,檢查當(dāng)前所取出的步驟是否已被所述有效實(shí)例完成,如果是,則執(zhí)行步驟xl,否則,將當(dāng)前所取出的步驟確定為:當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟。
[0034]這里需要說(shuō)明的是,當(dāng)前未被所有所述有效實(shí)例完成的步驟將包括所有有效實(shí)例都沒(méi)有執(zhí)行的步驟。
[0035]步驟103、對(duì)于每個(gè)所述實(shí)例,當(dāng)該實(shí)例執(zhí)行完所述任務(wù)的一個(gè)步驟時(shí),將所述集中存儲(chǔ)設(shè)備的所述任務(wù)執(zhí)行信息中所記錄的該實(shí)例執(zhí)行所述步驟的狀態(tài)修改為執(zhí)行完成。
[0036]本步驟用于在每個(gè)實(shí)例執(zhí)行完成一步驟時(shí),將該執(zhí)行完成的狀態(tài)信息記錄在集中存儲(chǔ)設(shè)備(即記錄在任務(wù)執(zhí)行信息中),以供其他實(shí)例及時(shí)獲知該信息,進(jìn)而可以據(jù)此判斷是否執(zhí)行下一步驟或是等待其他實(shí)例的執(zhí)行完成,從而可以實(shí)現(xiàn)分布式系統(tǒng)的任務(wù)同步。
[0037]綜上所述,以上僅為本發(fā)明的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。
【權(quán)利要求】
1.一種任務(wù)同步方法,該方法應(yīng)用于分布式系統(tǒng)中,其特征在于,包括: 當(dāng)執(zhí)行業(yè)務(wù)應(yīng)用任務(wù)的每個(gè)實(shí)例啟動(dòng)后,將本實(shí)例的實(shí)例信息記錄在系統(tǒng)的集中存儲(chǔ)設(shè)備中; 對(duì)于當(dāng)前執(zhí)行所述任務(wù)的每個(gè)實(shí)例,在每個(gè)預(yù)設(shè)的更新周期到達(dá)時(shí),根據(jù)本周期從所述集中存儲(chǔ)設(shè)備中獲取的所述任務(wù)的任務(wù)執(zhí)行信息以及當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例,確定出當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟,并在本實(shí)例未執(zhí)行所確定出的步驟時(shí),啟動(dòng)本實(shí)例執(zhí)行該步驟,在所述集中存儲(chǔ)設(shè)備中所述任務(wù)的任務(wù)執(zhí)行信息中記錄相應(yīng)的步驟執(zhí)行信息,所述步驟執(zhí)行信息包括用于指示本實(shí)例已執(zhí)行所述步驟的信息以及用于指示本實(shí)例執(zhí)行所述步驟的狀態(tài)為執(zhí)行中的信息; 對(duì)于每個(gè)所述實(shí)例,當(dāng)該實(shí)例執(zhí)行完所述任務(wù)的一個(gè)步驟時(shí),將所述集中存儲(chǔ)設(shè)備的所述任務(wù)執(zhí)行信息中所記錄的該實(shí)例執(zhí)行所述步驟的狀態(tài)修改為執(zhí)行完成。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述實(shí)例信息包括實(shí)例的編號(hào)、實(shí)例的名稱和實(shí)例的更新時(shí)間,所述更新時(shí)間為進(jìn)行記錄所述實(shí)例信息的時(shí)刻。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述方法進(jìn)一步包括:對(duì)于當(dāng)前執(zhí)行所述任務(wù)的每個(gè)實(shí)例,在每個(gè)預(yù)設(shè)的更新周期到達(dá)時(shí),在所述集中存儲(chǔ)設(shè)備中將本實(shí)例的更新時(shí)間記錄為當(dāng)前時(shí)刻。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例的確定方法包括: 將所述集中存儲(chǔ)設(shè)備中當(dāng)前記錄的執(zhí)行所述任務(wù)的實(shí)例中,選擇出所有滿足:tnow-t0 ( tupdate ( tnow的實(shí)例作為當(dāng)前執(zhí)行所述任務(wù)的有效實(shí)例,其中,tupdate為所述集中存儲(chǔ)設(shè)備中記錄的實(shí)例的更新時(shí)間,tnow為當(dāng)前時(shí)間,t0為預(yù)設(shè)的有效時(shí)間間隔,所述h大于所述更新周期的間隔。
5.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述確定出當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟包括: xl、從所述任務(wù)的步驟序列中取出第一個(gè)當(dāng)前未被檢查的步驟,所述步驟序列中的步驟按照?qǐng)?zhí)行序號(hào)的升序排列; x2、根據(jù)所述任務(wù)的任務(wù)執(zhí)行信息,檢查當(dāng)前所取出的步驟是否已被所述有效實(shí)例完成,如果是,則執(zhí)行步驟xl,否則,將當(dāng)前所取出的步驟確定為:當(dāng)前未被所有所述有效實(shí)例完成的步驟中執(zhí)行序號(hào)最小的步驟。
【文檔編號(hào)】G06F9/52GK104182283SQ201410418045
【公開(kāi)日】2014年12月3日 申請(qǐng)日期:2014年8月22日 優(yōu)先權(quán)日:2014年8月22日
【發(fā)明者】陳鵬 申請(qǐng)人:北京京東尚科信息技術(shù)有限公司