一種任務(wù)分發(fā)方法和系統(tǒng)的制作方法
【專利摘要】本申請(qǐng)公開了一種任務(wù)分發(fā)方法和系統(tǒng),該任務(wù)分發(fā)方法和系統(tǒng)基于分布式協(xié)調(diào)服務(wù)實(shí)現(xiàn),首先對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè);當(dāng)新任務(wù)到達(dá)時(shí),將新任務(wù)加入任務(wù)隊(duì)列,并判斷所述新任務(wù)請(qǐng)求的目的計(jì)算節(jié)點(diǎn)是否為已注冊(cè)節(jié)點(diǎn),如果是,將該新任務(wù)的信息添加入分布式協(xié)調(diào)服務(wù)中的任務(wù)存儲(chǔ)模塊,通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù),并從任務(wù)隊(duì)列中刪除所述新任務(wù),否則,將所述新任務(wù)置于任務(wù)隊(duì)列尾部,并在預(yù)設(shè)時(shí)間內(nèi)以預(yù)設(shè)的時(shí)間間隔執(zhí)行所述判斷的操作,直至找到相應(yīng)的節(jié)點(diǎn),如果超過所述預(yù)設(shè)時(shí)間沒有找到相應(yīng)的節(jié)點(diǎn),則將所述新任務(wù)從所述任務(wù)隊(duì)列中刪除。應(yīng)用本申請(qǐng)公開的技術(shù)方案,能夠充分保證任務(wù)分發(fā)的一致性和可靠性能,并提供高可用的任務(wù)分發(fā)服務(wù)。
【專利說明】_種任務(wù)分發(fā)方法和系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)屬于計(jì)算機(jī)領(lǐng)域的任務(wù)分發(fā)【技術(shù)領(lǐng)域】,特別涉及一種基于分布式協(xié)調(diào)服務(wù)的任務(wù)分發(fā)方法和系統(tǒng)。
【背景技術(shù)】
[0002]在信息產(chǎn)業(yè)高速發(fā)展的今天,計(jì)算需求日益豐富,計(jì)算機(jī)服務(wù)系統(tǒng)規(guī)模不斷擴(kuò)大,系統(tǒng)結(jié)構(gòu)由過去單一的集中式發(fā)展到現(xiàn)在相對(duì)流行的分布式,這一系列變化使得計(jì)算環(huán)境變得更加復(fù)雜且未知,也對(duì)協(xié)同計(jì)算過程中常用的任務(wù)分發(fā)技術(shù)提出了更高的要求。
[0003]計(jì)算過程中,通常會(huì)在不同時(shí)間,甚至不同地點(diǎn),產(chǎn)生不同數(shù)量、不同類型的任務(wù)請(qǐng)求,需要利用任務(wù)分發(fā)技術(shù),將每個(gè)請(qǐng)求有秩序地分發(fā)給相應(yīng)的目的計(jì)算節(jié)點(diǎn),減少任務(wù)沖突或丟失,以保證任務(wù)的有效執(zhí)行。現(xiàn)有常見的任務(wù)分發(fā)技術(shù)主要有兩種,一種為集中式任務(wù)分發(fā),另一種為多層次任務(wù)分發(fā)。其中:
[0004]集中式任務(wù)分發(fā)技術(shù)采用獨(dú)立的任務(wù)分發(fā)控制器,由單個(gè)控制節(jié)點(diǎn)收集所有的任務(wù)請(qǐng)求,并將請(qǐng)求按照時(shí)間、類型等相關(guān)屬性信息有序分發(fā)到相關(guān)目的計(jì)算節(jié)點(diǎn)上,具有安全、統(tǒng)一、靈活的特點(diǎn)。然而,這種分發(fā)技術(shù)在分布式計(jì)算環(huán)境中會(huì)存在明顯的性能瓶頸,對(duì)于短時(shí)間內(nèi)較大數(shù)量的任務(wù)請(qǐng)求,容易出現(xiàn)過度負(fù)載,引起單點(diǎn)失效等故障,降低其所在系統(tǒng)的可靠性。與此同時(shí),分發(fā)控制信息集中在一臺(tái)控制器上處理,不具備良好的可擴(kuò)展性。
[0005]多層次任務(wù)分發(fā)技術(shù)采用多個(gè)任務(wù)分發(fā)控制器協(xié)同完成任務(wù)分發(fā)工作,各個(gè)控制節(jié)點(diǎn)之間互相獨(dú)立,在分布性較強(qiáng)或單位時(shí)間內(nèi)計(jì)算任務(wù)較多的環(huán)境下,可對(duì)控制器層級(jí)化,控制器之間通過數(shù)據(jù)同步實(shí)現(xiàn)任務(wù)分發(fā)信息一致性,這就較容易由于網(wǎng)絡(luò)問題或者部分節(jié)點(diǎn)故障而導(dǎo)致任務(wù)分發(fā)錯(cuò)誤,如任務(wù)重復(fù)分發(fā)、任務(wù)信息丟失等,使得其所在系統(tǒng)無法滿足計(jì)算需求,順利完成計(jì)算任務(wù),從而降低系統(tǒng)的可用性。
【發(fā)明內(nèi)容】
[0006]本申請(qǐng)?zhí)峁┝艘环N基于分布式協(xié)調(diào)服務(wù)的任務(wù)分發(fā)方法和系統(tǒng),以滿足不斷復(fù)雜的計(jì)算環(huán)境對(duì)任務(wù)分發(fā)方法和系統(tǒng)提出的新要求。
[0007]本申請(qǐng)?zhí)峁┝艘环N任務(wù)分發(fā)方法,包括:
[0008]對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè);
[0009]當(dāng)新任務(wù)到達(dá)時(shí),將新任務(wù)加入任務(wù)隊(duì)列,并判斷所述新任務(wù)請(qǐng)求的目的計(jì)算節(jié)點(diǎn)是否為已注冊(cè)節(jié)點(diǎn),如果是,將所述新任務(wù)的信息添加入分布式協(xié)調(diào)服務(wù)中的任務(wù)存儲(chǔ)模塊,通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù),并從任務(wù)隊(duì)列中刪除所述新任務(wù),否則,將所述新任務(wù)置于任務(wù)隊(duì)列尾部,并在預(yù)設(shè)時(shí)間內(nèi)以預(yù)設(shè)的時(shí)間間隔執(zhí)行所述判斷的操作,直至找到相應(yīng)的節(jié)點(diǎn),如果超過所述預(yù)設(shè)時(shí)間沒有找到相應(yīng)的節(jié)點(diǎn),則將所述新任務(wù)從所述任務(wù)隊(duì)列中刪除。
[0010]較佳地,所述對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè)包括:
[0011]節(jié)點(diǎn)開始活動(dòng)時(shí),查找已注冊(cè)節(jié)點(diǎn)中是否存在所述節(jié)點(diǎn);
[0012]如果存在,則查詢是否存在對(duì)應(yīng)于所述節(jié)點(diǎn)的待執(zhí)行任務(wù),如果有,執(zhí)行所述待執(zhí)行任務(wù);
[0013]如果不存在,則注冊(cè)所述節(jié)點(diǎn),并將節(jié)點(diǎn)狀態(tài)置為空閑。
[0014]較佳地,注冊(cè)所述節(jié)點(diǎn)包括:創(chuàng)建對(duì)應(yīng)于所述節(jié)點(diǎn)的任務(wù)存儲(chǔ)模塊。
[0015]較佳地,所述通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù)包括:
[0016]節(jié)點(diǎn)接收到新任務(wù)到達(dá)通知;
[0017]所述節(jié)點(diǎn)獲取新任務(wù)的任務(wù)名及任務(wù)參數(shù);
[0018]所述節(jié)點(diǎn)利用所述任務(wù)名查詢?nèi)蝿?wù)相關(guān)描述信息,并根據(jù)獲取到任務(wù)參數(shù)和任務(wù)相關(guān)描述信息執(zhí)行相應(yīng)的任務(wù),并將所述任務(wù)的狀態(tài)置為執(zhí)行中;
[0019]任務(wù)執(zhí)行完成后,將所述任務(wù)的狀態(tài)置為已完成,并反饋執(zhí)行結(jié)果。
[0020]較佳地,該方法還包括:
[0021]創(chuàng)建存儲(chǔ)目錄,所述存儲(chǔ)目錄包括兩個(gè)子目錄:任務(wù)類型存儲(chǔ)目錄和節(jié)點(diǎn)信息存儲(chǔ)目錄,其中:
[0022]任務(wù)類型存儲(chǔ)目錄用于存儲(chǔ)收到的任務(wù)的信息,包括但不限于:任務(wù)描述信息、任務(wù)相關(guān)命令;
[0023]節(jié)點(diǎn)信息存儲(chǔ)目錄用于存儲(chǔ)所有注冊(cè)節(jié)點(diǎn)的信息,包括但不限于:節(jié)點(diǎn)資源信息、收到的任務(wù)信息、節(jié)點(diǎn)狀態(tài)。
[0024]本申請(qǐng)?zhí)峁┑囊环N任務(wù)分發(fā)系統(tǒng),包括:分布式協(xié)調(diào)組件和任務(wù)分發(fā)組件,其中:
[0025]所述分布式協(xié)調(diào)組件基于分布式協(xié)調(diào)服務(wù),用于對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè)和管理;
[0026]所述任務(wù)分發(fā)組件用于進(jìn)行任務(wù)分發(fā),當(dāng)新任務(wù)到達(dá)時(shí),將新任務(wù)加入任務(wù)隊(duì)列,并向分布式協(xié)調(diào)組件查詢所述新任務(wù)請(qǐng)求的目的計(jì)算節(jié)點(diǎn)是否為已注冊(cè)節(jié)點(diǎn),如果是,通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù),并從任務(wù)隊(duì)列中刪除所述新任務(wù),否則,將所述新任務(wù)置于任務(wù)隊(duì)列尾部,并在預(yù)設(shè)時(shí)間內(nèi)以預(yù)設(shè)的時(shí)間間隔執(zhí)行所述判斷的操作,直至找到相應(yīng)的節(jié)點(diǎn),如果超過所述預(yù)設(shè)時(shí)間沒有找到相應(yīng)的節(jié)點(diǎn),則將所述新任務(wù)從所述任務(wù)隊(duì)列中刪除。
[0027]較佳地,所述分布式協(xié)調(diào)組件包括:節(jié)點(diǎn)信息管理組件、事件通知組件和任務(wù)信息存儲(chǔ)組件,其中:
[0028]節(jié)點(diǎn)信息管理組件以類Unix文件系統(tǒng)的樹形結(jié)構(gòu),存儲(chǔ)各注冊(cè)節(jié)點(diǎn)的相關(guān)信息;
[0029]事件通知組件與節(jié)點(diǎn)信息管理組件和任務(wù)信息存儲(chǔ)組件通訊,用于通知任務(wù)分發(fā)組件相關(guān)的事件;
[0030]任務(wù)信息存儲(chǔ)組件以隊(duì)列的方式存儲(chǔ)任務(wù)信息,并通過事件通知組件傳遞給任務(wù)分發(fā)組件。
[0031]較佳地,所述任務(wù)分發(fā)組件包括:節(jié)點(diǎn)監(jiān)控組件、任務(wù)管理組件和節(jié)點(diǎn)管理組件,其中:
[0032]節(jié)點(diǎn)監(jiān)控組件用于監(jiān)控節(jié)點(diǎn)的信息并將其更新到分布式協(xié)調(diào)組件中,監(jiān)控的信息包括節(jié)點(diǎn)的靜態(tài)信息、動(dòng)態(tài)信息、節(jié)點(diǎn)狀態(tài)等;
[0033]任務(wù)管理組件通過與節(jié)點(diǎn)管理組件通訊來定位對(duì)應(yīng)的節(jié)點(diǎn),給對(duì)應(yīng)的節(jié)點(diǎn)分配任務(wù),并反饋任務(wù)進(jìn)行情況到分布式協(xié)調(diào)組件;
[0034]節(jié)點(diǎn)管理組件負(fù)責(zé)與分布式協(xié)調(diào)組件的節(jié)點(diǎn)信息管理組件通訊,提供具體的節(jié)點(diǎn)操作功能,包括但不限于:注冊(cè)節(jié)點(diǎn)、查詢節(jié)點(diǎn)信息、注銷節(jié)點(diǎn)、修改節(jié)點(diǎn)。由上述技術(shù)方案可見,本申請(qǐng)?zhí)峁┑幕诜植际絽f(xié)調(diào)服務(wù)的任務(wù)分發(fā)方法和系統(tǒng),主要解決了傳統(tǒng)方法和系統(tǒng)無法適應(yīng)分布式計(jì)算環(huán)境的問題,對(duì)于物理分布性強(qiáng)、單位時(shí)間內(nèi)待分發(fā)任務(wù)數(shù)量大的系統(tǒng),本申請(qǐng)?zhí)峁┑姆椒ê拖到y(tǒng)能夠充分保證任務(wù)分發(fā)的一致性和可靠性能,并提供高可用的任務(wù)分發(fā)服務(wù)。
[0035]在本申請(qǐng)?zhí)峁┑娜蝿?wù)分發(fā)方法和系統(tǒng)中,分布式協(xié)調(diào)組件主要提供任務(wù)類型查詢、任務(wù)信息存儲(chǔ)、計(jì)算節(jié)點(diǎn)信息存儲(chǔ)和事件通知功能,這些功能都依賴于分布式協(xié)調(diào)服務(wù),利用它針對(duì)大型分布式系統(tǒng)設(shè)計(jì)的可靠數(shù)據(jù)管理服務(wù)的特點(diǎn),可以有效保障任務(wù)請(qǐng)求數(shù)據(jù)的安全及一致性。由于分布式協(xié)調(diào)服務(wù)是一種具有高可擴(kuò)展性的服務(wù),可充分適應(yīng)分布式計(jì)算環(huán)境及高吞吐量的任務(wù)信息讀寫,為任務(wù)分發(fā)服務(wù)的高可用性提供了保障。
[0036]在任務(wù)分發(fā)方面,通過在每個(gè)計(jì)算節(jié)點(diǎn)上部署任務(wù)分發(fā)組件,與分布式協(xié)調(diào)組件異步通訊來獲取和同步計(jì)算節(jié)點(diǎn)的狀態(tài)以及任務(wù)的狀態(tài)。由分布式協(xié)調(diào)組件來確保任務(wù)分發(fā)的可靠性,可用性以及一致性。
[0037]為了提高提高分布式協(xié)調(diào)服務(wù),本申請(qǐng)依賴于分布式協(xié)調(diào)服務(wù)中使用的類似于Unix文件系統(tǒng)的數(shù)據(jù)模型,并自主設(shè)計(jì)了與任務(wù)分發(fā)相關(guān)的數(shù)據(jù)存儲(chǔ)框架。本申請(qǐng)中數(shù)據(jù)模型的不同點(diǎn)在于,沒有文件系統(tǒng)中對(duì)文件和目錄的明顯區(qū)分,它統(tǒng)一使用節(jié)點(diǎn)(node)的概念,節(jié)點(diǎn)可以作為數(shù)據(jù)存儲(chǔ)文件以及其他節(jié)點(diǎn)的容器。這樣的設(shè)計(jì)不單是為了存儲(chǔ)而設(shè)計(jì),還擁有高吞吐、低延遲的特性。
【專利附圖】
【附圖說明】
[0038]圖1為本申請(qǐng)一較佳任務(wù)分發(fā)系統(tǒng)的模塊示意圖;
[0039]圖2為本申請(qǐng)任務(wù)分發(fā)系統(tǒng)的信息存儲(chǔ)結(jié)構(gòu)模型;
[0040]圖3為本申請(qǐng)任務(wù)分發(fā)系統(tǒng)的部署方式示意圖;
[0041]圖4為本申請(qǐng)任務(wù)到達(dá)處理流程不意圖;
[0042]圖5為本申請(qǐng)節(jié)點(diǎn)注冊(cè)流程示意圖;
[0043]圖6為本申請(qǐng)任務(wù)執(zhí)彳丁流程不意圖;
[0044]圖7為本申請(qǐng)一較佳實(shí)施例中任務(wù)分發(fā)系統(tǒng)的數(shù)據(jù)模型示意圖。
【具體實(shí)施方式】
[0045]為使本申請(qǐng)的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下參照附圖并舉實(shí)施例,對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)說明。
[0046]分布式協(xié)調(diào)服務(wù)是一種針對(duì)大型分布式系統(tǒng)提供的可靠協(xié)調(diào)服務(wù),主要用于解決分布式應(yīng)用中的可靠性和一致性問題,它的主要功能包括數(shù)據(jù)維護(hù)、分布式同步和命名服務(wù)等。
[0047]下面以Zookeeper為例,來說明分布式協(xié)調(diào)服務(wù)的特征和基本原理。Zookeeper是分布式協(xié)調(diào)服務(wù)的一種開源實(shí)現(xiàn),其思想是基于google的論文:〃The Chubby lockservice for loosely-coupled distributed systems.〃。
[0048]其基本原理為:服務(wù)器和客戶端,以心跳檢測(cè)機(jī)制(即在一定時(shí)間內(nèi)ping客戶端)來保持連接。服務(wù)器之間通過選舉來確定一個(gè)唯一的leader,并由leader來進(jìn)行不同服務(wù)器間數(shù)據(jù)的同步。Leader機(jī)制保證在超過半數(shù)服務(wù)器正常運(yùn)行的情況下,系統(tǒng)能夠穩(wěn)定提供一致性服務(wù)。并且,通過一個(gè)類Unix文件系統(tǒng)的儲(chǔ)存方式來對(duì)數(shù)據(jù)進(jìn)行存儲(chǔ)。
[0049]其特點(diǎn)是:通過建立一個(gè)分布式集群系統(tǒng),來為外界提供一個(gè)穩(wěn)定的一致的數(shù)據(jù)服務(wù),包括數(shù)據(jù)維護(hù)、分布式同步和命名服務(wù)等;并且,保證數(shù)據(jù)在發(fā)生變化時(shí)對(duì)關(guān)注該數(shù)據(jù)的客戶端進(jìn)行通知,保證不同客戶端接收的通知順序一致。
[0050]分布式協(xié)調(diào)服務(wù)中分布式的多節(jié)點(diǎn)協(xié)同工作方式能夠解決集中式任務(wù)分發(fā)系統(tǒng)的過度負(fù)載,單點(diǎn)失效等問題;而節(jié)點(diǎn)間的同步、沖突解決機(jī)制又能夠彌補(bǔ)多層次任務(wù)分發(fā)技術(shù)的任務(wù)重復(fù)分發(fā)、分發(fā)錯(cuò)誤、任務(wù)丟失的不足。本申請(qǐng)以這種可靠的分布式協(xié)調(diào)服務(wù)作為基礎(chǔ)保障,提出一種任務(wù)分發(fā)方法和系統(tǒng),該方法和系統(tǒng)主要通過提供任務(wù)類型查詢、任務(wù)請(qǐng)求到達(dá)通知及任務(wù)信息獲取等功能來實(shí)現(xiàn)任務(wù)分發(fā)。
[0051]圖1為本申請(qǐng)一較佳任務(wù)分發(fā)系統(tǒng)的模塊示意圖。參見圖1,本申請(qǐng)任務(wù)分發(fā)系統(tǒng)主要包括兩部分:分布式協(xié)調(diào)組件和任務(wù)分發(fā)組件,其中:
[0052]分布式協(xié)調(diào)組件基于分布式協(xié)調(diào)服務(wù)設(shè)計(jì)了組件中的數(shù)據(jù)存儲(chǔ)框架。該組件主要包括3個(gè)子模塊,分別是:節(jié)點(diǎn)信息管理組件、事件通知組件和任務(wù)信息存儲(chǔ)組件,其中:
[0053]I)節(jié)點(diǎn)信息管理組件:以類Unix文件系統(tǒng)的樹形結(jié)構(gòu),存儲(chǔ)各計(jì)算節(jié)點(diǎn)的相關(guān)信息;
[0054]2)事件通知組件:與節(jié)點(diǎn)信息管理組件和任務(wù)信息存儲(chǔ)組件通訊,用于通知任務(wù)分發(fā)組件相關(guān)的事件,如新任務(wù)到達(dá),節(jié)點(diǎn)信息變更等;
[0055]3)任務(wù)信息存儲(chǔ)組件:以隊(duì)列的方式存儲(chǔ)任務(wù)信息,并通過事件通知組件傳遞給任務(wù)分發(fā)組件。
[0056]任務(wù)分發(fā)組件主要包括3個(gè)子模塊,分別是:節(jié)點(diǎn)監(jiān)控組件、任務(wù)管理組件和節(jié)點(diǎn)管理組件,其中:
[0057]I)節(jié)點(diǎn)監(jiān)控組件:用于監(jiān)控計(jì)算節(jié)點(diǎn)的信息并將其更新到分布式協(xié)調(diào)組件中,監(jiān)控的信息包括節(jié)點(diǎn)的靜態(tài)信息(如處理器型號(hào)、MAC地址等不變信息)、動(dòng)態(tài)信息(如CPU利用率、內(nèi)存利用率等動(dòng)態(tài)數(shù)據(jù))、節(jié)點(diǎn)活動(dòng)狀態(tài)(是否在線)等;
[0058]2)任務(wù)管理組件:通過與節(jié)點(diǎn)管理組件通訊來定位對(duì)應(yīng)指定節(jié)點(diǎn),給指定計(jì)算節(jié)點(diǎn)分配任務(wù),并反饋任務(wù)進(jìn)行情況到分布式協(xié)調(diào)組件;
[0059]3)節(jié)點(diǎn)管理組件:負(fù)責(zé)與分布式協(xié)調(diào)組件的節(jié)點(diǎn)信息管理組件通訊,提供具體的節(jié)點(diǎn)操作功能,包括:注冊(cè)節(jié)點(diǎn)、查詢節(jié)點(diǎn)信息、注銷節(jié)點(diǎn)、修改節(jié)點(diǎn)等操作。
[0060]下面結(jié)合圖2,描述本申請(qǐng)任務(wù)分發(fā)系統(tǒng)的信息存儲(chǔ)結(jié)構(gòu)模型。如圖2所示:
[0061]整個(gè)存儲(chǔ)目錄分為兩個(gè)子目錄,分別是任務(wù)類型存儲(chǔ)目錄和節(jié)點(diǎn)信息存儲(chǔ)目錄,其中:
[0062]任務(wù)類型存儲(chǔ)目錄:用于存儲(chǔ)收到的任務(wù)的信息,包括任務(wù)描述信息、任務(wù)相關(guān)命令(例如:待執(zhí)行的命令)等;
[0063]節(jié)點(diǎn)信息存儲(chǔ)目錄:用于存儲(chǔ)所有注冊(cè)節(jié)點(diǎn)的信息,包括節(jié)點(diǎn)資源信息(包括:CPU利用率、內(nèi)存利用率等)、收到的任務(wù)信息、節(jié)點(diǎn)狀態(tài)等。其中,節(jié)點(diǎn)即被管理節(jié)點(diǎn),代表執(zhí)行任務(wù)的計(jì)算機(jī)、服務(wù)器或類似設(shè)備(包括虛擬機(jī))等。
[0064]上述信息存儲(chǔ)模型存在于分布式協(xié)調(diào)服務(wù)中。通過這樣的存儲(chǔ)結(jié)構(gòu),我們就可以利用分布式協(xié)調(diào)服務(wù)進(jìn)行高可用的任務(wù)分發(fā)。這套存儲(chǔ)結(jié)構(gòu)存儲(chǔ)在分布式協(xié)調(diào)組件中,在進(jìn)行任務(wù)分發(fā)時(shí),任務(wù)分發(fā)組件與分布式協(xié)調(diào)組件通訊獲取所需信息,從而完成任務(wù)分發(fā)功能,具體流程將在后續(xù)進(jìn)行描述。
[0065]下面結(jié)合圖3,描述本申請(qǐng)任務(wù)分發(fā)系統(tǒng)的部署方式。參見圖3:
[0066]分布式協(xié)調(diào)組件由多個(gè)分布式協(xié)調(diào)服務(wù)節(jié)點(diǎn)協(xié)同工作實(shí)現(xiàn)。它可以接收任務(wù),并創(chuàng)建任務(wù)隊(duì)列,通過數(shù)據(jù)存儲(chǔ)功能記錄下隊(duì)列中每個(gè)任務(wù)的相關(guān)信息,如任務(wù)執(zhí)行參數(shù)、任務(wù)請(qǐng)求的目的計(jì)算節(jié)點(diǎn)等。同時(shí),分布式協(xié)調(diào)組件還將存儲(chǔ)所有可能的任務(wù)類型,為節(jié)點(diǎn)提供任務(wù)類型查詢功能,節(jié)點(diǎn)可以根據(jù)任務(wù)名在服務(wù)中找到該任務(wù)對(duì)應(yīng)的具體描述,甚至相關(guān)任務(wù)指令。為了讓節(jié)點(diǎn)可以及時(shí)接收并執(zhí)行相關(guān)任務(wù),每個(gè)節(jié)點(diǎn)都在分布式協(xié)調(diào)組件的節(jié)點(diǎn)信息管理組件中進(jìn)行注冊(cè),并擁有屬于自己的任務(wù)存儲(chǔ)模塊(任務(wù)存儲(chǔ)模塊由任務(wù)信息存儲(chǔ)組件管理),當(dāng)某節(jié)點(diǎn)的任務(wù)存儲(chǔ)模塊中被寫入新任務(wù)時(shí),系統(tǒng)將通知相應(yīng)的節(jié)點(diǎn)接收并執(zhí)行該新任務(wù)。
[0067]在節(jié)點(diǎn)池中,每個(gè)節(jié)點(diǎn)都安裝有任務(wù)分發(fā)組件(安裝在節(jié)點(diǎn)中的任務(wù)分發(fā)組件可以理解為本申請(qǐng)任務(wù)分發(fā)系統(tǒng)的客戶端),通過任務(wù)分發(fā)組件與分布式協(xié)調(diào)組件的協(xié)同工作,完成任務(wù)分發(fā)功能。
[0068]本申請(qǐng)如圖3所示的任務(wù)分發(fā)系統(tǒng)主要涉及任務(wù)到達(dá)、節(jié)點(diǎn)注冊(cè)及任務(wù)執(zhí)行三個(gè)主要的應(yīng)用場(chǎng)景,下面結(jié)合附圖分別予以詳細(xì)說明。
[0069]圖4為本申請(qǐng)任務(wù)到達(dá)處理流程示意圖,主要包括以下處理:
[0070]a.新任務(wù)到達(dá);
[0071]b.新任務(wù)加入任務(wù)隊(duì)列;
[0072]c.查詢?nèi)蝿?wù)請(qǐng)求中的目的計(jì)算節(jié)點(diǎn)信息;
[0073]d.在分布式協(xié)調(diào)組件中根據(jù)目的計(jì)算節(jié)點(diǎn)信息查找相應(yīng)的節(jié)點(diǎn)是否存在;
[0074]e.若存在,則對(duì)該節(jié)點(diǎn)在分布式協(xié)調(diào)組件中的任務(wù)存儲(chǔ)模塊進(jìn)行修改,將該任務(wù)相關(guān)的信息添加到該節(jié)點(diǎn)對(duì)應(yīng)的任務(wù)存儲(chǔ)模塊中,并通知該節(jié)點(diǎn)有新任務(wù)到達(dá),將該任務(wù)的狀態(tài)更改為等待執(zhí)行,并從任務(wù)隊(duì)列中刪除該任務(wù);
[0075]f.若不存在,則將該任務(wù)置于隊(duì)列尾部,在規(guī)定時(shí)間內(nèi)以一定的時(shí)間間隔對(duì)分布式協(xié)調(diào)組件的節(jié)點(diǎn)信息管理組件發(fā)起輪詢,若找到目的計(jì)算節(jié)點(diǎn),則按e步驟執(zhí)行;若在規(guī)定時(shí)間內(nèi)未找到目的計(jì)算節(jié)點(diǎn),返回任務(wù)執(zhí)行錯(cuò)誤信息,并從任務(wù)隊(duì)列中刪除該任務(wù)。
[0076]圖5為本申請(qǐng)節(jié)點(diǎn)注冊(cè)流程示意圖,主要包括以下處理:
[0077]a.節(jié)點(diǎn)開始活動(dòng)(即已做好執(zhí)行任務(wù)到準(zhǔn)備)時(shí),節(jié)點(diǎn)運(yùn)行任務(wù)分發(fā)組件,進(jìn)行節(jié)點(diǎn)初始化;
[0078]b.在分布式協(xié)調(diào)組件中查找節(jié)點(diǎn)信息;
[0079]c.若存在相應(yīng)的節(jié)點(diǎn),則節(jié)點(diǎn)開始接收任務(wù),查詢是否存在待執(zhí)行任務(wù)(也可稱為未完成任務(wù)),如果有未完成任務(wù),則執(zhí)行未完成任務(wù);
[0080]d.若不存在相應(yīng)的節(jié)點(diǎn),則在分布式協(xié)調(diào)組件中創(chuàng)建對(duì)應(yīng)于該節(jié)點(diǎn)的唯一的任務(wù)存儲(chǔ)模塊,將節(jié)點(diǎn)狀態(tài)置為空閑,等待新任務(wù)到達(dá)。
[0081]圖6為本申請(qǐng)任務(wù)執(zhí)行流程示意圖,主要包括以下處理:
[0082]a.節(jié)點(diǎn)接收到新任務(wù)到達(dá)通知;
[0083]b.節(jié)點(diǎn)中的任務(wù)分發(fā)組件與分布式協(xié)調(diào)組件進(jìn)行通信,獲取新任務(wù)的任務(wù)名及任務(wù)參數(shù);
[0084]c.利用任務(wù)名在分布式協(xié)調(diào)組件中查詢?nèi)蝿?wù)相關(guān)描述信息(如執(zhí)行指令);
[0085]d.節(jié)點(diǎn)根據(jù)獲取的任務(wù)參數(shù)、任務(wù)指令等信息執(zhí)行計(jì)算任務(wù),將其在分布式協(xié)調(diào)組件中存儲(chǔ)的任務(wù)狀態(tài)更改為執(zhí)行中;
[0086]e.任務(wù)執(zhí)行完成后,將任務(wù)狀態(tài)修改為已完成,并將執(zhí)行結(jié)果反饋到分布式協(xié)調(diào)組件中。
[0087]下面通過一個(gè)較佳實(shí)施例對(duì)本申請(qǐng)技術(shù)方案進(jìn)行進(jìn)一步詳細(xì)說明。
[0088]本實(shí)施例是將本發(fā)明中的任務(wù)分發(fā)方法和系統(tǒng)應(yīng)用到分布式集群環(huán)境中,實(shí)現(xiàn)一個(gè)集群內(nèi)部地任務(wù)分發(fā)系統(tǒng)。該任務(wù)分發(fā)系統(tǒng)主要接收來自集群管理節(jié)點(diǎn)發(fā)出的任務(wù)請(qǐng)求,將任務(wù)分發(fā)給指定的目的計(jì)算節(jié)點(diǎn),并對(duì)任務(wù)執(zhí)行狀態(tài)進(jìn)行記錄。涉及的具體技術(shù)包括分布式協(xié)調(diào)服務(wù)框架zookeeper及python編程語言。
[0089]本實(shí)施例中,利用zookeeper提供分布式協(xié)調(diào)服務(wù),實(shí)現(xiàn)數(shù)據(jù)管理服務(wù)。通過對(duì)
zookeeper類似文件系統(tǒng)的數(shù)據(jù)模型--znode樹進(jìn)行設(shè)計(jì),使每個(gè)計(jì)算節(jié)點(diǎn)在zookeeper
都對(duì)應(yīng)有唯一的任務(wù)存儲(chǔ)模塊,同時(shí)利用zookeeper中對(duì)znode的狀態(tài)變化監(jiān)聽機(jī)制,實(shí)現(xiàn)任務(wù)到達(dá)通知等功能。系統(tǒng)的數(shù)據(jù)模型詳細(xì)設(shè)計(jì)如圖7所示:
[0090]在ZooKeeper數(shù)據(jù)模型中,默認(rèn)根znode下主要有兩個(gè)子znode樹:
[0091]—個(gè)為用于存儲(chǔ)所有可能類型任務(wù)的znode樹。該樹的根節(jié)點(diǎn)是名為Tasks的
znode,其子znode由具體的任務(wù)名稱命名,如圖7所示的task_l、task_2、......task_n。每個(gè)任務(wù)znode下都有兩個(gè)固定的子znode,分別被命名為descript1n,用于存儲(chǔ)任務(wù)描述信息;以及co_ands,用于存儲(chǔ)任務(wù)相關(guān)執(zhí)行指令。該znode樹的主要功能是枚舉系統(tǒng)所有的任務(wù)類型,為節(jié)點(diǎn)提供基本的任務(wù)明細(xì),使節(jié)點(diǎn)了解指定任務(wù)的具體任務(wù)內(nèi)容、任務(wù)要求和其涉及的執(zhí)行指令,方便節(jié)點(diǎn)執(zhí)行具體任務(wù)。
[0092]另一個(gè)是用于存儲(chǔ)各節(jié)點(diǎn)相關(guān)任務(wù)請(qǐng)求的znode樹。該樹的根節(jié)點(diǎn)是名為Nodes
的znode,其子znode由集群中各節(jié)點(diǎn)名稱命名,如圖7所示的member-01、member-02、......member-no每個(gè)節(jié)點(diǎn)znode下也擁有兩個(gè)固定的子znode,分別為request,用于存儲(chǔ)該節(jié)點(diǎn)接收到的所有任務(wù)請(qǐng)求;以及machine,用于標(biāo)記節(jié)點(diǎn)的活動(dòng)狀態(tài)。需要注意的是,machine是一個(gè)臨時(shí)znode,只有當(dāng)節(jié)點(diǎn)開始運(yùn)行任務(wù)分發(fā)系統(tǒng)客戶端時(shí),才會(huì)自動(dòng)創(chuàng)建該znode,以表示節(jié)點(diǎn)處于活動(dòng)狀態(tài),可接收并執(zhí)行任務(wù)。request及其子znode樹則對(duì)應(yīng)節(jié)點(diǎn)的任務(wù)存儲(chǔ)模塊,它的每個(gè)子znode都對(duì)應(yīng)一個(gè)節(jié)點(diǎn)收到的任務(wù)請(qǐng)求,znode由任務(wù)名稱命名,同時(shí),znode的存儲(chǔ)值為該任務(wù)請(qǐng)求的相關(guān)信息,如任務(wù)請(qǐng)求時(shí)間、任務(wù)請(qǐng)求參數(shù)、任務(wù)執(zhí)行狀態(tài)、任務(wù)執(zhí)行結(jié)果等。
[0093]對(duì)于任務(wù)分發(fā)系統(tǒng)主要涉及的三種場(chǎng)景,結(jié)合本實(shí)施例設(shè)計(jì)的上述ZooKeeper數(shù)據(jù)模型,具體方法實(shí)現(xiàn)如下:
[0094]1.任務(wù)到達(dá)
[0095]a.當(dāng)新任務(wù)到達(dá)時(shí),根據(jù)任務(wù)的目的節(jié)點(diǎn)名,在ZooKeeper的Nodes目錄下查找是否存在以該節(jié)點(diǎn)名命名的子znode ;
[0096]b.若存在,貝Ij在該znode目錄中名為request的子znode下創(chuàng)建一個(gè)以任務(wù)名命名的znode,存儲(chǔ)值為該任務(wù)請(qǐng)求的相關(guān)信息,其中狀態(tài)信息為等待執(zhí)行;
[0097]c.若不存在,則等待一個(gè)預(yù)設(shè)的時(shí)間間隔,之后再次發(fā)起相同的任務(wù)請(qǐng)求,輪詢ZooKeeper中是否存在該目的節(jié)點(diǎn),若存在,則按照b步驟執(zhí)行。假設(shè)每個(gè)任務(wù)輪詢發(fā)起請(qǐng)求的次數(shù)上限為10次,10次之后若仍無法找到目的節(jié)點(diǎn)接收,則丟棄此任務(wù),并返回錯(cuò)誤提不。
[0098]2.節(jié)點(diǎn)注冊(cè)
[0099]a.節(jié)點(diǎn)運(yùn)行任務(wù)分發(fā)系統(tǒng)客戶端后,客戶端主動(dòng)與ZooKeeper服務(wù)器端建立通信連接;
[0100]b.通信連接成功后,在ZooKeeper的Nodes目錄下查找是否存在以該節(jié)點(diǎn)名命名的子znode ;
[0101]c.若存在,貝丨」在節(jié)點(diǎn)對(duì)應(yīng)znode目錄下建立machine臨時(shí)znode,并對(duì)request目錄下的各任務(wù)狀態(tài)進(jìn)行讀取。對(duì)于標(biāo)記為等待執(zhí)行的任務(wù),立即開始執(zhí)行;同時(shí)對(duì)request目錄進(jìn)行監(jiān)聽,若出現(xiàn)新的任務(wù),節(jié)點(diǎn)將通過客戶端收到通知;
[0102]d.若不存在,貝丨」在Nodes目錄下建立節(jié)點(diǎn)對(duì)應(yīng)的znode子樹,并對(duì)樹中的request目錄進(jìn)行監(jiān)聽,等待新任務(wù)到達(dá)。
[0103]3.任務(wù)執(zhí)行
[0104]a.當(dāng)新任務(wù)到達(dá)時(shí),節(jié)點(diǎn)對(duì)應(yīng)的znode目錄下的request目錄下將創(chuàng)建一個(gè)對(duì)應(yīng)的任務(wù)znode,ZooKeeper服務(wù)將監(jiān)測(cè)到這一變化,并通知節(jié)點(diǎn)上運(yùn)行的任務(wù)分發(fā)系統(tǒng)客戶端,節(jié)點(diǎn)對(duì)應(yīng)的任務(wù)存儲(chǔ)模塊有變化;
[0105]b.節(jié)點(diǎn)收到通知后,通過任務(wù)分發(fā)系統(tǒng)客戶端與ZooKeeper服務(wù)器建立通信,通過遍歷request目錄下的子znode,找到新的任務(wù)znode,并通過讀取該znode的存儲(chǔ)值獲取任務(wù)參數(shù);
[0106]c.獲取到充足的任務(wù)信息后,節(jié)點(diǎn)在本地執(zhí)行具體的任務(wù),并將對(duì)應(yīng)znode存儲(chǔ)值的任務(wù)狀態(tài)字段更新為執(zhí)行中;
[0107]d.當(dāng)任務(wù)執(zhí)行完成后,節(jié)點(diǎn)再次通過任務(wù)分發(fā)系統(tǒng)客戶端將任務(wù)執(zhí)行結(jié)果寫入到對(duì)應(yīng)znode存儲(chǔ)值的任務(wù)結(jié)果字段中。
[0108]本實(shí)施例中的任務(wù)分發(fā)方法和系統(tǒng)通過利用ZooKeeper在數(shù)據(jù)管理方面的高容錯(cuò)性和高一致性,可靠的實(shí)現(xiàn)了任務(wù)相關(guān)數(shù)據(jù)的存儲(chǔ)和讀寫,并通過編程實(shí)現(xiàn)相關(guān)業(yè)務(wù)邏輯實(shí)現(xiàn)任務(wù)分發(fā)方法。同時(shí),該系統(tǒng)還利用ZooK^per的高可擴(kuò)展性,充分適應(yīng)了彈性規(guī)模的環(huán)境,保證了系統(tǒng)的服務(wù)質(zhì)量。
[0109]由上述可見,本申請(qǐng)以分布式協(xié)調(diào)服務(wù)為基礎(chǔ)建立了一種任務(wù)分發(fā)方法和系統(tǒng),充分利用了分布式協(xié)調(diào)服務(wù)在數(shù)據(jù)管理方面的優(yōu)勢(shì)來維護(hù)任務(wù)分發(fā)狀態(tài)信息的一致性,并利用分布式協(xié)調(diào)服務(wù)的可擴(kuò)展性滿足了分布式計(jì)算環(huán)境對(duì)任務(wù)分發(fā)系統(tǒng)提出的高吞吐量需求,能夠保證服務(wù)的高可用性。
[0110]以上所述僅為本申請(qǐng)的較佳實(shí)施例而已,并不用以限制本申請(qǐng),凡在本申請(qǐng)的精神和原則之內(nèi),所做的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本申請(qǐng)保護(hù)的范圍之內(nèi)。
【權(quán)利要求】
1.一種任務(wù)分發(fā)方法,其特征在于,包括: 對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè); 當(dāng)新任務(wù)到達(dá)時(shí),將新任務(wù)加入任務(wù)隊(duì)列,并判斷所述新任務(wù)請(qǐng)求的目的計(jì)算節(jié)點(diǎn)是否為已注冊(cè)節(jié)點(diǎn),如果是,將所述新任務(wù)的信息添加入分布式協(xié)調(diào)服務(wù)中的任務(wù)存儲(chǔ)模塊,通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù),并從任務(wù)隊(duì)列中刪除所述新任務(wù),否則,將所述新任務(wù)置于任務(wù)隊(duì)列尾部,并在預(yù)設(shè)時(shí)間內(nèi)以預(yù)設(shè)的時(shí)間間隔執(zhí)行所述判斷的操作,直至找到相應(yīng)的節(jié)點(diǎn),如果超過所述預(yù)設(shè)時(shí)間沒有找到相應(yīng)的節(jié)點(diǎn),則將所述新任務(wù)從所述任務(wù)隊(duì)列中刪除。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè)包括: 節(jié)點(diǎn)開始活動(dòng)時(shí),查找已注冊(cè)節(jié)點(diǎn)中是否存在所述節(jié)點(diǎn); 如果存在,則查詢是否存在對(duì)應(yīng)于所述節(jié)點(diǎn)的待執(zhí)行任務(wù),如果有,執(zhí)行所述待執(zhí)行任務(wù); 如果不存在,則注冊(cè)所述節(jié)點(diǎn),并將節(jié)點(diǎn)狀態(tài)置為空閑。
3.根據(jù)權(quán)利要求2所述的方法,其特征在于: 注冊(cè)所述節(jié)點(diǎn)包括:創(chuàng)建對(duì)應(yīng)于所述節(jié)點(diǎn)的任務(wù)存儲(chǔ)模塊。
4.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的方法,其特征在于,所述通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù)包括: 節(jié)點(diǎn)接收到新任務(wù)到達(dá)通知; 所述節(jié)點(diǎn)獲取新任務(wù)的任務(wù)名及任務(wù)參數(shù); 所述節(jié)點(diǎn)利用所述任務(wù)名查詢?nèi)蝿?wù)相關(guān)描述信息,并根據(jù)獲取到任務(wù)參數(shù)和任務(wù)相關(guān)描述信息執(zhí)行相應(yīng)的任務(wù),并將所述任務(wù)的狀態(tài)置為執(zhí)行中; 任務(wù)執(zhí)行完成后,將所述任務(wù)的狀態(tài)置為已完成,并反饋執(zhí)行結(jié)果。
5.根據(jù)權(quán)利要求1至3任一項(xiàng)所述的方法,其特征在于,該方法還包括: 創(chuàng)建存儲(chǔ)目錄,所述存儲(chǔ)目錄包括兩個(gè)子目錄:任務(wù)類型存儲(chǔ)目錄和節(jié)點(diǎn)信息存儲(chǔ)目錄,其中: 任務(wù)類型存儲(chǔ)目錄用于存儲(chǔ)收到的任務(wù)的信息,包括但不限于:任務(wù)描述信息、任務(wù)相關(guān)命令; 節(jié)點(diǎn)信息存儲(chǔ)目錄用于存儲(chǔ)所有注冊(cè)節(jié)點(diǎn)的信息,包括但不限于:節(jié)點(diǎn)資源信息、收到的任務(wù)信息、節(jié)點(diǎn)狀態(tài)。
6.一種任務(wù)分發(fā)系統(tǒng),其特征在于,包括:分布式協(xié)調(diào)組件和任務(wù)分發(fā)組件,其中: 所述分布式協(xié)調(diào)組件基于分布式協(xié)調(diào)服務(wù),用于對(duì)節(jié)點(diǎn)進(jìn)行注冊(cè)和管理; 所述任務(wù)分發(fā)組件用于進(jìn)行任務(wù)分發(fā),當(dāng)新任務(wù)到達(dá)時(shí),將新任務(wù)加入任務(wù)隊(duì)列,并向分布式協(xié)調(diào)組件查詢所述新任務(wù)請(qǐng)求的目的計(jì)算節(jié)點(diǎn)是否為已注冊(cè)節(jié)點(diǎn),如果是,通知對(duì)應(yīng)的節(jié)點(diǎn)執(zhí)行所述新任務(wù),并從任務(wù)隊(duì)列中刪除所述新任務(wù),否則,將所述新任務(wù)置于任務(wù)隊(duì)列尾部,并在預(yù)設(shè)時(shí)間內(nèi)以預(yù)設(shè)的時(shí)間間隔執(zhí)行所述判斷的操作,直至找到相應(yīng)的節(jié)點(diǎn),如果超過所述預(yù)設(shè)時(shí)間沒有找到相應(yīng)的節(jié)點(diǎn),則將所述新任務(wù)從所述任務(wù)隊(duì)列中刪除。
7.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述分布式協(xié)調(diào)組件包括:節(jié)點(diǎn)信息管理組件、事件通知組件和任務(wù)信息存儲(chǔ)組件,其中: 節(jié)點(diǎn)信息管理組件以類Unix文件系統(tǒng)的樹形結(jié)構(gòu),存儲(chǔ)各注冊(cè)節(jié)點(diǎn)的相關(guān)信息; 事件通知組件與節(jié)點(diǎn)信息管理組件和任務(wù)信息存儲(chǔ)組件通訊,用于通知任務(wù)分發(fā)組件相關(guān)的事件; 任務(wù)信息存儲(chǔ)組件以隊(duì)列的方式存儲(chǔ)任務(wù)信息,并通過事件通知組件傳遞給任務(wù)分發(fā)組件。
8.根據(jù)權(quán)利要求6所述的系統(tǒng),其特征在于,所述任務(wù)分發(fā)組件包括:節(jié)點(diǎn)監(jiān)控組件、任務(wù)管理組件和節(jié)點(diǎn)管理組件,其中: 節(jié)點(diǎn)監(jiān)控組件用于監(jiān)控節(jié)點(diǎn)的信息并將其更新到分布式協(xié)調(diào)組件中,監(jiān)控的信息包括節(jié)點(diǎn)的靜態(tài)信息、動(dòng)態(tài)信息、節(jié)點(diǎn)狀態(tài)等; 任務(wù)管理組件通過與節(jié)點(diǎn)管理組件通訊來定位對(duì)應(yīng)的節(jié)點(diǎn),給對(duì)應(yīng)的節(jié)點(diǎn)分配任務(wù),并反饋任務(wù)進(jìn)行情況到分布式協(xié)調(diào)組件; 節(jié)點(diǎn)管理組件負(fù)責(zé)與分布式協(xié)調(diào)組件的節(jié)點(diǎn)信息管理組件通訊,提供具體的節(jié)點(diǎn)操作功能,包括但不限于:注冊(cè)節(jié)點(diǎn)、查詢節(jié)點(diǎn)信息、注銷節(jié)點(diǎn)、修改節(jié)點(diǎn)。
【文檔編號(hào)】G06F9/50GK104503845SQ201510018653
【公開日】2015年4月8日 申請(qǐng)日期:2015年1月14日 優(yōu)先權(quán)日:2015年1月14日
【發(fā)明者】崔毅東, 金躍輝, 張一文, 雷友珣, 漆濤, 陳莉萍, 楊談, 李文韻 申請(qǐng)人:北京郵電大學(xué)