本發(fā)明屬于通信技術(shù)領(lǐng)域,尤其涉及一種任務(wù)處理方法及系統(tǒng)。
背景技術(shù):
目前,消費信貸自助服務(wù)([cfs_ss],ss)系統(tǒng)為了防止定時任務(wù)(job)被多臺服務(wù)器重復(fù)執(zhí)行,通常會向數(shù)據(jù)庫插入一條記錄,比如,插入一個任務(wù)的過期時間。當服務(wù)器執(zhí)行任務(wù)之前,會先到數(shù)據(jù)庫查詢該任務(wù)的過期時間是否有效,若有效,則表示有服務(wù)器在執(zhí)行該任務(wù),若無效則表明沒有服務(wù)器在執(zhí)行這個任務(wù),即該任務(wù)可以執(zhí)行。該方法的缺點是,當不同服務(wù)器的時間存在偏差時,可能會造成多個服務(wù)器同時執(zhí)行同一個任務(wù)的情況,從而導(dǎo)致服務(wù)器出現(xiàn)故障。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供了任務(wù)處理方法及系統(tǒng),以解決現(xiàn)有技術(shù)中的問題。
本發(fā)明實施例的第一方面提供了一種任務(wù)處理方法,包括:
在一個或多個服務(wù)器執(zhí)行任務(wù)之前,向分布式應(yīng)用程序協(xié)調(diào)服務(wù)zookeeper發(fā)送第一臨時目錄創(chuàng)建請求;
所述zookeeper選擇一個服務(wù)器,向被選擇的服務(wù)器發(fā)送包含同意創(chuàng)建第一臨時目錄的信息,所述被選擇的服務(wù)器為第一服務(wù)器;
所述第一服務(wù)器在所述zookeeper創(chuàng)建一個與所述任務(wù)唯一對應(yīng)的第一臨時目錄;
所述第一服務(wù)器執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)。
本發(fā)明實施例的第二方面提供了一種任務(wù)處理系統(tǒng),包括:一個或多個服務(wù)器、zookeeper,其中,所述一個或多個服務(wù)器包括第一服務(wù)器;
所述一個或多個服務(wù)器用于在執(zhí)行任務(wù)之前,向分布式應(yīng)用程序協(xié)調(diào)服務(wù)zookeeper發(fā)送第一臨時目錄創(chuàng)建請求;
所述zookeeper用于選擇一個服務(wù)器,向被選擇的服務(wù)器發(fā)送包含同意創(chuàng)建第一臨時目錄的信息,所述被選擇的服務(wù)器為第一服務(wù)器;
所述第一服務(wù)器用于在所述zookeeper創(chuàng)建一個與所述任務(wù)唯一對應(yīng)的第一臨時目錄,并執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)。
本發(fā)明實施例與現(xiàn)有技術(shù)相比存在的有益效果是:由于只有一臺服務(wù)器的任務(wù)會在zookeeper創(chuàng)建臨時目錄成功,且臨時目錄都是在zookeeper上創(chuàng)建,因此,服務(wù)器本身的時間存在偏差時也不會影響zookeeper的時間,從而保證同一個任務(wù)不會因為服務(wù)器本身的時間存在偏差而導(dǎo)致重復(fù)執(zhí)行。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實施例提供的一種任務(wù)處理方法的方法流程圖;
圖2是本發(fā)明實施例提供的一種任務(wù)處理系統(tǒng)的結(jié)構(gòu)示意圖。
具體實施方式
以下描述中,為了說明而不是為了限定,提出了諸如特定系統(tǒng)結(jié)構(gòu)、技術(shù)之類的具體細節(jié),以便透徹理解本發(fā)明實施例。然而,本領(lǐng)域的技術(shù)人員應(yīng)當清楚,在沒有這些具體細節(jié)的其它實施例中也可以實現(xiàn)本發(fā)明。在其它情況中,省略對眾所周知的系統(tǒng)、裝置、電路以及方法的詳細說明,以免不必要的細節(jié)妨礙本發(fā)明的描述。
為了說明本發(fā)明所述的技術(shù)方案,下面通過具體實施例來進行說明。
圖1示出了本發(fā)明實施例提供的一種任務(wù)處理方法的方法流程圖,詳述如下:
步驟s11,在一個或多個服務(wù)器執(zhí)行任務(wù)之前,向分布式應(yīng)用程序協(xié)調(diào)服務(wù)zookeeper發(fā)送第一臨時目錄創(chuàng)建請求。
其中,zookeeper是一個分布式的、開放源碼的分布式應(yīng)用程序協(xié)調(diào)服務(wù)。
步驟s12,所述zookeeper選擇一個服務(wù)器,向被選擇的服務(wù)器發(fā)送包含同意創(chuàng)建第一臨時目錄的信息,所述被選擇的服務(wù)器為第一服務(wù)器。
當只有一個服務(wù)器向zookeeper發(fā)送第一臨時目錄創(chuàng)建請求時,該zookeeper選擇該服務(wù)器作為第一服務(wù)器,并同意所述第一服務(wù)器創(chuàng)建第一臨時目錄。
當有多個服務(wù)器向zookeeper發(fā)送第一臨時目錄創(chuàng)建請求時,zookeeper只會同意其中一個服務(wù)器創(chuàng)建第一臨時目錄。可選地,zookeeper根據(jù)接收到第一臨時目錄創(chuàng)建請求的先后順序選擇同意哪一個服務(wù)器創(chuàng)建第一臨時目錄,比如,只同意最先發(fā)送第一臨時目錄創(chuàng)建請求的服務(wù)器創(chuàng)建第一臨時目錄。當然,zookeeper也可根據(jù)服務(wù)器的優(yōu)先權(quán)選擇優(yōu)先權(quán)最高的服務(wù)器創(chuàng)建第一臨時目錄。其中,服務(wù)器的優(yōu)先權(quán)可根據(jù)服務(wù)器完成任務(wù)的情況設(shè)定,比如,統(tǒng)計一段時間內(nèi)各個服務(wù)器完成任務(wù)的情況,若服務(wù)器能夠完整完成一個任務(wù)而不出現(xiàn)故障,則該服務(wù)器對應(yīng)的權(quán)值增大,當權(quán)值增大到一定值,則將該服務(wù)器的優(yōu)先級提高一個等級。同理,若服務(wù)器在執(zhí)行一個任務(wù)過程中出現(xiàn)故障而中斷任務(wù)的執(zhí)行,則減小該服務(wù)器對應(yīng)的權(quán)重,當權(quán)值減小到一定值,則將該服務(wù)器的優(yōu)先級降低一個等級。
步驟s13,所述第一服務(wù)器在所述zookeeper創(chuàng)建一個與所述任務(wù)唯一對應(yīng)的第一臨時目錄。
其中,第一臨時目錄也可以稱作臨時節(jié)點,是一種數(shù)據(jù)存儲方式,有點像文件夾,在一個臨時目錄下可以再創(chuàng)建子臨時目錄,也可以記錄數(shù)據(jù)。需要指出的是,臨時目錄的名稱與任務(wù)對應(yīng),一個任務(wù)對應(yīng)一個臨時目錄的名稱,而臨時目錄的名稱與服務(wù)器的代碼有關(guān),當不同服務(wù)器的代碼相同時,該不同服務(wù)器為同一個任務(wù)創(chuàng)建的臨時目錄的名稱是相同的。
其中,第一臨時目錄記錄的數(shù)據(jù)包括:創(chuàng)建所述第一臨時目錄的服務(wù)器的ip地址,以便于用戶獲知是哪一個服務(wù)器創(chuàng)建第一臨時目錄??蛇x地,所述第一臨時目錄記錄的數(shù)據(jù)還包括:該第一臨時目錄的創(chuàng)建時間等。
步驟s14,所述第一服務(wù)器執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)。
具體地,當?shù)谝环?wù)器成功在zookeeper創(chuàng)建第一臨時目錄后,該第一服務(wù)器具備執(zhí)行該第一臨時目錄對應(yīng)的任務(wù)的資格。
由于只有一臺服務(wù)器的任務(wù)會在zookeeper創(chuàng)建臨時目錄成功,且臨時目錄都是在zookeeper上創(chuàng)建,因此,服務(wù)器本身的時間存在偏差時也不會影響zookeeper的時間,從而保證同一個任務(wù)不會因為服務(wù)器本身的時間存在偏差而導(dǎo)致重復(fù)執(zhí)行。
可選地,在所述步驟s13之后,包括:
a1、所述第一服務(wù)器發(fā)送tcp心跳至所述zookeeper,以使所述zookeeper判斷所述第一服務(wù)器是否能夠正常通信。具體地,第一服務(wù)器定時向zookeeper發(fā)送tcp心跳,若該zookeeper接收到第一服務(wù)器發(fā)送的tcp心跳,則判定該第一服務(wù)器還能正常通信,否則,若在超出預(yù)設(shè)時長閾值還沒有接收到該第一服務(wù)器發(fā)送的tcp心跳,則判定該第一服務(wù)器失去聯(lián)系,不能正常通信(當?shù)诙?wù)器發(fā)生故障時,該第二服務(wù)器不能與zookeeper正常通信,發(fā)生的故障例如硬件故障、內(nèi)存溢出、網(wǎng)絡(luò)問題等)。
a2、在所述zookeeper判斷出所述第一服務(wù)器不能夠正常通信時,刪除所述第一服務(wù)器創(chuàng)建的第一臨時目錄。可選地,在a2之后,所述zookeeper將刪除記錄存入對應(yīng)的日志,以便于后續(xù)查找。其中,刪除記錄包括刪除的第一臨時目錄的信息(如名稱、創(chuàng)建的服務(wù)器的ip、刪除時間等)。
可選地,在所述步驟s13之后,包括:
b1、第二服務(wù)器向所述第一臨時目錄注冊監(jiān)聽事件,以監(jiān)聽所述第一臨時目錄是否被刪除。需要指出的是,該第二服務(wù)器為與第一服務(wù)器不同的服務(wù)器,該“第一”、“第二”僅用于區(qū)分不同的服務(wù)器,并無先后順序之分。另外,該第二服務(wù)器的個數(shù)可以為1個,也可以為多個。
b2、在所述第一臨時目錄被刪除時,所述第二服務(wù)器向所述zookeeper發(fā)送第二臨時目錄創(chuàng)建請求。當?shù)诙?wù)器(一個或多個服務(wù)器)監(jiān)測到第一服務(wù)器在zookeeper創(chuàng)建的第一臨時目錄被刪除后,則向zookeeper發(fā)送第二臨時目錄創(chuàng)建請求。
b3、若接收到所述zookeeper發(fā)送的包含同意創(chuàng)建第二臨時目錄的信息,所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行所述任務(wù)。所述zookeeper若接收到多個第二臨時目錄創(chuàng)建請求,則同樣只選擇其中一個服務(wù)器作為創(chuàng)建第二臨時目錄的第二服務(wù)器,并向選擇的第二服務(wù)器返回包含同意創(chuàng)建第二臨時目錄的信息,第二服務(wù)器接收到信息后向所述zookeeper創(chuàng)建與中斷的任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行該任務(wù)。需要指出是,當?shù)诙?wù)器的代碼與第一服務(wù)器的代碼相同時,由于其還是執(zhí)行同一個任務(wù),因此其創(chuàng)建的第二臨時目錄的名稱與第一臨時目錄的名稱相同,這是因為服務(wù)器代碼控制不同的定時任務(wù)對應(yīng)的臨時目錄名稱不同,不同的定時任務(wù)監(jiān)聽的目錄是不同的。
可選地,為了節(jié)省資源,則第二服務(wù)器從任務(wù)中斷的地方開始執(zhí)行,對應(yīng)地,所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行所述任務(wù),包括:
c1、所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄。
c2、所述第二服務(wù)器判斷所述zookeeper是否記錄所述第一服務(wù)器執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度。其中,這里的執(zhí)行進度主要是指任務(wù)的當前執(zhí)行程度,完成度是指對任務(wù)的完成情況,例如,假設(shè)一個任務(wù)有多個子任務(wù),則任務(wù)的執(zhí)行進度對應(yīng)子任務(wù)的完成個數(shù),完成度對應(yīng)每個子任務(wù)的完成情況,例如,哪個子任務(wù)已執(zhí)行完成,哪個子任務(wù)沒有執(zhí)行完成的描述等。
c3、在所述zookeeper記錄所述第一服務(wù)器執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度時,所述第二服務(wù)器根據(jù)所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度繼續(xù)執(zhí)行所述任務(wù)。具體地,第二服務(wù)器根據(jù)zookeeper記錄的任務(wù)的執(zhí)行進度及完成度查找任務(wù)的中斷點,再從中斷點繼續(xù)執(zhí)行。由于直接從任務(wù)的中斷點開始執(zhí)行,因此,節(jié)省了重新開始執(zhí)行任務(wù)的時間,也節(jié)省了第二服務(wù)器重新執(zhí)行任務(wù)所耗費的資源。
可選地,為了能夠準確判斷任務(wù)的執(zhí)行進度及完成度,所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行所述任務(wù),包括:
d1、所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄。
d2、所述第二服務(wù)器判斷所述zookeeper是否記錄所述第一服務(wù)器執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度。
d3、在所述zookeeper記錄所述第一服務(wù)器執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度時,所述第二服務(wù)器判斷所述任務(wù)是否與數(shù)據(jù)庫有關(guān)。具體地,當任務(wù)涉及修改(包括新增或刪除或修改)數(shù)據(jù)庫的數(shù)據(jù)時,判定任務(wù)與數(shù)據(jù)庫有關(guān)。
d4、在所述任務(wù)與數(shù)據(jù)庫有關(guān)時,所述第二服務(wù)器獲取所述數(shù)據(jù)庫中與所述任務(wù)有關(guān)的信息。其中,與任務(wù)有關(guān)的信息包括數(shù)據(jù)庫記錄的任務(wù)的執(zhí)行進度及完成度,當然,還可以包括數(shù)據(jù)庫中被修改的數(shù)據(jù)的信息(如被修改的數(shù)據(jù)的位置,是否被修改完成的描述等)。
d5、所述第二服務(wù)器根據(jù)獲取的所述數(shù)據(jù)庫中與所述任務(wù)有關(guān)的信息驗證所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度是否準確。具體地,當獲取的數(shù)據(jù)庫中與任務(wù)有關(guān)的信息僅為任務(wù)的執(zhí)行進度及完成度時,則將數(shù)據(jù)庫獲取的任務(wù)的執(zhí)行進度及完成度與zookeeper記錄的任務(wù)的執(zhí)行進度及完成度比較,若兩者完全相同,則判定zookeeper記錄的任務(wù)的執(zhí)行進度及完成度是準確的,否則,判定zookeeper記錄的任務(wù)的執(zhí)行進度及完成度是不準確的。
當獲取的數(shù)據(jù)庫中與任務(wù)有關(guān)的信息包括任務(wù)的執(zhí)行進度及完成度,也包括數(shù)據(jù)庫中被修改的數(shù)據(jù)的信息時,則首先根據(jù)數(shù)據(jù)庫中被修改的數(shù)據(jù)的信息驗證數(shù)據(jù)庫中與任務(wù)有關(guān)的信息包括任務(wù)的執(zhí)行進度及完成度是否準確,若準確,則繼續(xù)將數(shù)據(jù)庫獲取的任務(wù)的執(zhí)行進度及完成度與zookeeper記錄的任務(wù)的執(zhí)行進度及完成度比較,以進一步驗證zookeeper記錄的任務(wù)的執(zhí)行進度及完成度是否準確。
d6、在所述第二服務(wù)器驗證出所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度準確時,根據(jù)所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度繼續(xù)執(zhí)行所述任務(wù)。在所述第二服務(wù)器驗證出所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度不準確時,校正所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度,并根據(jù)校正后的所述zookeeper記錄的任務(wù)的執(zhí)行進度及完成度繼續(xù)執(zhí)行所述任務(wù)。
由于對zookeeper記錄的任務(wù)的執(zhí)行進度及完成度進行校驗,因此,確保任務(wù)的執(zhí)行進度及完成度是準確的,進而確保任務(wù)的中斷點是準確的,從而提高繼續(xù)執(zhí)行任務(wù)的開始點的精確性。
本發(fā)明實施例中,由于zookeeper保證并發(fā)只有唯一一臺服務(wù)器執(zhí)行任務(wù),且當服務(wù)器故障時也能保證其他服務(wù)器接管任務(wù)繼續(xù)執(zhí)行,因此,不會出現(xiàn)多個服務(wù)器同時執(zhí)行同一個任務(wù)的情況,從而減少了由于同時執(zhí)行同一個任務(wù)導(dǎo)致的服務(wù)器故障。
應(yīng)理解,上述實施例中各步驟的序號的大小并不意味著執(zhí)行順序的先后,各過程的執(zhí)行順序應(yīng)以其功能和內(nèi)在邏輯確定,而不應(yīng)對本發(fā)明實施例的實施過程構(gòu)成任何限定。
對應(yīng)于上文實施例所述的任務(wù)處理方法,圖2示出了本發(fā)明實施例提供的一種任務(wù)處理系統(tǒng)的結(jié)構(gòu)示意圖,為了便于說明,僅示出了與本發(fā)明實施例相關(guān)的部分。
參照圖2,該系統(tǒng)2包括:一個或多個服務(wù)器21、zookeeper22,其中,所述一個或多個服務(wù)器包括第一服務(wù)器211。
所述一個或多個服務(wù)器21用于在執(zhí)行任務(wù)之前,向分布式應(yīng)用程序協(xié)調(diào)服務(wù)zookeeper發(fā)送第一臨時目錄創(chuàng)建請求。
所述zookeeper22用于選擇一個服務(wù)器,向被選擇的服務(wù)器發(fā)送包含同意創(chuàng)建第一臨時目錄的信息,所述被選擇的服務(wù)器為第一服務(wù)器。
當只有一個服務(wù)器向zookeeper22發(fā)送第一臨時目錄創(chuàng)建請求時,該zookeeper選擇該服務(wù)器作為第一服務(wù)器,并同意所述第一服務(wù)器創(chuàng)建第一臨時目錄。
當有多個服務(wù)器向zookeeper22發(fā)送第一臨時目錄創(chuàng)建請求時,zookeeper22只會同意其中一個服務(wù)器創(chuàng)建第一臨時目錄??蛇x地,zookeeper22根據(jù)接收到第一臨時目錄創(chuàng)建請求的先后順序選擇同意哪一個服務(wù)器創(chuàng)建第一臨時目錄,比如,只同意最先發(fā)送第一臨時目錄創(chuàng)建請求的服務(wù)器創(chuàng)建第一臨時目錄。當然,zookeeper22也可根據(jù)服務(wù)器的優(yōu)先權(quán)選擇優(yōu)先權(quán)最高的服務(wù)器創(chuàng)建第一臨時目錄。其中,服務(wù)器的優(yōu)先權(quán)可根據(jù)服務(wù)器完成任務(wù)的情況設(shè)定,比如,統(tǒng)計一段時間內(nèi)各個服務(wù)器完成任務(wù)的情況,若服務(wù)器能夠完整完成一個任務(wù)而不出現(xiàn)故障,則該服務(wù)器對應(yīng)的權(quán)值增大,當權(quán)值增大到一定值,則將該服務(wù)器的優(yōu)先級提高一個等級。同理,若服務(wù)器在執(zhí)行一個任務(wù)過程中出現(xiàn)故障而中斷任務(wù)的執(zhí)行,則減小該服務(wù)器對應(yīng)的權(quán)重,當權(quán)值減小到一定值,則將該服務(wù)器的優(yōu)先級降低一個等級。
所述第一服務(wù)器211用于在所述zookeeper22創(chuàng)建一個與所述任務(wù)唯一對應(yīng)的第一臨時目錄,并執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)。
其中,第一臨時目錄記錄的數(shù)據(jù)包括:創(chuàng)建所述第一臨時目錄的服務(wù)器的ip地址,以便于用戶獲知是哪一個服務(wù)器創(chuàng)建第一臨時目錄??蛇x地,所述第一臨時目錄記錄的數(shù)據(jù)還包括:該第一臨時目錄的創(chuàng)建時間等。
可選地,所述第一服務(wù)器211還用于發(fā)送tcp心跳至所述zookeeper22,以使所述zookeeper22判斷所述第一服務(wù)器211是否能夠正常通信。具體地,第一服務(wù)器211定時向zookeeper22發(fā)送tcp心跳,若該zookeeper22接收到第一服務(wù)器211發(fā)送的tcp心跳,則判定該第一服務(wù)器211還能正常通信,否則,若在超出預(yù)設(shè)時長閾值還沒有接收到該第一服務(wù)器211發(fā)送的tcp心跳,則判定該第一服務(wù)器211失去聯(lián)系,不能正常通信(當?shù)诙?wù)器發(fā)生故障時,該第二服務(wù)器不能與zookeeper22正常通信,發(fā)生的故障例如硬件故障、內(nèi)存溢出、網(wǎng)絡(luò)問題等)。
所述zookeeper22還用于在判斷出所述第一服務(wù)器211不能夠正常通信時,刪除所述第一服務(wù)器211創(chuàng)建的第一臨時目錄。
可選地,所述zookeeper22還用于將刪除記錄存入對應(yīng)的日志,以便于后續(xù)查找。其中,刪除記錄包括刪除的第一臨時目錄的信息(如名稱、創(chuàng)建的服務(wù)器的ip、刪除時間等)。
可選地,所述任務(wù)處理系統(tǒng)包括第二服務(wù)器。
所述第二服務(wù)器用于向所述第一臨時目錄注冊監(jiān)聽事件,以監(jiān)聽所述第一臨時目錄是否被刪除。需要指出的是,該第二服務(wù)器為與第一服務(wù)器211不同的服務(wù)器,該“第一”、“第二”僅用于區(qū)分不同的服務(wù)器,并無先后順序之分。另外,該第二服務(wù)器的個數(shù)可以為1個,也可以為多個。
在所述第一臨時目錄被刪除時,所述第二服務(wù)器向所述zookeeper22發(fā)送第二臨時目錄創(chuàng)建請求。
若接收到所述zookeeper22發(fā)送的包含同意創(chuàng)建第二臨時目錄的信息,所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行所述任務(wù)。當?shù)诙?wù)器的代碼與第一服務(wù)器211的代碼相同時,由于其還是執(zhí)行同一個任務(wù),因此其創(chuàng)建的第二臨時目錄的名稱與第一臨時目錄的名稱相同,這是因為服務(wù)器代碼控制不同的定時任務(wù)對應(yīng)的臨時目錄名稱不同,不同的定時任務(wù)監(jiān)聽的目錄是不同的。
可選地,為了節(jié)省資源,則第二服務(wù)器從任務(wù)中斷的地方開始執(zhí)行,對應(yīng)所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行所述任務(wù),包括:
所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄。
所述第二服務(wù)器判斷所述zookeeper22是否記錄所述第一服務(wù)器211執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度。其中,這里的執(zhí)行進度主要是指任務(wù)的當前執(zhí)行程度,完成度是指對任務(wù)的完成情況,例如,假設(shè)一個任務(wù)有多個子任務(wù),則任務(wù)的執(zhí)行進度對應(yīng)子任務(wù)的完成個數(shù),完成度對應(yīng)每個子任務(wù)的完成情況,例如,哪個子任務(wù)已執(zhí)行完成,哪個子任務(wù)沒有執(zhí)行完成的描述等。
在所述zookeeper22記錄所述第一服務(wù)器211執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度時,所述第二服務(wù)器根據(jù)所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度繼續(xù)執(zhí)行所述任務(wù)。
可選地,為了能夠準確判斷任務(wù)的執(zhí)行進度及完成度,所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄,并執(zhí)行所述任務(wù),包括:
所述第二服務(wù)器創(chuàng)建與所述任務(wù)對應(yīng)的第二臨時目錄。
所述第二服務(wù)器判斷所述zookeeper22是否記錄所述第一服務(wù)器211執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度。
在所述zookeeper22記錄所述第一服務(wù)器211執(zhí)行所述第一臨時目錄對應(yīng)的任務(wù)的執(zhí)行進度及完成度時,所述第二服務(wù)器判斷所述任務(wù)是否與數(shù)據(jù)庫有關(guān)。具體地,當任務(wù)涉及修改(包括新增或刪除或修改)數(shù)據(jù)庫的數(shù)據(jù)時,判定任務(wù)與數(shù)據(jù)庫有關(guān)。
在所述任務(wù)與數(shù)據(jù)庫有關(guān)時,所述第二服務(wù)器獲取所述數(shù)據(jù)庫中與所述任務(wù)有關(guān)的信息。其中,與任務(wù)有關(guān)的信息包括數(shù)據(jù)庫記錄的任務(wù)的執(zhí)行進度及完成度,當然,還可以包括數(shù)據(jù)庫中被修改的數(shù)據(jù)的信息(如被修改的數(shù)據(jù)的位置,是否被修改完成的描述等)。
所述第二服務(wù)器根據(jù)獲取的所述數(shù)據(jù)庫中與所述任務(wù)有關(guān)的信息驗證所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度是否準確。具體地,當獲取的數(shù)據(jù)庫中與任務(wù)有關(guān)的信息僅為任務(wù)的執(zhí)行進度及完成度時,則將數(shù)據(jù)庫獲取的任務(wù)的執(zhí)行進度及完成度與zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度比較,若兩者完全相同,則判定zookeeper記錄的任務(wù)的執(zhí)行進度及完成度是準確的,否則,判定zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度是不準確的。當獲取的數(shù)據(jù)庫中與任務(wù)有關(guān)的信息包括任務(wù)的執(zhí)行進度及完成度,也包括數(shù)據(jù)庫中被修改的數(shù)據(jù)的信息時,則首先根據(jù)數(shù)據(jù)庫中被修改的數(shù)據(jù)的信息驗證數(shù)據(jù)庫中與任務(wù)有關(guān)的信息包括任務(wù)的執(zhí)行進度及完成度是否準確,若準確,則繼續(xù)將數(shù)據(jù)庫獲取的任務(wù)的執(zhí)行進度及完成度與zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度比較,以進一步驗證zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度是否準確。
在所述第二服務(wù)器驗證出所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度準確時,根據(jù)所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度繼續(xù)執(zhí)行所述任務(wù)。在所述第二服務(wù)器驗證出所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度不準確時,校正所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度,并根據(jù)校正后的所述zookeeper22記錄的任務(wù)的執(zhí)行進度及完成度繼續(xù)執(zhí)行所述任務(wù)。
本發(fā)明實施例中,由于zookeeper保證并發(fā)只有唯一一臺服務(wù)器執(zhí)行任務(wù),且當服務(wù)器故障時也能保證其他服務(wù)器接管任務(wù)繼續(xù)執(zhí)行,因此,不會出現(xiàn)多個服務(wù)器同時執(zhí)行同一個任務(wù)的情況,從而減少了由于同時執(zhí)行同一個任務(wù)導(dǎo)致的服務(wù)器故障。
所屬領(lǐng)域的技術(shù)人員可以清楚地了解到,為了描述的方便和簡潔,僅以上述各功能單元、模塊的劃分進行舉例說明,實際應(yīng)用中,可以根據(jù)需要而將上述功能分配由不同的功能單元、模塊完成,即將所述裝置的內(nèi)部結(jié)構(gòu)劃分成不同的功能單元或模塊,以完成以上描述的全部或者部分功能。實施例中的各功能單元、模塊可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中,上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。另外,各功能單元、模塊的具體名稱也只是為了便于相互區(qū)分,并不用于限制本申請的保護范圍。上述系統(tǒng)中單元、模塊的具體工作過程,可以參考前述方法實施例中的對應(yīng)過程,在此不再贅述。
在上述實施例中,對各個實施例的描述都各有側(cè)重,某個實施例中沒有詳述或記載的部分,可以參見其它實施例的相關(guān)描述。
本領(lǐng)域普通技術(shù)人員可以意識到,結(jié)合本文中所公開的實施例描述的各示例的單元及算法步驟,能夠以電子硬件、或者計算機軟件和電子硬件的結(jié)合來實現(xiàn)。這些功能究竟以硬件還是軟件方式來執(zhí)行,取決于技術(shù)方案的特定應(yīng)用和設(shè)計約束條件。專業(yè)技術(shù)人員可以對每個特定的應(yīng)用來使用不同方法來實現(xiàn)所描述的功能,但是這種實現(xiàn)不應(yīng)認為超出本發(fā)明的范圍。
在本發(fā)明所提供的實施例中,應(yīng)該理解到,所揭露的裝置和方法,可以通過其它的方式實現(xiàn)。例如,以上所描述的系統(tǒng)實施例僅僅是示意性的,例如,所述模塊或單元的劃分,僅僅為一種邏輯功能劃分,實際實現(xiàn)時可以有另外的劃分方式,例如多個單元或組件可以結(jié)合或者可以集成到另一個系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點,所顯示或討論的相互之間的耦合或直接耦合或通訊連接可以是通過一些接口,裝置或單元的間接耦合或通訊連接,可以是電性,機械或其它的形式。
所述作為分離部件說明的單元可以是或者也可以不是物理上分開的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個地方,或者也可以分布到多個網(wǎng)絡(luò)單元上??梢愿鶕?jù)實際的需要選擇其中的部分或者全部單元來實現(xiàn)本實施例方案的目的。
另外,在本發(fā)明各個實施例中的各功能單元可以集成在一個處理單元中,也可以是各個單元單獨物理存在,也可以兩個或兩個以上單元集成在一個單元中。上述集成的單元既可以采用硬件的形式實現(xiàn),也可以采用軟件功能單元的形式實現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明實施例的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)或處理器(processor)執(zhí)行本發(fā)明實施例各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:u盤、移動硬盤、只讀存儲器(rom,read-onlymemory)、隨機存取存儲器(ram,randomaccessmemory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。
以上所述實施例僅用以說明本發(fā)明的技術(shù)方案,而非對其限制;盡管參照前述實施例對本發(fā)明進行了詳細的說明,本領(lǐng)域的普通技術(shù)人員應(yīng)當理解:其依然可以對前述各實施例所記載的技術(shù)方案進行修改,或者對其中部分技術(shù)特征進行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實施例技術(shù)方案的精神和范圍,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。