本發(fā)明涉及計(jì)算機(jī)處理領(lǐng)域,特別是涉及一種分布式任務(wù)調(diào)度方法和系統(tǒng)。
背景技術(shù):
分布式任務(wù)調(diào)度,是指將一個(gè)應(yīng)用或者業(yè)務(wù)劃分出的多個(gè)任務(wù)交由多個(gè)服務(wù)器進(jìn)行處理。分布式任務(wù)調(diào)度可解決單個(gè)服務(wù)器資源不足等問(wèn)題,達(dá)到大規(guī)模數(shù)據(jù)計(jì)算的目的。傳統(tǒng)的分布式框架有很多,例如,quartz、zookeeper等技術(shù)都可以實(shí)現(xiàn)分布式任務(wù)調(diào)度。其中,quartz的集群方式是利用數(shù)據(jù)庫(kù)的鎖,同一時(shí)間只允許有一臺(tái)服務(wù)器能拿到鎖執(zhí)行任務(wù),沒(méi)有利用集群的優(yōu)勢(shì)并行執(zhí)行,處理的速度比較慢。zookeeper是分布式應(yīng)用程序協(xié)調(diào)服務(wù),其對(duì)數(shù)據(jù)進(jìn)行分片,分配給多個(gè)應(yīng)用服務(wù)器去執(zhí)行處理,實(shí)現(xiàn)了并行執(zhí)行,從而提升了處理速度。但是由于zookeeper往往需要管理很多應(yīng)用服務(wù)器,每個(gè)任務(wù)開始及結(jié)束的記錄也都需要寫入zookeeper,造成zookeeper的負(fù)擔(dān)比較重,而且如果要加入新的應(yīng)用服務(wù)器,也需要在zookeeper上進(jìn)行操作,進(jìn)一步加大了其負(fù)擔(dān),且不能實(shí)現(xiàn)應(yīng)用服務(wù)器的動(dòng)態(tài)擴(kuò)充。
技術(shù)實(shí)現(xiàn)要素:
基于此,有必要針對(duì)上述問(wèn)題,提出一種能夠減少zookeeper的負(fù)擔(dān)且可以動(dòng)態(tài)進(jìn)行應(yīng)用服務(wù)器擴(kuò)充的分布式任務(wù)調(diào)度的方法和系統(tǒng)。
一種分布式任務(wù)調(diào)度系統(tǒng),所述系統(tǒng)包括:應(yīng)用服務(wù)器,所述應(yīng)用服務(wù)器有多個(gè),用于與中間服務(wù)器建立tcp連接,將ip地址和job信息注冊(cè)到所述中間服務(wù)器;中間服務(wù)器,所述中間服務(wù)器有多個(gè),用于管理應(yīng)用服務(wù)器,獲取所述應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息,將具有相同job信息的應(yīng)用服務(wù)器劃分為一個(gè)job群組,在該job群組中的多個(gè)應(yīng)用服務(wù)器中選舉出一個(gè)leader應(yīng)用服務(wù)器,并將對(duì)應(yīng)的任務(wù)配置信息和job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址下發(fā)到該leader應(yīng)用服務(wù)器;所述leader應(yīng)用服務(wù)器用于根據(jù)所述任務(wù)配置信息中的分片數(shù)將任務(wù)進(jìn)行拆分,并根據(jù)job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址將拆分后的子任務(wù)進(jìn)行分配;所述應(yīng)用服務(wù)器還用于執(zhí)行被分配的子任務(wù);分布式協(xié)調(diào)服務(wù)器,用于部署zookeeper,與所述中間服務(wù)器建立連接,由所述zookeeper統(tǒng)一對(duì)所述中間服務(wù)器進(jìn)行協(xié)調(diào)。
在其中一個(gè)實(shí)施例中,所述中間服務(wù)器還用于根據(jù)所述job信息查找實(shí)際管理該job的目標(biāo)中間服務(wù)器,將所述目標(biāo)中間服務(wù)器的地址返回給所述應(yīng)用服務(wù)器;所述應(yīng)用服務(wù)器還用于根據(jù)所述目標(biāo)中間服務(wù)器的地址與所述目標(biāo)中間服務(wù)器建立tcp連接。
在其中一個(gè)實(shí)施例中,所述中間服務(wù)器還用于監(jiān)控job群組中的應(yīng)用服務(wù)器的上線或下線,當(dāng)job群組中有應(yīng)用服務(wù)器上線或下線時(shí),指示job群組中的leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配,并接收所述leader應(yīng)用服務(wù)器返回的新的分配結(jié)果。
在其中一個(gè)實(shí)施例中,所述分布式協(xié)調(diào)服務(wù)器還用于通過(guò)zookeeper在多個(gè)中間服務(wù)器中選舉出一個(gè)leader中間服務(wù)器;所述leader中間服務(wù)器還用于實(shí)時(shí)監(jiān)控集群中其他中間服務(wù)器節(jié)點(diǎn),若發(fā)現(xiàn)有中間服務(wù)器掉線,則為所述掉線的中間服務(wù)器管理的job群組分配給一個(gè)在線的中間服務(wù)器來(lái)接管,并在所述job群組中設(shè)置migrate節(jié)點(diǎn),所述migrate節(jié)點(diǎn)用于標(biāo)注job群組的遷移狀態(tài),當(dāng)遷移完成后,刪除該migrate節(jié)點(diǎn);所述中間服務(wù)器還用于實(shí)時(shí)監(jiān)控job群組下的migrate節(jié)點(diǎn),若發(fā)現(xiàn)所述migrate節(jié)點(diǎn)的ip地址和自身的相同,則接管所述migrate節(jié)點(diǎn)所在的job群組。
在其中一個(gè)實(shí)施例中,所述leader中間服務(wù)器還用于若監(jiān)控到有中間服務(wù)器掉線,則判斷所述掉線的中間服務(wù)器是否正在接管job群組,若是,則為該job群組重新分配接管的中間服務(wù)器。
在其中一個(gè)實(shí)施例中,所述應(yīng)用服務(wù)器還用于根據(jù)所述job信息判斷是否到達(dá)任務(wù)的執(zhí)行時(shí)間,若是,則從管理該應(yīng)用服務(wù)器的中間服務(wù)器中獲取對(duì)應(yīng)的分片信息,根據(jù)所述分片信息開始執(zhí)行對(duì)應(yīng)的子任務(wù),并將任務(wù)開始執(zhí)行的信息記錄到中間服務(wù)器。
在其中一個(gè)實(shí)施例中,所述系統(tǒng)還包括:數(shù)據(jù)庫(kù),用于存儲(chǔ)job信息,接收中間服務(wù)器發(fā)送的任務(wù)開始及結(jié)束的記錄并進(jìn)行存儲(chǔ)。
一種分布式任務(wù)調(diào)度方法,所述方法包括:應(yīng)用服務(wù)器向中間服務(wù)器發(fā)起tcp連接請(qǐng)求,所述中間服務(wù)器根據(jù)所述tcp連接請(qǐng)求與所述應(yīng)用服務(wù)器建立tcp連接;所述應(yīng)用服務(wù)器向所述中間服務(wù)器注冊(cè)該應(yīng)用服務(wù)器的ip地址和job信息;所述中間服務(wù)器獲取所述應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息,將具有相同job信息的應(yīng)用服務(wù)器劃分為同一個(gè)job群組,在該job群組中的多個(gè)應(yīng)用服務(wù)器中選舉出一個(gè)leader應(yīng)用服務(wù)器,將所述job信息對(duì)應(yīng)的任務(wù)配置信息和job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址下發(fā)到所述leader應(yīng)用服務(wù)器;所述leader應(yīng)用服務(wù)器根據(jù)所述任務(wù)配置信息中的分片數(shù)將任務(wù)進(jìn)行拆分,并根據(jù)job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址將拆分后的子任務(wù)進(jìn)行分配。
在其中一個(gè)實(shí)施例中,在所述中間服務(wù)器獲取所述應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息的步驟之后還包括:所述中間服務(wù)器根據(jù)所述job信息查找實(shí)際管理該job的目標(biāo)中間服務(wù)器,將所述目標(biāo)中間服務(wù)器的地址返回給應(yīng)用服務(wù)器;所述應(yīng)用服務(wù)器根據(jù)所述目標(biāo)中間服務(wù)器的地址和所述目標(biāo)中間服務(wù)器建立tcp連接。
在其中一個(gè)實(shí)施例中,所述方法還包括:所述中間服務(wù)器監(jiān)控job群組中的應(yīng)用服務(wù)器的上線或下線,當(dāng)job群組中有應(yīng)用服務(wù)器上線或下線時(shí),指示job群組中的leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配;所述leader應(yīng)用服務(wù)器按照所述指示根據(jù)job群組中當(dāng)前在線的應(yīng)用服務(wù)器數(shù)量將所述任務(wù)進(jìn)行重新分配,并將分配結(jié)果返回給所述中間服務(wù)器。
上述分布式任務(wù)調(diào)度方法和系統(tǒng),通過(guò)引入多個(gè)中間服務(wù)器來(lái)管理應(yīng)用服務(wù)器,分布式協(xié)調(diào)服務(wù)器中部署的zookeeper只需要對(duì)中間服務(wù)器進(jìn)行協(xié)調(diào),由于應(yīng)用服務(wù)器由中間服務(wù)器來(lái)管理,任務(wù)的開始以及結(jié)束的記錄都只需要寫入中間服務(wù)器,而不需要寫入zookeeper,減少了zookeeper的負(fù)擔(dān),且一個(gè)中間服務(wù)器可以管理多個(gè)應(yīng)用服務(wù)器,zookeeper只需要對(duì)少量的中間服務(wù)器進(jìn)行協(xié)調(diào)管理即可,大大減少了zookeeper的負(fù)擔(dān),進(jìn)一度的,由于由中間服務(wù)器來(lái)管理應(yīng)用服務(wù)器,如果需要擴(kuò)充應(yīng)用服務(wù)器,只需要在中間服務(wù)器中進(jìn)行注冊(cè)即可,不需要在zookeeper進(jìn)行操作,從而實(shí)現(xiàn)了能夠動(dòng)態(tài)擴(kuò)充應(yīng)用服務(wù)器的目的。
附圖說(shuō)明
圖1為一個(gè)實(shí)施例中分布式任務(wù)調(diào)度系統(tǒng)的架構(gòu)圖;
圖2為一個(gè)實(shí)施例中zookeeper的目錄結(jié)構(gòu)圖;
圖3為另一個(gè)實(shí)施例中分布式任務(wù)調(diào)度系統(tǒng)的架構(gòu)圖;
圖4為一個(gè)實(shí)施例中分布式任務(wù)調(diào)度方法流程圖;
圖5為另一個(gè)實(shí)施例中分布式任務(wù)調(diào)度方法流程圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說(shuō)明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
如圖1所示,在一個(gè)實(shí)施例中,提出了一種分布式任務(wù)調(diào)度系統(tǒng),該系統(tǒng)包括:應(yīng)用服務(wù)器102,中間服務(wù)器104和分布式協(xié)調(diào)服務(wù)器106;其中,
應(yīng)用服務(wù)器102,應(yīng)用服務(wù)器有多個(gè),用于與中間服務(wù)器建立tcp連接,將ip地址和job信息注冊(cè)到中間服務(wù)器。
在本實(shí)施例中,應(yīng)用服務(wù)器102有多個(gè),應(yīng)用服務(wù)器是具體執(zhí)行任務(wù)的服務(wù)器,由于是和客戶端直接交互的,也稱為“客戶端應(yīng)用服務(wù)器”。應(yīng)用服務(wù)器102與中間服務(wù)器104建立tcp連接后,將該應(yīng)用服務(wù)器102的ip地址和job信息注冊(cè)到中間服務(wù)器106。其中,job信息包括任務(wù)配置信息、任務(wù)標(biāo)識(shí)、任務(wù)執(zhí)行時(shí)間等,任務(wù)標(biāo)識(shí)用來(lái)唯一標(biāo)識(shí)一個(gè)任務(wù),可以是任務(wù)的編號(hào),如圖1中所示,其中一個(gè)應(yīng)用服務(wù)器102中包括job1,job2,job3。其中,job1,job2,job3分別代表不同的任務(wù)。在本實(shí)施例中,為了能夠快速執(zhí)行任務(wù),一般是將一個(gè)任務(wù)拆分為多個(gè)子任務(wù),然后分配給多個(gè)應(yīng)用服務(wù)器106來(lái)并行執(zhí)行的,每個(gè)應(yīng)用服務(wù)器106只需要執(zhí)行被分配的子任務(wù)即可。
中間服務(wù)器104,中間服務(wù)器有多個(gè),用于管理應(yīng)用服務(wù)器,獲取應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息,將具有相同job信息的應(yīng)用服務(wù)器劃分為一個(gè)job群組,在該job群組中的多個(gè)應(yīng)用服務(wù)器中選舉出一個(gè)leader應(yīng)用服務(wù)器,并將對(duì)應(yīng)的任務(wù)配置信息和job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址下發(fā)到該leader應(yīng)用服務(wù)器;該leader應(yīng)用服務(wù)器根據(jù)任務(wù)配置信息中的分片數(shù)將任務(wù)進(jìn)行拆分,并根據(jù)job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址將拆分后的子任務(wù)進(jìn)行分配。
在本實(shí)施例中,中間服務(wù)器104也有多個(gè),但是比應(yīng)用服務(wù)器102的數(shù)量少很多,中間服務(wù)器用于管理應(yīng)用服務(wù)器,首先,中間服務(wù)器104獲取應(yīng)用服務(wù)器102注冊(cè)的ip地址和job信息,然后將具有相同job信息的應(yīng)用服務(wù)器劃分為一個(gè)job群組,比如,如果應(yīng)用服務(wù)器1和應(yīng)用服務(wù)器2以及應(yīng)用服務(wù)器3都具有相同的job1,那么該job1群組中就包括應(yīng)用服務(wù)器1、2和3。然后,在job群組中的多個(gè)應(yīng)用服務(wù)器中選舉出一個(gè)leader應(yīng)用服務(wù)器,一般是將最早接入該中間服務(wù)器的應(yīng)用服務(wù)器作為leader應(yīng)用服務(wù)器,將該job信息對(duì)應(yīng)的任務(wù)配置信息和群組內(nèi)的多個(gè)應(yīng)用服務(wù)器的ip地址都下發(fā)到該leader應(yīng)用服務(wù)器,由該leader應(yīng)用服務(wù)器進(jìn)行任務(wù)的拆分及分配,其中,任務(wù)配置信息包括任務(wù)的分片數(shù)以及對(duì)應(yīng)的分片算法。需要說(shuō)明的是,雖然leader應(yīng)用服務(wù)器中的job信息中本身包括任務(wù)配置信息,但是job的任務(wù)配置信息是可以通過(guò)后臺(tái)來(lái)動(dòng)態(tài)進(jìn)行修改的,而中間服務(wù)器能夠從后臺(tái)獲取到最新的job任務(wù)配置信息,所以在選舉出leader應(yīng)用服務(wù)器后,中間服務(wù)器會(huì)將最新的job任務(wù)配置信息下發(fā)到leader應(yīng)用服務(wù)器,以便leader應(yīng)用服務(wù)器可以根據(jù)該最新的任務(wù)配置信息進(jìn)行分片。
具體的,leader應(yīng)用服務(wù)器根據(jù)任務(wù)配置信息中的分片數(shù)將任務(wù)進(jìn)行拆分,然后根據(jù)job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址將拆分后的子任務(wù)進(jìn)行分配。比如,任務(wù)配置信息中任務(wù)的分片數(shù)為6個(gè),那么leader應(yīng)用服務(wù)器就按照對(duì)應(yīng)的分片算法將任務(wù)拆分為6個(gè)子任務(wù),然后分配給job群組內(nèi)的應(yīng)用服務(wù)器,包括leader應(yīng)用服務(wù)器本身。其中,應(yīng)用服務(wù)器ip地址用來(lái)唯一標(biāo)識(shí)一個(gè)應(yīng)用服務(wù)器。具體的,比如,6個(gè)子任務(wù)分別為0,1,2,3,4,5;當(dāng)前job群組中包括leader應(yīng)用服務(wù)器在內(nèi)有3個(gè)應(yīng)用服務(wù)器,分別為server1,server2,server3,其中,假設(shè)server1為leader應(yīng)用服務(wù)器。子任務(wù)的分配可以采用輪循的方法、也可以采用順序的分配方法,還可以是其他分配方法,這里并不對(duì)分配的方法作限定。不管是哪種分配方法,leader應(yīng)用服務(wù)器一般是盡量做到平均分配,將6個(gè)子任務(wù)分配給3臺(tái)應(yīng)用服務(wù)器,即每個(gè)應(yīng)用服務(wù)器分配2個(gè)子任務(wù),比如,以順序的分配方法為例,將0和1分配給server1;2和3分配給server2;4和5分配給server3。由于系統(tǒng)中是采用ip地址來(lái)區(qū)分不同的應(yīng)用服務(wù)器的,所以任務(wù)的分配結(jié)果是以群組名、子任務(wù)編號(hào)與ip地址進(jìn)行對(duì)應(yīng)存儲(chǔ)的。比如,將job1群組中的子任務(wù)0和1與server1的ip地址進(jìn)行存儲(chǔ),將job1群組中的子任務(wù)2和3與server2的ip地址進(jìn)行存儲(chǔ),將job1群組中的子任務(wù)4和5與server3的ip地址進(jìn)行存儲(chǔ)。
應(yīng)用服務(wù)器102還用于執(zhí)行被分配的子任務(wù)。
在本實(shí)施例中,leader應(yīng)用服務(wù)器按照任務(wù)配置信息中的分片數(shù)進(jìn)行拆分,然后將拆分后的子任務(wù)分配給job群組中的應(yīng)用服務(wù)器,即將哪個(gè)分片分給哪個(gè)應(yīng)用服務(wù)器來(lái)執(zhí)行,最終是由應(yīng)用服務(wù)器102來(lái)執(zhí)行被分配的子任務(wù)。分布式協(xié)調(diào)服務(wù)器106,用于部署zookeeper,與中間服務(wù)器建立連接,由zookeeper統(tǒng)一對(duì)中間服務(wù)器進(jìn)行協(xié)調(diào)。
在本實(shí)施例中,zookeeper是一個(gè)分布式應(yīng)用程序協(xié)調(diào)服務(wù),部署在分布式協(xié)調(diào)服務(wù)器106中,通過(guò)與中間服務(wù)器建立連接來(lái)對(duì)中間服務(wù)器進(jìn)行協(xié)調(diào)。中間服務(wù)器有多個(gè),zookeeper在該多個(gè)中間服務(wù)器中選擇出一個(gè)leader中間服務(wù)器,由該leader中間服務(wù)器來(lái)監(jiān)控其他中間服務(wù)器,當(dāng)發(fā)現(xiàn)其他某個(gè)中間服務(wù)器掉線或故障時(shí),則將該中間服務(wù)器負(fù)責(zé)管理的群組重新分配給其他中間服務(wù)器來(lái)接管。與此同時(shí),其他中間服務(wù)器同時(shí)監(jiān)控該leader中間服務(wù)器,一旦該leader中間服務(wù)器故障或掉線,則觸發(fā)集群重新選舉leader中間服務(wù)器。這樣,通過(guò)這種監(jiān)控規(guī)則,可以有效的保證在某個(gè)中間服務(wù)器故障或掉線的情況下,應(yīng)用服務(wù)器可以正常的進(jìn)行任務(wù)的執(zhí)行。
在本實(shí)施例中,通過(guò)引入多個(gè)中間服務(wù)器來(lái)管理應(yīng)用服務(wù)器,分布式協(xié)調(diào)服務(wù)器中部署的zookeeper只需要對(duì)中間服務(wù)器進(jìn)行協(xié)調(diào),由于應(yīng)用服務(wù)器由中間服務(wù)器來(lái)管理,任務(wù)的開始以及結(jié)束的記錄都只需要寫入中間服務(wù)器,而不需要寫入zookeeper,減少了zookeeper的負(fù)擔(dān),且一個(gè)中間服務(wù)器可以管理多個(gè)應(yīng)用服務(wù)器,也就是說(shuō),zookeeper只需要對(duì)少量的中間服務(wù)器進(jìn)行協(xié)調(diào)管理即可,大大減少了zookeeper的負(fù)擔(dān),進(jìn)一度的,由于由中間服務(wù)器來(lái)管理應(yīng)用服務(wù)器,如果需要擴(kuò)充應(yīng)用服務(wù)器,只需要在中間服務(wù)器中進(jìn)行注冊(cè)即可,不需要在zookeeper進(jìn)行操作,不但能夠減少zookeeper的負(fù)擔(dān),也能夠?qū)崿F(xiàn)動(dòng)態(tài)擴(kuò)充應(yīng)用服務(wù)器的目的。
在一個(gè)實(shí)施例中,中間服務(wù)器104還用于根據(jù)job信息查找實(shí)際管理該job信息的目標(biāo)中間服務(wù)器,將目標(biāo)中間服務(wù)器的地址返回給應(yīng)用服務(wù)器;應(yīng)用服務(wù)器還用于根據(jù)目標(biāo)中間服務(wù)器的地址與目標(biāo)中間服務(wù)器建立tcp連接。
在本實(shí)施例中,不同的中間服務(wù)器管理不同的job信息。中間服務(wù)器接收到應(yīng)用服務(wù)器注冊(cè)的job信息后,首先,在自身的列表中查找該job信息是否存在,即判斷該job信息是否是由該中間服務(wù)器來(lái)管理的,若沒(méi)有查找到,則需要查找實(shí)際管理該job信息的中間服務(wù)器,即目標(biāo)中間服務(wù)器,獲取該目標(biāo)中間服務(wù)器的ip地址,然后將該目標(biāo)中間服務(wù)器的ip地址返回給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器接收到返回的目標(biāo)中間服務(wù)器的ip地址后,根據(jù)該ip地址與目標(biāo)中間服務(wù)器建立tcp連接,然后申請(qǐng)加入對(duì)應(yīng)的job群組。此外,由于每個(gè)應(yīng)用服務(wù)器中有多個(gè)job,如圖1中所示的,其中一個(gè)應(yīng)用服務(wù)器中包括job1,job2,job3,而job1,job2,job3可能由不同的中間服務(wù)器來(lái)管理,這樣就會(huì)導(dǎo)致一個(gè)應(yīng)用服務(wù)器需要同時(shí)維持多個(gè)tcp通道。為了避免應(yīng)用服務(wù)器同時(shí)維持多個(gè)tcp通道,將同一類job優(yōu)先交由同一個(gè)中間服務(wù)器來(lái)管理,如圖1所示,同一個(gè)應(yīng)用服務(wù)器的job由同一個(gè)中間服務(wù)器管理。
在一個(gè)實(shí)施例中,中間服務(wù)器104還用于監(jiān)控job群組中的應(yīng)用服務(wù)器的上線或下線,當(dāng)job群組中有應(yīng)用服務(wù)器上線或下線時(shí),指示job群組中的leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配,接收l(shuí)eader應(yīng)用服務(wù)器返回的新的分配結(jié)果。
在本實(shí)施例中,中間服務(wù)器104還用于監(jiān)控其維護(hù)的job群組中的應(yīng)用服務(wù)器的上線或下線,當(dāng)有新的應(yīng)用服務(wù)器加入該job群組時(shí),中間服務(wù)器104指示job群組中的leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配,即將子任務(wù)也同時(shí)分配給該新加入的應(yīng)用服務(wù)器進(jìn)行處理。當(dāng)job群組中有應(yīng)用服務(wù)器由于故障或網(wǎng)絡(luò)等問(wèn)題掉線時(shí),中間服務(wù)器104也需要指示leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配。比如,最初job群組中有3臺(tái)應(yīng)用服務(wù)器,任務(wù)分為10個(gè)片,分配結(jié)果如下:{server1:[0,1,2],server2:[3,4,5],server3:[6,7,8,9]},如果一臺(tái)應(yīng)用服務(wù)器崩潰,則重新分配如下:{server1:[0,1,2,3,4],server2:[5,6,7,8,9]}。如果新增一臺(tái)應(yīng)用服務(wù)器,則重新分配如下:{server1:[0,1],server2:[2,3],server3:[4,5,6],server4:[7,8,9]}。leader應(yīng)用服務(wù)器將最新分配的情況更新到中間服務(wù)器。
在一個(gè)實(shí)施例中,分布式協(xié)調(diào)服務(wù)器106還用于通過(guò)zookeeper在多個(gè)中間服務(wù)器中選舉出一個(gè)leader中間服務(wù)器;所述leader中間服務(wù)器用于實(shí)時(shí)監(jiān)控集群中其他中間服務(wù)器節(jié)點(diǎn),若發(fā)現(xiàn)有中間服務(wù)器掉線,則為該掉線的中間服務(wù)器管理的群組重新分配給一個(gè)中間服務(wù)器來(lái)接管,并在群組中設(shè)置migrate(遷移)節(jié)點(diǎn),所述migrate(遷移)節(jié)點(diǎn)用于標(biāo)注job群組的遷移狀態(tài),當(dāng)遷移完成后,刪除該migrate(遷移)節(jié)點(diǎn);所述中間服務(wù)器還用于實(shí)時(shí)監(jiān)控群組下的migrate節(jié)點(diǎn),若發(fā)現(xiàn)migrate節(jié)點(diǎn)的ip地址和自身的相同,則接管該migrate節(jié)點(diǎn)所在的群組。
在本實(shí)施例中,部署有zookeeper的分布式協(xié)調(diào)服務(wù)器106通過(guò)zookeeper在多個(gè)中間服務(wù)器中選舉出一個(gè)leader中間服務(wù)器,如圖2所示,為一個(gè)實(shí)施例中zookeeper的目錄結(jié)構(gòu)示意圖,圖2種左邊為管理中間服務(wù)器的中間服務(wù)器根節(jié)點(diǎn)以及下面的中間服務(wù)器節(jié)點(diǎn)(包括leader中間服務(wù)器節(jié)點(diǎn))。右邊為job群組的根節(jié)點(diǎn)以及對(duì)應(yīng)的job群組節(jié)點(diǎn),還有job群組節(jié)點(diǎn)下的子節(jié)點(diǎn),子節(jié)點(diǎn)包括owner(主)節(jié)點(diǎn),migrate(遷移)節(jié)點(diǎn)和modified(修改)節(jié)點(diǎn)。在本實(shí)施例中,將該leader中間服務(wù)器作為分布式集群的leader節(jié)點(diǎn),該leader節(jié)點(diǎn)用于實(shí)時(shí)監(jiān)控其他中間服務(wù)器節(jié)點(diǎn)(如圖2中的中間服務(wù)器1節(jié)點(diǎn),中間服務(wù)器2節(jié)點(diǎn)),若發(fā)現(xiàn)有中間服務(wù)器掉線,則為掉線的中間服務(wù)器管理的job群組重新分配一個(gè)中間服務(wù)器來(lái)接管,并在該job群組中設(shè)置migrate(遷移)節(jié)點(diǎn),該migrate節(jié)點(diǎn)用于標(biāo)注job群組的遷移狀態(tài),當(dāng)遷移完成后,刪除該migrate節(jié)點(diǎn)。其他中間服務(wù)器實(shí)時(shí)監(jiān)控job群組下的migrate節(jié)點(diǎn),若發(fā)現(xiàn)migrate節(jié)點(diǎn)的ip地址和自身的相同,則接管該migrate節(jié)點(diǎn)所在的群組,其中,migrate節(jié)點(diǎn)的ip地址就是重新為該群組分配的中間服務(wù)器的ip地址。
此外,如圖2所示,在job群組下有一個(gè)owner節(jié)點(diǎn),該owner節(jié)點(diǎn)用于標(biāo)識(shí)該job群組有哪臺(tái)中間服務(wù)器管理,leader中間服務(wù)器監(jiān)聽(tīng)此節(jié)點(diǎn),當(dāng)管理該job群組的中間服務(wù)器掉線后,重新分配一個(gè)中間服務(wù)器接管并在將要被接管的job群組下設(shè)置migrate節(jié)點(diǎn),其中,該migrate節(jié)點(diǎn)用于標(biāo)注job群組的遷移狀態(tài)。進(jìn)一步的,為了能夠在不重啟中間服務(wù)器的情況下,動(dòng)態(tài)的修改job群組的任務(wù)配置信息,當(dāng)job群組的任務(wù)配置信息被修改后,在該job群組中設(shè)置modified(修改)節(jié)點(diǎn),由管理該job群組的中間服務(wù)器實(shí)時(shí)的監(jiān)控modified節(jié)點(diǎn),當(dāng)發(fā)現(xiàn)配置信息變更時(shí),通知該群組中的leader應(yīng)用服務(wù)器,然后刪除此節(jié)點(diǎn)。
在一個(gè)實(shí)施例中,leader中間服務(wù)器還用于若監(jiān)控到有中間服務(wù)器掉線,則判斷掉線的中間服務(wù)器是否正在接管群組,若是,則為該群組重新分配接管的中間服務(wù)器。
在本實(shí)施例中,leader中間服務(wù)器若監(jiān)控到某個(gè)中間服務(wù)器掉線,除了要在該中間服務(wù)器當(dāng)前管理的job群組下設(shè)置migrate節(jié)點(diǎn),還要查找掉線的該中間服務(wù)器是否正在接管其他群組,若是,則為其他群組重新分配接管的中間服務(wù)器。具體的,參考圖2,在leader中間服務(wù)器監(jiān)控到某個(gè)中間服務(wù)器掉線后,遍歷群組下的migrate節(jié)點(diǎn),若migrate節(jié)點(diǎn)所在的群組對(duì)應(yīng)的接管中間服務(wù)器的ip地址與該掉線的中間服務(wù)器ip地址相同,則重新為該migrate節(jié)點(diǎn)所在的群組分配接管的中間服務(wù)器。
在一個(gè)實(shí)施例中,應(yīng)用服務(wù)器102還用于根據(jù)job信息判斷是否到達(dá)任務(wù)的執(zhí)行時(shí)間,若是,則從管理該應(yīng)用服務(wù)器的中間服務(wù)器中獲取對(duì)應(yīng)的分片信息,根據(jù)所述分片信息開始執(zhí)行對(duì)應(yīng)的子任務(wù),并將任務(wù)開始執(zhí)行的信息記錄到中間服務(wù)器。
在本實(shí)施例中,每個(gè)job群組的leader應(yīng)用服務(wù)器將任務(wù)進(jìn)行分片并分配給對(duì)應(yīng)的中間服務(wù)器后,然后將分片結(jié)果,即具體分為幾片,每一片由那個(gè)應(yīng)用服務(wù)器來(lái)執(zhí)行等情況發(fā)送到管理該群組的中間服務(wù)器。當(dāng)應(yīng)用服務(wù)器根據(jù)自身中的job信息判斷該任務(wù)到達(dá)執(zhí)行時(shí)間后,從管理該應(yīng)用服務(wù)器的中間服務(wù)器中獲取對(duì)應(yīng)的分片信息,其中,job信息包括執(zhí)行該任務(wù)的時(shí)間設(shè)置;分片信息是指該應(yīng)用服務(wù)器需要執(zhí)行的分片編號(hào),比如,執(zhí)行分片0和1。那么該應(yīng)用服務(wù)器就會(huì)根據(jù)該分片信息執(zhí)行對(duì)應(yīng)的子任務(wù),并將任務(wù)開始執(zhí)行的信息記錄到中間服務(wù)器。
如圖3所示,在一個(gè)實(shí)施例中,上述分布式任務(wù)調(diào)度系統(tǒng)還包括:數(shù)據(jù)庫(kù)108,用于存儲(chǔ)job信息,接收中間服務(wù)器發(fā)送的任務(wù)開始及結(jié)束的記錄并進(jìn)行存儲(chǔ)。
在本實(shí)施例中,分布式任務(wù)調(diào)度系統(tǒng)中還包括數(shù)據(jù)庫(kù)108,該數(shù)據(jù)庫(kù)用于存儲(chǔ)job信息,即存儲(chǔ)每個(gè)任務(wù)對(duì)應(yīng)的任務(wù)配置信息。還用于記錄每個(gè)任務(wù)開始及結(jié)束的狀態(tài),后臺(tái)可以通過(guò)管控平臺(tái)來(lái)查看每個(gè)任務(wù)的狀態(tài),也可以通過(guò)該管控平臺(tái)手動(dòng)的對(duì)job的任務(wù)配置信息進(jìn)行修改。
如圖4所示,在一個(gè)實(shí)施例中,提出了一種分布式任務(wù)調(diào)度方法,該方法包括:
步驟402,應(yīng)用服務(wù)器向中間服務(wù)器發(fā)起tcp連接請(qǐng)求,中間服務(wù)器根據(jù)所述tcp連接請(qǐng)求與所述應(yīng)用服務(wù)器建立tcp連接。
在本實(shí)施例中,首先,應(yīng)用服務(wù)器向中間服務(wù)器發(fā)送建立tcp連接的請(qǐng)求,中間服務(wù)器接收到該tcp連接請(qǐng)求后,與該應(yīng)用服務(wù)器建立tcp連接。
步驟404,應(yīng)用服務(wù)器向中間服務(wù)器注冊(cè)該應(yīng)用服務(wù)器的ip地址和job信息。
在本實(shí)施例中,應(yīng)用服務(wù)器與中間服務(wù)器建立tcp連接后,應(yīng)用服務(wù)器將自身的ip地址和job信息注冊(cè)到中間服務(wù)器,其中,job信息包括任務(wù)配置信息、任務(wù)標(biāo)識(shí)、任務(wù)執(zhí)行時(shí)間等。應(yīng)用服務(wù)器的ip地址用于唯一標(biāo)識(shí)該應(yīng)用服務(wù)器。
步驟406,中間服務(wù)器獲取所述應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息,將具有相同job信息的應(yīng)用服務(wù)器劃分為同一個(gè)job群組,在該job群組中的多個(gè)應(yīng)用服務(wù)器中選舉出一個(gè)leader應(yīng)用服務(wù)器,將所述job信息對(duì)應(yīng)的任務(wù)配置信息和job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址下發(fā)到所述leader應(yīng)用服務(wù)器。
在本實(shí)施例中,在本實(shí)施例中,中間服務(wù)器也有多個(gè),但是比應(yīng)用服務(wù)器的數(shù)量少很多,中間服務(wù)器用于管理應(yīng)用服務(wù)器,首先,中間服務(wù)器獲取應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息,然后將具有相同job信息的應(yīng)用服務(wù)器劃分為一個(gè)job群組,比如,如果應(yīng)用服務(wù)器1和應(yīng)用服務(wù)器2以及應(yīng)用服務(wù)器3都具有相同的job1,那么該job1群組中就包括應(yīng)用服務(wù)器1、2和3。然后,在job群組中的多個(gè)應(yīng)用服務(wù)器中選舉出一個(gè)leader應(yīng)用服務(wù)器,一般是將最早接入該中間服務(wù)器的應(yīng)用服務(wù)器作為leader應(yīng)用服務(wù)器,將該job信息對(duì)應(yīng)的任務(wù)配置信息和job群組內(nèi)的多個(gè)應(yīng)用服務(wù)器的ip地址都下發(fā)到該leader應(yīng)用服務(wù)器。
步驟408,leader應(yīng)用服務(wù)器根據(jù)所述任務(wù)配置信息中的分片數(shù)將任務(wù)進(jìn)行拆分,并根據(jù)job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址將拆分后的子任務(wù)進(jìn)行分配。
在本實(shí)施例中,由leader應(yīng)用服務(wù)器進(jìn)行任務(wù)的拆分及分配,其中,任務(wù)配置信息包括任務(wù)的分片數(shù)以及對(duì)應(yīng)的分片算法。具體的,leader應(yīng)用服務(wù)器根據(jù)任務(wù)配置信息中的分片數(shù)將任務(wù)進(jìn)行拆分,然后根據(jù)job群組內(nèi)的各個(gè)應(yīng)用服務(wù)器的ip地址將拆分后的子任務(wù)進(jìn)行分配。比如,任務(wù)配置信息中任務(wù)的分片數(shù)為6個(gè),那么leader應(yīng)用服務(wù)器就按照對(duì)應(yīng)的分片算法將任務(wù)拆分為6個(gè)子任務(wù),然后分配給job群組內(nèi)的應(yīng)用服務(wù)器,包括leader應(yīng)用服務(wù)器本身。其中,應(yīng)用服務(wù)器ip地址用來(lái)唯一標(biāo)識(shí)一個(gè)應(yīng)用服務(wù)器。子任務(wù)的分配可以采用輪循的方法,也可以采用順序分配的方法,當(dāng)然也可以采用其他的分配方法,比如,隨機(jī)分配方法。以輪循分配方法為例,假設(shè)job群組中有3臺(tái)應(yīng)用服務(wù)器,該job任務(wù)分為6個(gè)分片,分別為0,1,2,3,4,5;將6個(gè)分片按照輪循的方法進(jìn)行分配,將分片0分給第一臺(tái)應(yīng)用服務(wù)器,分片1分配給第二臺(tái)應(yīng)用服務(wù)器,分片2分配給第三臺(tái)應(yīng)用服務(wù)器;然后再將3分給第一臺(tái)應(yīng)用服務(wù)器,依次循環(huán)類推,最終,將分片0和3分配給了第一臺(tái)應(yīng)用服務(wù)器,分片1和4分配給了第二臺(tái)應(yīng)用服務(wù)器,分片2和5分配給了第三臺(tái)應(yīng)用服務(wù)器。由于系統(tǒng)中是采用ip地址來(lái)區(qū)分不同的應(yīng)用服務(wù)器的,所以任務(wù)的分配結(jié)果是以群組名、子任務(wù)編號(hào)與ip地址進(jìn)行對(duì)應(yīng)存儲(chǔ)的。比如,將job1群組中的子任務(wù)0和3與server1的ip地址進(jìn)行存儲(chǔ),將job1群組中的子任務(wù)1和4與server2的ip地址進(jìn)行存儲(chǔ),將job1群組中的子任務(wù)2和5與server3的ip地址進(jìn)行存儲(chǔ)。
在一個(gè)實(shí)施例中,在中間服務(wù)器獲取所述應(yīng)用服務(wù)器注冊(cè)的ip地址和job信息的步驟之后還包括:中間服務(wù)器根據(jù)所述job信息查找實(shí)際管理該job的目標(biāo)中間服務(wù)器,將所述目標(biāo)中間服務(wù)器的地址返回給應(yīng)用服務(wù)器;所述應(yīng)用服務(wù)器根據(jù)所述目標(biāo)中間服務(wù)器的地址和所述目標(biāo)中間服務(wù)器建立tcp連接。
在本實(shí)施例中,不同的中間服務(wù)器管理不同的job信息。中間服務(wù)器接收到應(yīng)用服務(wù)器注冊(cè)的job信息后,首先,在自身的列表中查找該job信息是否存在,即判斷該job信息是否是由該中間服務(wù)器來(lái)管理的,若沒(méi)有查找到,則需要查找實(shí)際管理該job信息的中間服務(wù)器,即目標(biāo)中間服務(wù)器,獲取該目標(biāo)中間服務(wù)器的ip地址,然后將該目標(biāo)中間服務(wù)器的ip地址返回給應(yīng)用服務(wù)器,應(yīng)用服務(wù)器接收到返回的目標(biāo)中間服務(wù)器的ip地址后,根據(jù)該ip地址與目標(biāo)中間服務(wù)器建立tcp連接,然后申請(qǐng)加入對(duì)應(yīng)的job群組。
如圖5所示,在一個(gè)實(shí)施例中,上述分布式任務(wù)調(diào)度的方法還包括:
步驟410,中間服務(wù)器監(jiān)控job群組中的應(yīng)用服務(wù)器的上線或下線,當(dāng)群組中有應(yīng)用服務(wù)器上線或下線時(shí),指示job群組中的leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配。
在本實(shí)施例中,中間服務(wù)器還用于監(jiān)控其維護(hù)的job群組中的應(yīng)用服務(wù)器的上線或下線,當(dāng)有新的應(yīng)用服務(wù)器加入該job群組時(shí),中間服務(wù)器指示job群組中的leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配,即將子任務(wù)也同時(shí)分配給該新加入的應(yīng)用服務(wù)器進(jìn)行處理。當(dāng)job群組中有應(yīng)用服務(wù)器由于故障或網(wǎng)絡(luò)等問(wèn)題掉線時(shí),中間服務(wù)器也需要指示leader應(yīng)用服務(wù)器將對(duì)應(yīng)的任務(wù)進(jìn)行重新分配。
步驟412,leader應(yīng)用服務(wù)器按照所述指示根據(jù)job群組中當(dāng)前在線的應(yīng)用服務(wù)器數(shù)量將所述任務(wù)進(jìn)行重新分配,并將分配結(jié)果返回給所述中間服務(wù)器。
在本實(shí)施例中,leader應(yīng)用服務(wù)器按照中間服務(wù)器的指示,根據(jù)job群組中當(dāng)前在線的應(yīng)用服務(wù)器數(shù)量將任務(wù)進(jìn)行重新分配,并將分配結(jié)果更新到中間服務(wù)器。具體的,比如,最初job群組中有3臺(tái)應(yīng)用服務(wù)器,任務(wù)分為10個(gè)片,分配結(jié)果如下:{server1:[0,1,2],server2:[3,4,5],server3:[6,7,8,9]},如果一臺(tái)應(yīng)用服務(wù)器崩潰,則重新分配如下:{server1:[0,1,2,3,4],server2:[5,6,7,8,9]}。如果新增一臺(tái)應(yīng)用服務(wù)器,則重新分配如下:{server1:[0,1],server2:[2,3],server3:[4,5,6],server4:[7,8,9]}。
本領(lǐng)域普通技術(shù)人員可以理解實(shí)現(xiàn)上述實(shí)施例方法中的全部或部分流程,是可以通過(guò)計(jì)算機(jī)程序來(lái)指令相關(guān)的硬件來(lái)完成,該計(jì)算機(jī)程序可存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中,該程序在執(zhí)行時(shí),可包括如上述各方法的實(shí)施例的流程。其中,前述的存儲(chǔ)介質(zhì)可為磁碟、光盤、只讀存儲(chǔ)記憶體(read-onlymemory,rom)等非易失性存儲(chǔ)介質(zhì),或隨機(jī)存儲(chǔ)記憶體(randomaccessmemory,ram)等。
以上所述實(shí)施例的各技術(shù)特征可以進(jìn)行任意的組合,為使描述簡(jiǎn)潔,未對(duì)上述實(shí)施例中的各個(gè)技術(shù)特征所有可能的組合都進(jìn)行描述,然而,只要這些技術(shù)特征的組合不存在矛盾,都應(yīng)當(dāng)認(rèn)為是本說(shuō)明書記載的范圍。
以上所述實(shí)施例僅表達(dá)了本發(fā)明的幾種實(shí)施方式,其描述較為具體和詳細(xì),但并不能因此而理解為對(duì)發(fā)明專利范圍的限制。應(yīng)當(dāng)指出的是,對(duì)于本領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本發(fā)明構(gòu)思的前提下,還可以做出若干變形和改進(jìn),這些都屬于本發(fā)明的保護(hù)范圍。因此,本發(fā)明專利的保護(hù)范圍應(yīng)以所附權(quán)利要求為準(zhǔn)。