專(zhuān)利名稱(chēng):任務(wù)處理方法及裝置的制作方法
技術(shù)領(lǐng)域:
本申請(qǐng)涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是涉及一種任務(wù)處理方法及裝置。
背景技術(shù):
多道流水線(xiàn)處理技術(shù),是一種基于網(wǎng)絡(luò)消息通信的工作調(diào)度系統(tǒng)。在大規(guī)模分布式環(huán)境中,常使用多道流水線(xiàn)處理技術(shù)對(duì)數(shù)據(jù)處理任務(wù)進(jìn)行高效地發(fā)布、分配和處理。目前,多道流水線(xiàn)處理技術(shù)一般使用分布式消息隊(duì)列實(shí)現(xiàn)。分布式消息隊(duì)列中, 通常包含三個(gè)基本組件,即,消息發(fā)布組件,消息中轉(zhuǎn)組件和消息處理組件。其中,消息發(fā)布組件,為系統(tǒng)的使用者提供了固定的API (Application Programming Interface, 應(yīng)用程序接口),方便使用者提交自己的任務(wù)消息,消息被提交后,消息發(fā)布組件,將通
TCP (Transmission Control Protocol, # ftiX ) t^ iX ^ UDP (User Datagram
I^otocol,用戶(hù)數(shù)據(jù)報(bào)協(xié)議)協(xié)議,將任務(wù)消息發(fā)送至消息中轉(zhuǎn)組件;消息中轉(zhuǎn)組件的作用是臨時(shí)存儲(chǔ)消息,并將任務(wù)消息的發(fā)布信息通信給消息處理組件;當(dāng)消息處理組件接收到來(lái)自消息中轉(zhuǎn)組件的通知,將通過(guò)TCP協(xié)議或UDP協(xié)議接收任務(wù)消息,之后將該任務(wù)消息提交給處理單元進(jìn)行處理,此時(shí),消息中轉(zhuǎn)組件將負(fù)責(zé)將消息置為不可見(jiàn)狀態(tài),防止多個(gè)任務(wù)處理單元接收到同樣的任務(wù)消息;處理單元完成處理后,將根據(jù)處理結(jié)果發(fā)布消息至消息中轉(zhuǎn)組件,當(dāng)處理成功時(shí),消息處理組件將通知消息中轉(zhuǎn)組件刪除該消息;當(dāng)處理失敗時(shí), 消息處理組件將通知消息中轉(zhuǎn)組件把該消息重新置為可見(jiàn)狀態(tài),這樣可以使其他處理單元有機(jī)會(huì)再次處理該任務(wù)。一種分布式消息隊(duì)列系統(tǒng)是如圖1所示的Gearman系統(tǒng)。Gearman是目前基于 C/C++實(shí)現(xiàn)的一個(gè)分布式消息隊(duì)列系統(tǒng),主要包含三個(gè)組件=Gearman Client, Gearman Server與Gearman Worker,分別對(duì)應(yīng)于上述的消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件。Gearman系統(tǒng)對(duì)于消息處理的流程,如圖1中所示,包括Gearman Client向Gearman Server發(fā)布任務(wù);GearmanServer接收任務(wù)后,通過(guò)任務(wù)調(diào)度,將任務(wù)交給Gearman Worker 進(jìn)行處理;Gearman Worker對(duì)任務(wù)進(jìn)行處理,并將處理結(jié)果返回給Gearman Server ; Gearman Server根據(jù)返回的處理結(jié)果對(duì)其保存的任務(wù)進(jìn)行相應(yīng)地處理,如刪除或重置為可見(jiàn)狀態(tài)等,至次,一次任務(wù)處理完成??梢?jiàn),使用分布式消息隊(duì)列這一實(shí)現(xiàn)方式,使得任務(wù)發(fā)布組件無(wú)需關(guān)心任務(wù)處理單元的位置,只需發(fā)送任務(wù)消息至消息中轉(zhuǎn)組件,實(shí)現(xiàn)了任務(wù)發(fā)布與任務(wù)處理的解耦合。另一方面,任務(wù)消息由中轉(zhuǎn)組件進(jìn)行統(tǒng)一管理,降低了任務(wù)處理失敗后的重新調(diào)試難度。然而,目前的各類(lèi)分布式消息隊(duì)列系統(tǒng),都缺乏對(duì)于網(wǎng)絡(luò)連接的有效管理,對(duì)于已經(jīng)建立的網(wǎng)絡(luò)連接,通常不對(duì)其連接狀態(tài)進(jìn)行監(jiān)控與管理,而僅僅依賴(lài)于系統(tǒng)的網(wǎng)絡(luò)功能進(jìn)行控制。這樣,雖然可以在理想的網(wǎng)絡(luò)環(huán)境中取得比較好的性能測(cè)試結(jié)果,但在實(shí)際使用中,特別是大規(guī)模分布式集群中,常常因?yàn)閱蝹€(gè)節(jié)點(diǎn)的故障,而使得所有消息發(fā)送與接收環(huán)節(jié)都要多次嘗試連接一個(gè)失敗的節(jié)點(diǎn),這樣對(duì)于性能的影響非常巨大。
發(fā)明內(nèi)容
本申請(qǐng)所要解決的技術(shù)問(wèn)題是提供一種任務(wù)處理方法及裝置,以解決目前的分布式消息隊(duì)列系統(tǒng)中,因節(jié)點(diǎn)失效造成集群處理能力下降的問(wèn)題。為了解決上述問(wèn)題,本申請(qǐng)公開(kāi)了一種任務(wù)處理方法,包括多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息,其中,所述多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,所述連接池用于存儲(chǔ)所述分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息;根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接;使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,進(jìn)行所述任務(wù)消息所請(qǐng)求的任務(wù)處理。優(yōu)選地,所述分布式消息隊(duì)列的每個(gè)組件中均設(shè)置有連接池,每個(gè)所述組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息;所述根據(jù)所述網(wǎng)絡(luò)連接的信息, 從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟包括根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理方法還包括若使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息失敗,則重新選擇一個(gè)有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,并中斷失敗的網(wǎng)絡(luò)連接并釋放其資源,將該網(wǎng)絡(luò)連接設(shè)置為失效的網(wǎng)絡(luò)連接;記錄該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息。優(yōu)選地,任務(wù)處理方法還包括當(dāng)經(jīng)過(guò)所述設(shè)定的時(shí)間間隔后,接收到新的任務(wù)消息,則嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理方法還包括若嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接失敗,則重新設(shè)置該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在所述設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息;若嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接成功,則將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接。優(yōu)選地,在所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟之前,還包括根據(jù)所述網(wǎng)絡(luò)連接的信息,判斷所述連接池中是否存在有效的網(wǎng)絡(luò)連接;若存在,則執(zhí)行所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟;若不存在,將所述連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),并嘗試恢復(fù)所述連接池中所有的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理方法還包括當(dāng)使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回給所述連接池,并判斷該網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),根據(jù)判斷結(jié)果,將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接或者無(wú)效的網(wǎng)絡(luò)連接。優(yōu)選地,在所述多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息的步驟之前,還包括在所述分布式消息隊(duì)列的各個(gè)組件中設(shè)置負(fù)載均衡算法。優(yōu)選地,所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟包括根據(jù)所述網(wǎng)絡(luò)連接的信息,按照所述負(fù)載均衡算法從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。優(yōu)選地,所述分布式消息隊(duì)列包括消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件; 在所述多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息的步驟之前,還包括將所述分布式消息隊(duì)列的各個(gè)組件中的連接池分別封裝為網(wǎng)絡(luò)連接循環(huán)隊(duì)列,并且在所述消息中轉(zhuǎn)組件中設(shè)置消息優(yōu)先級(jí)隊(duì)列。優(yōu)選地,所述根據(jù)所述負(fù)載均衡算法和所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟包括根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部開(kāi)始,選擇一個(gè)有效的網(wǎng)絡(luò)連接;所述方法還包括當(dāng)使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。優(yōu)選地,所述消息中轉(zhuǎn)組件中的所述消息優(yōu)先級(jí)隊(duì)列為先進(jìn)先出方式的消息優(yōu)先級(jí)隊(duì)列;所述多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息的步驟包括所述消息中轉(zhuǎn)組件從所述消息優(yōu)先級(jí)隊(duì)列的頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息作為當(dāng)前待處理的任務(wù)消息。為了解決上述問(wèn)題,本申請(qǐng)還公開(kāi)了一種任務(wù)處理裝置,包括接收模塊,用于在多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件中接收任務(wù)消息,其中,所述多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,所述連接池用于存儲(chǔ)所述分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息;選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接;連接模塊,用于使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,進(jìn)行所述任務(wù)消息所請(qǐng)求的任務(wù)處理。優(yōu)選地,所述分布式消息隊(duì)列的每個(gè)組件中均設(shè)置有連接池,每個(gè)所述組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息;所述選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理裝置還包括失敗模塊,用于若所述連接模塊使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息失敗,則重新選擇一個(gè)有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,并中斷失敗的網(wǎng)絡(luò)連接并釋放其資源,將該網(wǎng)絡(luò)連接設(shè)置為失效的網(wǎng)絡(luò)連接;記錄該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息。優(yōu)選地,任務(wù)處理裝置還包括重連模塊,用于當(dāng)經(jīng)過(guò)所述設(shè)定的時(shí)間間隔后,所述接收模塊接收到新的任務(wù)消息,嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理裝置還包括重連設(shè)置模塊,用于若所述重連模塊嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接失敗,則重新設(shè)置該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在所述設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息;若嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接成功,則將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理裝置還包括判斷模塊,用于在所述選擇模塊根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接之前,根據(jù)所述網(wǎng)絡(luò)連接的信息,判斷所述連接池中是否存在有效的網(wǎng)絡(luò)連接;若存在,則執(zhí)行所述選擇模塊;若不存在,將所述連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),并嘗試恢復(fù)所述連接池中所有的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理裝置還包括成功模塊,用于當(dāng)所述連接模塊使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回給所述連接池,并判斷該網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),根據(jù)判斷結(jié)果,將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接或者無(wú)效的網(wǎng)絡(luò)連接。優(yōu)選地,任務(wù)處理裝置還包括第一設(shè)置模塊,用于在所述接收模塊接收任務(wù)消息之前,在所述分布式消息隊(duì)列的各個(gè)組件中設(shè)置負(fù)載均衡算法。優(yōu)選地,所述選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,按照所述負(fù)載均衡算法從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。優(yōu)選地,所述分布式消息隊(duì)列包括消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件; 所述裝置還包括第二設(shè)置模塊,用于在所述接收模塊接收任務(wù)消息之前,將所述分布式消息隊(duì)列的各個(gè)組件中的連接池分別封裝為網(wǎng)絡(luò)連接循環(huán)隊(duì)列,并且在所述消息中轉(zhuǎn)組件中設(shè)置消息優(yōu)先級(jí)隊(duì)列。優(yōu)選地,所述選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部開(kāi)始,選擇一個(gè)有效的網(wǎng)絡(luò)連接;所述裝置還包括 回歸模塊,用于當(dāng)所述連接模塊使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。優(yōu)選地,所述消息中轉(zhuǎn)組件中的所述消息優(yōu)先級(jí)隊(duì)列為先進(jìn)先出方式的消息優(yōu)先級(jí)隊(duì)列;所述接收模塊,用于所述消息中轉(zhuǎn)組件從所述消息優(yōu)先級(jí)隊(duì)列的頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息作為當(dāng)前待處理的任務(wù)消息。與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn)本申請(qǐng)?jiān)诙嗟懒魉€(xiàn)處理系統(tǒng)中設(shè)置連接池,對(duì)分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接情況進(jìn)行管理,當(dāng)有任務(wù)消息到達(dá)時(shí),多道流水線(xiàn)處理系統(tǒng)會(huì)根據(jù)連接池中的網(wǎng)絡(luò)連接情況為該消息分配有效的網(wǎng)絡(luò)連接。與現(xiàn)有技術(shù)中,當(dāng)網(wǎng)絡(luò)連接出現(xiàn)故障時(shí),如網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)失效,多道流水線(xiàn)處理系統(tǒng)卻不能獲知,而仍然多次嘗試該網(wǎng)絡(luò)連接相比, 本申請(qǐng)的多道流水線(xiàn)處理系統(tǒng)通過(guò)對(duì)連接池的管理即可及時(shí)獲知網(wǎng)絡(luò)連接情況,在網(wǎng)絡(luò)中出現(xiàn)某個(gè)或某些節(jié)點(diǎn)失效時(shí),放棄使用這些失效節(jié)點(diǎn)的網(wǎng)絡(luò)連接,而選用正常節(jié)點(diǎn)進(jìn)行有效的網(wǎng)絡(luò)連接,這一方面使得系統(tǒng)可以及時(shí)偵測(cè)到已經(jīng)失效的網(wǎng)絡(luò)連接,另一方面保證了失效的節(jié)點(diǎn)對(duì)于任務(wù)消息的傳遞的影響到最低,從而有效避免了目前的分布式消息隊(duì)列系統(tǒng)中,因節(jié)點(diǎn)失效造成集群處理能力下降的問(wèn)題,有效保證了多道流水線(xiàn)處理系統(tǒng)的集群處理能力。
圖1是根據(jù)現(xiàn)有技術(shù)的一種Gearman系統(tǒng)進(jìn)行任務(wù)處理的通信時(shí)序圖;圖2是根據(jù)本申請(qǐng)實(shí)施例一的一種任務(wù)處理方法的步驟流程圖;圖3是根據(jù)本申請(qǐng)實(shí)施例二的一種任務(wù)處理方法的步驟流程圖;圖4是根據(jù)本申請(qǐng)實(shí)施例三的一種任務(wù)處理方法的步驟流程圖;圖5是圖4所示實(shí)施例的任務(wù)處理方法中的一種網(wǎng)絡(luò)連接循環(huán)隊(duì)列初始化狀態(tài)時(shí)的示意圖;圖6是圖4所示實(shí)施例的任務(wù)處理方法中的一種網(wǎng)絡(luò)連接循環(huán)隊(duì)列申請(qǐng)連接后狀態(tài)的示意圖;圖7是根據(jù)本申請(qǐng)實(shí)施例四的一種任務(wù)處理裝置的結(jié)構(gòu)框圖;圖8是根據(jù)本申請(qǐng)實(shí)施例五的一種任務(wù)處理裝置的結(jié)構(gòu)框圖;圖9是圖8所示實(shí)施例的任務(wù)處理裝置中的網(wǎng)絡(luò)連接管理模塊管理網(wǎng)絡(luò)連接的通信時(shí)序圖;圖10是圖8所示實(shí)施例的任務(wù)處理裝置中的網(wǎng)絡(luò)連接管理模塊管理網(wǎng)絡(luò)連接的流程圖。
具體實(shí)施例方式為使本申請(qǐng)的上述目的、特征和優(yōu)點(diǎn)能夠更加明顯易懂,下面結(jié)合附圖和具體實(shí)施方式
對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)的說(shuō)明。實(shí)施例一參照?qǐng)D2,示出了根據(jù)本申請(qǐng)實(shí)施例一的一種任務(wù)處理方法的步驟流程圖。本實(shí)施例的任務(wù)處理方法包括以下步驟步驟S102 多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任
務(wù)消息。其中,多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,連接池用于存儲(chǔ)分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息。任務(wù)消息是用于進(jìn)行相應(yīng)任務(wù)處理的消息,可以是包括具體任務(wù)的消息,也可以是包括任務(wù)處理結(jié)果的消息。多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中可以包括多個(gè)組件,如消息發(fā)布組件、 消息中轉(zhuǎn)組件和消息處理組件。在接收到任務(wù)消息進(jìn)行任務(wù)處理時(shí),需要依賴(lài)于組件之間的網(wǎng)絡(luò)連接,如消息發(fā)布組件通過(guò)與消息中轉(zhuǎn)組件之間的網(wǎng)絡(luò)連接,將任務(wù)發(fā)布到消息中轉(zhuǎn)組件;消息中轉(zhuǎn)組件接收任務(wù)后,經(jīng)過(guò)調(diào)度,將任務(wù)發(fā)送到與其有網(wǎng)絡(luò)連接的消息處理組件上;消息處理組件對(duì)任務(wù)進(jìn)行處理后,再通過(guò)與消息中轉(zhuǎn)組件之間的網(wǎng)絡(luò)連接,將任務(wù)處理結(jié)果返回給消息中轉(zhuǎn)組件,由消息中轉(zhuǎn)組件進(jìn)行后續(xù)處理。連接池可以設(shè)置于分布式消息隊(duì)列的各個(gè)組件中,以存儲(chǔ)本組件和與本組件與直接連接關(guān)系的其它組件之間的網(wǎng)絡(luò)連接信息,也可以存儲(chǔ)本組件與分布式消息隊(duì)列中的其它組件之間的直接或間接的網(wǎng)絡(luò)連接信息;連接池也可以設(shè)置于獨(dú)立于分布式消息隊(duì)列的各個(gè)組件之外的適當(dāng)位置,以存儲(chǔ)有直接連接關(guān)系的組件之間的網(wǎng)絡(luò)連接信息,或者存儲(chǔ)各個(gè)組件之間的直接或間接的網(wǎng)絡(luò)連接的信息。步驟S104 根據(jù)網(wǎng)絡(luò)連接的信息,從連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。當(dāng)組件接收到任務(wù)消息后,根據(jù)該任務(wù)消息所要處理的任務(wù),從連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。比如,消息發(fā)布組件接收到一個(gè)任務(wù)消息,確定該消息需要向消息中轉(zhuǎn)組件發(fā)布, 則從連接池中選擇一個(gè)消息發(fā)布組件和消息中轉(zhuǎn)組件之間的有產(chǎn)的網(wǎng)絡(luò)連接,然后,通過(guò)該網(wǎng)絡(luò)連接向消息中轉(zhuǎn)組件發(fā)布該任務(wù)消息?;蛘?,消息發(fā)布組件從連接池中選擇一個(gè)從消息發(fā)布組件到消息中轉(zhuǎn)組件再到消息處理組件之間的有效網(wǎng)絡(luò)連接,通過(guò)該網(wǎng)絡(luò)連接, 先將任務(wù)消息發(fā)布到消息中轉(zhuǎn)組件,再由消息中轉(zhuǎn)組件通過(guò)該連接,將任務(wù)消息交給任務(wù)處理組件處理。步驟S106 使用選擇的有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息,進(jìn)行任務(wù)消息所請(qǐng)求的任務(wù)處理。本實(shí)施例通過(guò)在多道流水線(xiàn)處理系統(tǒng)中設(shè)置連接池,對(duì)分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接情況進(jìn)行管理,當(dāng)有任務(wù)消息到達(dá)時(shí),多道流水線(xiàn)處理系統(tǒng)會(huì)根據(jù)連接池中的網(wǎng)絡(luò)連接情況為該消息分配有效的網(wǎng)絡(luò)連接。與現(xiàn)有技術(shù)中,當(dāng)網(wǎng)絡(luò)連接出現(xiàn)故障時(shí),如網(wǎng)絡(luò)中的某個(gè)節(jié)點(diǎn)失效,多道流水線(xiàn)處理系統(tǒng)卻不能獲知,而仍然多次嘗試該網(wǎng)絡(luò)連接相比,本申請(qǐng)的多道流水線(xiàn)處理系統(tǒng)通過(guò)對(duì)連接池的管理即可及時(shí)獲知網(wǎng)絡(luò)連接情況, 在網(wǎng)絡(luò)中出現(xiàn)某個(gè)或某些節(jié)點(diǎn)失效時(shí),放棄使用這些失效節(jié)點(diǎn)的網(wǎng)絡(luò)連接,而選用正常節(jié)點(diǎn)進(jìn)行有效的網(wǎng)絡(luò)連接,這一方面使得系統(tǒng)可以及時(shí)偵測(cè)到已經(jīng)失效的網(wǎng)絡(luò)連接,另一方面保證了失效的節(jié)點(diǎn)對(duì)于任務(wù)消息的傳遞的影響到最低,從而有效避免了目前的分布式消息隊(duì)列系統(tǒng)中,因節(jié)點(diǎn)失效造成集群處理能力下降的問(wèn)題,有效保證了多道流水線(xiàn)處理系統(tǒng)的集群處理能力。實(shí)施例二參照?qǐng)D3,示出了根據(jù)本申請(qǐng)實(shí)施例二的一種任務(wù)處理方法的步驟流程圖。本實(shí)施例中,連接池設(shè)置于分布式消息隊(duì)列的各個(gè)組件中,每個(gè)組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息。本實(shí)施例中,分布式消息隊(duì)列包括消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件, 設(shè)定消息發(fā)布組件接收到一個(gè)任務(wù)消息,選擇網(wǎng)絡(luò)連接進(jìn)行任務(wù)處理。需要說(shuō)明的是,分布式消息隊(duì)列中的多個(gè)組件接收到任務(wù)消息時(shí),各個(gè)組件對(duì)任務(wù)消息的處理,均可參照本實(shí)施例進(jìn)行。本實(shí)施例的任務(wù)處理方法包括以下步驟步驟S202 多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的消息發(fā)布組件接收到一個(gè)任務(wù)消息。步驟S204 消息發(fā)布組件根據(jù)其連接池中的網(wǎng)絡(luò)連接信息,判斷其連接池中是否存在有效的網(wǎng)絡(luò)連接,若存在,則執(zhí)行步驟S206 ;若不存在,則執(zhí)行步驟S220。網(wǎng)絡(luò)連接信息是描述本組件與其它組件網(wǎng)絡(luò)連接狀況的信息,可以包括流水線(xiàn)名字、目的地址端口號(hào)、本地端口號(hào),以及網(wǎng)絡(luò)連接的有效或無(wú)效狀態(tài)等。本實(shí)施例中,消息發(fā)布組件的連接池中包括了所有消息發(fā)布組件與消息中轉(zhuǎn)組件之間的網(wǎng)絡(luò)連接的信息。與此類(lèi)似,消息中轉(zhuǎn)組件的連接池中則包括了所有消息中轉(zhuǎn)組件與消息發(fā)布組件之間的、以及消息中轉(zhuǎn)組件與消息處理組件之間的網(wǎng)絡(luò)連接的信息;而消息處理組件的連接池中則包括了所有消息處理組件與消息中轉(zhuǎn)組件之間的網(wǎng)絡(luò)連接的信息。通過(guò)判斷連接池中是否存在有效的網(wǎng)絡(luò)連接,可以使組件快速了解其與其它組件的當(dāng)前連接狀況,以保障網(wǎng)絡(luò)連接的正常,為任務(wù)消息的正常處理提供有效保障。步驟S206 消息發(fā)布組件從所有有效的網(wǎng)絡(luò)連接中選擇一個(gè)網(wǎng)絡(luò)連接。步驟S208 消息發(fā)布組件使用選擇的網(wǎng)絡(luò)連接將任務(wù)消息發(fā)送到消息中轉(zhuǎn)組件。消息中轉(zhuǎn)組件接收到該任務(wù)消息后,進(jìn)行適當(dāng)?shù)恼{(diào)度,交給消息處理組件進(jìn)行相應(yīng)的任務(wù)處理。步驟S210 消息發(fā)布組件判斷使用選擇的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息是否成功,若成功,則執(zhí)行步驟S212 ;若失敗,則執(zhí)行步驟S214。步驟S212 消息發(fā)布組件將發(fā)送任務(wù)消息的網(wǎng)絡(luò)連接返回給其連接池,并判斷該網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),根據(jù)判斷結(jié)果,將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接或者無(wú)效的網(wǎng)絡(luò)連接,結(jié)束本次任務(wù)消息發(fā)送過(guò)程。當(dāng)任務(wù)消息發(fā)送成功后,及時(shí)將網(wǎng)絡(luò)連接資源返回給連接池,能夠使其它任務(wù)消息有足夠的網(wǎng)絡(luò)連接資源可用;而通過(guò)判斷返回的網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),確定該網(wǎng)絡(luò)連接的有效或失效,則向組件提供了網(wǎng)絡(luò)連接的及時(shí)的、可靠的信息,以保障任務(wù)的高效處理。步驟S214 消息發(fā)布組件重新選擇一個(gè)有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息,并中斷之前選擇的網(wǎng)絡(luò)連接,釋放該網(wǎng)絡(luò)連接的資源,將該網(wǎng)絡(luò)連接設(shè)置為失效的網(wǎng)絡(luò)連接;并且, 記錄該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息。時(shí)間間隔由本領(lǐng)域技術(shù)人員依據(jù)網(wǎng)絡(luò)狀況,如網(wǎng)絡(luò)帶寬或者該網(wǎng)絡(luò)連接經(jīng)過(guò)的交換機(jī)的數(shù)量等,靈活設(shè)置,本申請(qǐng)對(duì)此不作限制。步驟S216 當(dāng)經(jīng)過(guò)設(shè)定的時(shí)間間隔后,消息發(fā)布組件接收到新的任務(wù)消息,嘗試恢復(fù)中斷的網(wǎng)絡(luò)連接。步驟S218 判斷嘗試恢復(fù)中斷的網(wǎng)絡(luò)連接是否成功,若成功,則將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接,返回步驟S204;若失敗,則重新設(shè)置該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息,返回步驟S216。重連時(shí)間間隔采用固定的時(shí)間間隔,以方便操作和實(shí)現(xiàn)。因此,本步驟中的設(shè)定的時(shí)間間隔與步驟S214中的時(shí)間間隔一致。在大規(guī)模分布式集群中,連接失效的原因有很多,如網(wǎng)絡(luò)的暫時(shí)故障。如何有效的恢復(fù)這些失效連接,成為了管理的重要的問(wèn)題。本申請(qǐng)中,引入了重連時(shí)間的設(shè)定,即設(shè)定一個(gè)時(shí)間間隔。當(dāng)一個(gè)連接失效后,會(huì)按照失效時(shí)間點(diǎn)向后,選擇一個(gè)重連時(shí)間,在重連時(shí)間之前的請(qǐng)求,將不會(huì)嘗試對(duì)連接進(jìn)行恢復(fù),以減少連接重試的開(kāi)銷(xiāo)。當(dāng)有請(qǐng)求在重連時(shí)間之后到來(lái),將嘗試恢復(fù)該網(wǎng)絡(luò)連接,若恢復(fù)失敗,則再次設(shè)置重連時(shí)間;若成功,則將該連接返回提供給消息組件進(jìn)行通信。步驟S220 將消息發(fā)布組件的連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),并嘗試恢復(fù)該連接池中所有的網(wǎng)絡(luò)連接;然后,返回步驟S204。當(dāng)連接池中所有連接都已經(jīng)失效時(shí),將取消所有連接的重連時(shí)間,因?yàn)檫@時(shí)消息發(fā)布組件已經(jīng)無(wú)法提供任何連接供通信使用,消息發(fā)布組件已經(jīng)無(wú)法正常完成流水線(xiàn)的處理,此時(shí)應(yīng)該盡快恢復(fù)網(wǎng)絡(luò)連接,保證任務(wù)的正常處理。優(yōu)選地,將連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),方便中斷時(shí)間點(diǎn)設(shè)置,及后續(xù)間隔時(shí)間計(jì)算,便于實(shí)現(xiàn)。通過(guò)本實(shí)施例,有效保證了任務(wù)消息的發(fā)送,進(jìn)而保證了任務(wù)的處理,避免了因節(jié)點(diǎn)失效造成分布式消息隊(duì)列系統(tǒng)的集群處理能力下降的問(wèn)題,保證了多道流水線(xiàn)處理系統(tǒng)的集群處理能力。需要說(shuō)明的是,本實(shí)施例僅以消息發(fā)布組件為例,對(duì)任務(wù)消息的處理作以說(shuō)明,但本領(lǐng)域技術(shù)人員應(yīng)當(dāng)明了,分布式消息隊(duì)列的其它組件均可參照本實(shí)施例對(duì)任務(wù)消息進(jìn)行了相應(yīng)地處理。實(shí)施例三參照?qǐng)D4,示出了根據(jù)本申請(qǐng)實(shí)施例三的一種任務(wù)處理方法的步驟流程圖。本實(shí)施例在圖3所示實(shí)施例的基礎(chǔ)上,在各個(gè)組件上設(shè)置負(fù)載均衡算法,增加負(fù)載均衡功能,以對(duì)網(wǎng)絡(luò)連接或任務(wù)消息進(jìn)行負(fù)載均衡。并且,將分布式消息隊(duì)列的各個(gè)組件中的連接池分別封裝為網(wǎng)絡(luò)連接循環(huán)隊(duì)列,同時(shí)在消息中轉(zhuǎn)組件中設(shè)置消息優(yōu)先級(jí)隊(duì)列。也就是說(shuō),消息中轉(zhuǎn)組件中設(shè)置有網(wǎng)絡(luò)連接循環(huán)隊(duì)列和消息優(yōu)先級(jí)隊(duì)列,而消息發(fā)布組件和消息處理組件因不會(huì)臨時(shí)存儲(chǔ)任務(wù)消息,所以這兩個(gè)組件中僅設(shè)置有網(wǎng)絡(luò)連接循環(huán)隊(duì)列,而沒(méi)有消息優(yōu)先級(jí)隊(duì)列。本實(shí)施例以消息中轉(zhuǎn)組件為例,對(duì)其根據(jù)負(fù)載均衡算法進(jìn)行消息處理及網(wǎng)絡(luò)連接選擇進(jìn)行說(shuō)明。需要說(shuō)明的是,因消息發(fā)布組件和消息處理組件僅設(shè)置有網(wǎng)絡(luò)連接循環(huán)隊(duì)列,因此,可以?xún)H參照本實(shí)施例的消息中轉(zhuǎn)組件的網(wǎng)絡(luò)連接選擇方法進(jìn)行負(fù)載均衡。本實(shí)施例的任務(wù)處理方法包括以下步驟步驟S302 消息發(fā)布組件將任務(wù)消息傳遞至消息中轉(zhuǎn)組件。其中,消息發(fā)布組件根據(jù)設(shè)定的負(fù)載均衡算法,從其自身的網(wǎng)絡(luò)連接循環(huán)隊(duì)列中選擇一個(gè)有效的網(wǎng)絡(luò)連接,將任務(wù)消息傳遞給消息中轉(zhuǎn)組件。本實(shí)施例中,設(shè)定各個(gè)組件均使用LRU (Least Recently Used)算法進(jìn)行網(wǎng)絡(luò)連接的負(fù)載均衡。在選擇有效網(wǎng)絡(luò)連接時(shí),將從網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部提取一個(gè)有效的網(wǎng)絡(luò)連接,返回給組件進(jìn)行通信。當(dāng)通信完成后,該連接將會(huì)被放入網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。 網(wǎng)絡(luò)連接循環(huán)隊(duì)列初始化狀態(tài)時(shí)的示意圖和申請(qǐng)連接后狀態(tài)的示意圖分別如圖5和圖6所
7J\ ο通過(guò)這種方式,實(shí)現(xiàn)了一個(gè)完整的LRU算法,并使得所有的組件都可以使用該算法進(jìn)行連接的管理,以實(shí)現(xiàn)全局的負(fù)載均衡。使用LRU算法,實(shí)現(xiàn)簡(jiǎn)單,且查找有效網(wǎng)絡(luò)連接快速高效。當(dāng)然,不限于此,本領(lǐng)域技術(shù)人員在實(shí)際時(shí),可以采用任意適當(dāng)?shù)呢?fù)載均衡算法,本申請(qǐng)對(duì)此不作限制。步驟S304 消息中轉(zhuǎn)組件依次將任務(wù)消息插入消息優(yōu)先級(jí)隊(duì)列的尾部,并將該任務(wù)消息設(shè)置為可見(jiàn)狀態(tài)。步驟S306 消息中轉(zhuǎn)組件根據(jù)設(shè)定的負(fù)載均衡算法,從消息優(yōu)先級(jí)隊(duì)列中選擇一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息。本實(shí)施例中,設(shè)定消息優(yōu)先級(jí)隊(duì)列中先進(jìn)先出FIFO方式的隊(duì)列。消息中轉(zhuǎn)組件從消息優(yōu)先級(jí)隊(duì)列頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息,作為當(dāng)前待處理的任務(wù)消息。消息優(yōu)先級(jí)隊(duì)列是為了保證任務(wù)消息可以可靠、公平的進(jìn)行處理而設(shè)計(jì)的。該隊(duì)列使用先進(jìn)先出(FIFO)的方式,對(duì)任務(wù)消息進(jìn)行管理,這保證了消息在時(shí)序上的公平性, 即先提交的任務(wù),可以得到優(yōu)先的處理,同時(shí)也不影響后續(xù)提交的任務(wù)的正確調(diào)度。步驟S308 消息中轉(zhuǎn)組件將任務(wù)消息發(fā)送至消息處理組件。本步驟中,消息中轉(zhuǎn)組件根據(jù)LRU算法,從自身的網(wǎng)絡(luò)連接循環(huán)隊(duì)列中選擇一個(gè)有效的網(wǎng)絡(luò)連接,將任務(wù)消息發(fā)送給消息處理組件。步驟S310 消息中轉(zhuǎn)組件將發(fā)送出去的任務(wù)消息設(shè)置為不可見(jiàn)狀態(tài),并等待消息處理組件的回復(fù)。步驟S312 消息中轉(zhuǎn)組件根據(jù)消息處理處理的回復(fù),對(duì)該任務(wù)消息進(jìn)行處理 ’然后,返回步驟S306。如果任務(wù)處理組件處理該任務(wù)消息成功,消息中轉(zhuǎn)組件將刪除該任務(wù)消息;如果任務(wù)處理組件處理該任務(wù)消息不成功,消息中轉(zhuǎn)組件將重新將該任務(wù)消息設(shè)置為可見(jiàn)狀態(tài)。本實(shí)施例重點(diǎn)對(duì)分布式消息隊(duì)列中各個(gè)組件的負(fù)載均衡進(jìn)行了說(shuō)明,而對(duì)網(wǎng)絡(luò)連接的選擇和處理部分描述的較為簡(jiǎn)單,本領(lǐng)域技術(shù)人員在具體實(shí)施時(shí),可以參照實(shí)施例二中的相關(guān)方法進(jìn)行有效網(wǎng)絡(luò)連接的選擇和后續(xù)相關(guān)處理,在此不再贅述。在大規(guī)模分布式環(huán)境下,單個(gè)節(jié)點(diǎn)的能力是有限的,通常只能夠滿(mǎn)足某一類(lèi)任務(wù)性能要求的幾分之一,甚至幾十分之一,這就要求整個(gè)的多道流水線(xiàn)處理系統(tǒng),能夠充分利用目前所有已知節(jié)點(diǎn)進(jìn)行任務(wù)的處理。目前的各類(lèi)分布式消息隊(duì)列系統(tǒng),對(duì)于負(fù)載均衡的問(wèn)題,都沒(méi)有給出合理的解決方案,多數(shù)只是依賴(lài)于系統(tǒng)的調(diào)度策略進(jìn)行調(diào)節(jié)。這樣將造成部分節(jié)點(diǎn)負(fù)載過(guò)高,但系統(tǒng)仍然沒(méi)有充分利用所有處理節(jié)點(diǎn)的處理能力,大量節(jié)點(diǎn)的能力被浪費(fèi)。通過(guò)本實(shí)施例,不但解決了分布式消息隊(duì)列中,因節(jié)點(diǎn)失效造成集群處理能力下降的問(wèn)題,而且解決了分布式消息隊(duì)列的負(fù)載均衡問(wèn)題,使得整個(gè)系統(tǒng)中的全部處理任務(wù)能夠均勻地分配到每個(gè)處理節(jié)點(diǎn)中。實(shí)施例四參照?qǐng)D7,示出了根據(jù)本申請(qǐng)實(shí)施例四的一種任務(wù)處理裝置的結(jié)構(gòu)框圖。本實(shí)施例的任務(wù)處理裝置包括接收模塊402,用于在多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件中接收任務(wù)消息,其中,多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,連接池用于存儲(chǔ)分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息;選擇模塊404, 用于根據(jù)網(wǎng)絡(luò)連接的信息,從連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接;連接模塊406,用于使用選擇的有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息,進(jìn)行任務(wù)消息所請(qǐng)求的任務(wù)處理。優(yōu)選地,分布式消息隊(duì)列的每個(gè)組件中均設(shè)置有連接池,每個(gè)組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息;選擇模塊404,用于根據(jù)網(wǎng)絡(luò)連接的信息, 從接收到任務(wù)消息的組件的連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。優(yōu)選地,本實(shí)施例的任務(wù)處理裝置還包括失敗模塊408,用于若連接模塊406使用選擇的有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息失敗,則重新選擇一個(gè)有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息,并中斷失敗的網(wǎng)絡(luò)連接并釋放其資源,將該網(wǎng)絡(luò)連接設(shè)置為失效的網(wǎng)絡(luò)連接;記錄該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息。優(yōu)選地,本實(shí)施例的任務(wù)處理裝置還包括重連模塊410,用于當(dāng)經(jīng)過(guò)設(shè)定的時(shí)間間隔后,接收模塊402接收到新的任務(wù)消息,嘗試恢復(fù)中斷的網(wǎng)絡(luò)連接。優(yōu)選地,本實(shí)施例的任務(wù)處理裝置還包括重連設(shè)置模塊412,用于若重連模塊 410嘗試恢復(fù)中斷的網(wǎng)絡(luò)連接失敗,則重新設(shè)置該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息;若嘗試恢復(fù)中斷的網(wǎng)絡(luò)連接成功,則將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接。優(yōu)選地,本實(shí)施例的任務(wù)處理裝置還包括判斷模塊414,用于在選擇模塊404根據(jù)網(wǎng)絡(luò)連接的信息,從連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接之前,根據(jù)網(wǎng)絡(luò)連接的信息,判斷連接池中是否存在有效的網(wǎng)絡(luò)連接;若存在,則執(zhí)行選擇模塊404 ;若不存在,將連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),并嘗試恢復(fù)連接池中所有的網(wǎng)絡(luò)連接。優(yōu)選地,本實(shí)施例的任務(wù)處理裝置還包括成功模塊416,用于當(dāng)連接模塊406使用選擇的有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回給連接池,并判斷該網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),根據(jù)判斷結(jié)果,將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接或者無(wú)效的網(wǎng)絡(luò)連接。優(yōu)選地,本實(shí)施例的任務(wù)處理裝置還包括第一設(shè)置模塊418,用于在接收模塊402接收任務(wù)消息之前,在分布式消息隊(duì)列的各個(gè)組件中設(shè)置負(fù)載均衡算法。優(yōu)選地,選擇模塊404,用于根據(jù)網(wǎng)絡(luò)連接的信息,按照負(fù)載均衡算法從接收到任務(wù)消息的組件的連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。優(yōu)選地,分布式消息隊(duì)列包括消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件;本實(shí)施例的任務(wù)處理裝置還包括第二設(shè)置模塊420,用于在接收模塊402接收任務(wù)消息之前, 將分布式消息隊(duì)列的各個(gè)組件中的連接池分別封裝為網(wǎng)絡(luò)連接循環(huán)隊(duì)列,并且在消息中轉(zhuǎn)組件中設(shè)置消息優(yōu)先級(jí)隊(duì)列。優(yōu)選地,選擇模塊404,用于根據(jù)網(wǎng)絡(luò)連接的信息,從接收到任務(wù)消息的組件的網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部開(kāi)始,選擇一個(gè)有效的網(wǎng)絡(luò)連接;本實(shí)施例的任務(wù)處理裝置還包括 回歸模塊(圖中未示出),用于當(dāng)連接模塊406使用選擇的有效的網(wǎng)絡(luò)連接發(fā)送任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。優(yōu)選地,消息中轉(zhuǎn)組件中的消息優(yōu)先級(jí)隊(duì)列為先進(jìn)先出方式的消息優(yōu)先級(jí)隊(duì)列; 接收模塊402,用于消息中轉(zhuǎn)組件從消息優(yōu)先級(jí)隊(duì)列的頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息作為當(dāng)前待處理的任務(wù)消息。本實(shí)施例的任務(wù)處理裝置用于實(shí)現(xiàn)前述多個(gè)方法實(shí)施例中相應(yīng)的任務(wù)處理方法, 并具有相應(yīng)的任務(wù)處理方法的有益效果,在此不再贅述。實(shí)施例五參照?qǐng)D8,示出了根據(jù)本申請(qǐng)實(shí)施例五的一種任務(wù)處理裝置的結(jié)構(gòu)框圖。本實(shí)施例中,分布式消息隊(duì)列的各個(gè)組件中均設(shè)置有連接池,每個(gè)組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息;并且,在各個(gè)組件上設(shè)置有負(fù)載均衡算法,以對(duì)網(wǎng)絡(luò)連接或任務(wù)消息進(jìn)行負(fù)載均衡。本實(shí)施例的任務(wù)處理裝置主要包括網(wǎng)絡(luò)連接管理模塊502和負(fù)載均衡模塊504。其中網(wǎng)絡(luò)連接管理模塊502負(fù)責(zé)所有組件中的網(wǎng)絡(luò)連接管理,可以設(shè)置在各個(gè)組件中,也可以設(shè)置在各組件之外,主要功能在于監(jiān)控網(wǎng)絡(luò)連接的狀態(tài),以及對(duì)于失效連接的管理(其功能包括了實(shí)施例四中的選擇模塊、連接模塊、失敗模塊、成功模塊、重連模塊和重連設(shè)置模塊等模塊的功能)。其監(jiān)控與管理都是通過(guò)各組件中建立的連接池,按順序?qū)?dāng)前組件中的所有網(wǎng)絡(luò)連接都放在連接池中。對(duì)于網(wǎng)絡(luò)連接管理模塊502的網(wǎng)絡(luò)連接管理功能,當(dāng)有網(wǎng)絡(luò)通信需要進(jìn)行時(shí),組件通過(guò)相應(yīng)接口請(qǐng)求一個(gè)網(wǎng)絡(luò)連接以供通信使用,網(wǎng)絡(luò)連接管理模塊502將在組件的連接池中選擇一個(gè)可用連接(即有效的網(wǎng)絡(luò)連接)并返回。當(dāng)通信成功完成時(shí),組件將把該連接返回給網(wǎng)絡(luò)連接管理模塊502管理的連接池;若通過(guò)該連接進(jìn)行通信失敗,則系統(tǒng)會(huì)通知網(wǎng)絡(luò)連接管理模塊502。之后,網(wǎng)絡(luò)連接管理模塊502會(huì)分析失敗原因,并將該失效連接中斷以釋放資源,同時(shí)還會(huì)記錄下該次中斷的時(shí)間點(diǎn),在一定時(shí)間間隔內(nèi),網(wǎng)絡(luò)連接管理模塊502將不再使用該網(wǎng)絡(luò)連接進(jìn)行通信,防止單點(diǎn)失效問(wèn)題,引起的性能下降。網(wǎng)絡(luò)連接管理模塊502對(duì)網(wǎng)絡(luò)連接進(jìn)行管理的時(shí)序圖如圖9所示??梢?jiàn),當(dāng)分布式消息隊(duì)列的組件, 如消息發(fā)布組件、消息中轉(zhuǎn)組件或消息處理組件,在需要網(wǎng)絡(luò)連接時(shí),向網(wǎng)絡(luò)連接管理模塊 502發(fā)送請(qǐng)求連接的請(qǐng)求;網(wǎng)絡(luò)連接管理模塊502在接收到請(qǐng)求后,從連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接,返回給請(qǐng)求的組件;組件在使用網(wǎng)絡(luò)連接管理模塊502返回的有效網(wǎng)絡(luò)連接進(jìn)行通信后,將該連接再次返回給網(wǎng)絡(luò)連接管理模塊502 ;此后,網(wǎng)絡(luò)連接管理模塊502 判斷返回的該連接的當(dāng)前連接狀態(tài),以便更有效地管理組件間的網(wǎng)絡(luò)連接。網(wǎng)絡(luò)連接管理模塊502的第二個(gè)主要功能是管理失效連接,在大規(guī)模分布式集群中,連接失效的原因有很多,如網(wǎng)絡(luò)的暫時(shí)故障。如何有效的恢復(fù)這些失效連接,成為了管理的重要的問(wèn)題。在這里,本申請(qǐng)引入了重連時(shí)間的設(shè)定,當(dāng)一個(gè)連接失效后,會(huì)按照失效時(shí)間點(diǎn)向后,選擇一個(gè)重連時(shí)間,在重連時(shí)間之前的請(qǐng)求,網(wǎng)絡(luò)連接管理模塊502將不會(huì)嘗試對(duì)連接進(jìn)行恢復(fù),以減少連接重試的開(kāi)銷(xiāo)。當(dāng)有請(qǐng)求在重連時(shí)間之后到來(lái),網(wǎng)絡(luò)連接管理模塊502將嘗試恢復(fù)該網(wǎng)絡(luò)連接,若恢復(fù)失敗,則再次設(shè)置重連時(shí)間;若成功,則將該連接返回提供給消息組件進(jìn)行通信。一個(gè)網(wǎng)絡(luò)連接管理模塊502設(shè)置重連時(shí)間的接口的示例如下所示
void gearman—set—reconnect—interval ( gearmanst *gearman, int reconnect—interval); //重連間隔時(shí)間設(shè)定
void gearman—set—timeout(gearman—st *gearman, int timeout);
//超時(shí)等待時(shí)間設(shè)定
struct gearman st //使用的數(shù)據(jù)類(lèi)型的定義 {
int timeout;
time t reconnect—interval; /* seconds */消息組件可以通過(guò)該接口設(shè)定連接時(shí)的超時(shí)等待時(shí)間與重連的時(shí)間間隔。具體設(shè)定時(shí),不同的業(yè)務(wù)可以根據(jù)自身的需求和網(wǎng)絡(luò)狀態(tài)進(jìn)行設(shè)置。例如,在同一個(gè)網(wǎng)絡(luò)區(qū)段內(nèi), 可以將timeout時(shí)間縮短,以減小網(wǎng)絡(luò)重連失敗時(shí)的開(kāi)銷(xiāo);當(dāng)網(wǎng)絡(luò)波動(dòng)比較頻繁時(shí),可以將 reconnect_nterval時(shí)間縮短,以盡快恢復(fù)網(wǎng)絡(luò)連接,避免當(dāng)所有連接失效時(shí),重連所有連接造成的大量開(kāi)銷(xiāo)。此外,在接口設(shè)計(jì)中,本申請(qǐng)將恢復(fù)的流程集成到了網(wǎng)絡(luò)連接管理模塊502的接口內(nèi)部,這樣可以保證,在組件不進(jìn)行通信時(shí),網(wǎng)絡(luò)連接管理模塊502不會(huì)進(jìn)行不必要的嘗試連接,進(jìn)一步降低了恢復(fù)的開(kāi)銷(xiāo)。需要特別注意的是,當(dāng)連接池中所有連接都已經(jīng)失效時(shí),將取消所有連接的重連時(shí)間,因?yàn)檫@時(shí)網(wǎng)絡(luò)連接管理模塊502已經(jīng)無(wú)法提供任何連接供消息組件進(jìn)行通信,消息組件已經(jīng)無(wú)法正常完成流水線(xiàn)的處理,此時(shí)應(yīng)該盡快恢復(fù)網(wǎng)絡(luò)連接,保證任務(wù)的正常處理。本實(shí)施例中,網(wǎng)絡(luò)連接管理模塊502實(shí)現(xiàn)網(wǎng)絡(luò)管理的流程如圖10所示,包括
步驟S602 網(wǎng)絡(luò)連接管理模塊502接收到請(qǐng)求網(wǎng)絡(luò)連接的請(qǐng)求。步驟S604 網(wǎng)絡(luò)連接管理模塊502檢查相應(yīng)組件的連接池中的下一個(gè)連接。步驟S606 網(wǎng)絡(luò)連接管理模塊502檢查該連接是否有效,若是,則執(zhí)行步驟S608 ; 若否,則執(zhí)行步驟S610。步驟S608 網(wǎng)絡(luò)連接管理模塊502向組件返回該連接,本次連接選擇過(guò)程結(jié)束。步驟S610 網(wǎng)絡(luò)連接管理模塊502判斷該連接的重連時(shí)間是否到達(dá),若是,則執(zhí)行步驟S612 ;若否,則執(zhí)行步驟S618。步驟S612 網(wǎng)絡(luò)連接管理模塊502嘗試恢復(fù)該連接。步驟S614 網(wǎng)絡(luò)連接管理模塊502判斷嘗試連接是否成功,若是,則返回步驟 S608 ;若否,則執(zhí)行步驟S616。步驟S616 網(wǎng)絡(luò)連接管理模塊502重新為該連接設(shè)置重連時(shí)間,然后,返回步驟 S604。步驟S618 網(wǎng)絡(luò)連接管理模塊502判斷是否已檢查連接池中的所有連接,若是,執(zhí)行步驟S620 ;若否,則返回步驟S604。步驟S620 網(wǎng)絡(luò)連接管理模塊502重新設(shè)置連接池中所有連接的重連時(shí)間。通過(guò)上述過(guò)程,網(wǎng)絡(luò)連接管理模塊502實(shí)現(xiàn)了組件傳遞任務(wù)消息的有效網(wǎng)絡(luò)連接,解決了現(xiàn)有分布式消息隊(duì)列中節(jié)點(diǎn)失效帶來(lái)的處理能力下降的問(wèn)題。然而,在大規(guī)模集群系統(tǒng)中,即使能解決節(jié)點(diǎn)失效問(wèn)題,但如果大量的任務(wù)集中在同一個(gè)組件中進(jìn)行,則該組件即使使用連接池和網(wǎng)絡(luò)連接管理模塊502對(duì)網(wǎng)絡(luò)連接進(jìn)行管理,也無(wú)法保證連接的充分可用和有效。為此,本實(shí)施例的任務(wù)處理裝置中還設(shè)置了負(fù)載均衡模塊504。通過(guò)圖1分布式消息隊(duì)列的通信時(shí)序圖可以知道,分布式消息隊(duì)列的組件之間的網(wǎng)絡(luò)通信共有3組傳輸方向消息發(fā)布組件一消息中轉(zhuǎn)組件;消息中轉(zhuǎn)組件一消息處理組件;消息處理組件一消息中轉(zhuǎn)組件。任何一組通信的負(fù)載不均衡,都將對(duì)系統(tǒng)的處理能力造成嚴(yán)重的影響。例如消息發(fā)布組件一消息中轉(zhuǎn)組件的負(fù)載不均衡時(shí),將造成大量消息發(fā)送至某些消息中轉(zhuǎn)組件,使得這些中轉(zhuǎn)組件過(guò)于繁忙,無(wú)法及時(shí)提供響應(yīng);空閑的中轉(zhuǎn)組件則沒(méi)有消息進(jìn)行調(diào)度。這時(shí),消息中轉(zhuǎn)組件將限制系統(tǒng)總體的吞吐能力。消息中轉(zhuǎn)組件一消息處理組件的負(fù)載不均衡時(shí),會(huì)造成中轉(zhuǎn)組件將大量的消息發(fā)送給某些消息處理組件,使得這些處理組件過(guò)于繁忙;而另一部分處理組件無(wú)法獲取到中轉(zhuǎn)組件中的消息進(jìn)行處理,一直處理等待狀態(tài)。這一現(xiàn)象會(huì)從整體上降低處理集群的處理能力,即使進(jìn)行水平擴(kuò)展,增加處理單元的數(shù)量,但由于新加入的節(jié)點(diǎn)也無(wú)法獲取到中轉(zhuǎn)組件上的消息,而造成水平擴(kuò)展的失效。消息處理組件一消息中轉(zhuǎn)組件的負(fù)載不均衡,與消息發(fā)布組件一消息中轉(zhuǎn)組件的現(xiàn)象相似。消息處理組件只優(yōu)先處理某些消息中轉(zhuǎn)組件上的任務(wù)消息,當(dāng)這些中轉(zhuǎn)組件上出現(xiàn)任何消息時(shí),都有大量的處理組件可以調(diào)度;而另一部分中轉(zhuǎn)組件上的任務(wù)消息,則無(wú)法得到及時(shí)響應(yīng),造成了任務(wù)處理的延時(shí)。針對(duì)以上問(wèn)題,本實(shí)施例在所有消息組件中,都設(shè)置了負(fù)載均衡模塊504(其功能包括實(shí)施例四中第一、第二設(shè)置模塊和回歸模塊等模塊的功能),加入了負(fù)載均衡算法,從而保證了所有消息發(fā)布組件發(fā)出的任務(wù)消息,都能夠公平地被調(diào)度到所有的消息處理組件上。為此,本實(shí)施例設(shè)計(jì)了 2個(gè)隊(duì)列系統(tǒng),一個(gè)是消息優(yōu)先級(jí)隊(duì)列,一個(gè)是網(wǎng)絡(luò)連接循環(huán)隊(duì)列。消息發(fā)布組件與消息處理組件,因?yàn)椴粫?huì)臨時(shí)存儲(chǔ)任務(wù)消息,所以沒(méi)有消息優(yōu)先級(jí)隊(duì)列,僅有網(wǎng)絡(luò)連接的循環(huán)隊(duì)列;消息中轉(zhuǎn)組件則同時(shí)包含了消息優(yōu)先級(jí)隊(duì)列和網(wǎng)絡(luò)連接循環(huán)隊(duì)列。在實(shí)現(xiàn)中,本實(shí)施例將上文中已經(jīng)實(shí)現(xiàn)的網(wǎng)絡(luò)連接池,利用循環(huán)隊(duì)列進(jìn)行了封裝, 形成網(wǎng)絡(luò)連接循環(huán)隊(duì)列。當(dāng)有任何組件需要進(jìn)行網(wǎng)絡(luò)通信時(shí),負(fù)載均衡模塊504將從網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部提取一個(gè)連接,返回給組件進(jìn)行通信。當(dāng)通信完成后,該連接將會(huì)被放入網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。通過(guò)這種方式,本實(shí)施例實(shí)現(xiàn)了一個(gè)完整的LRU算法,并使得所有的組件都可以使用該算法進(jìn)行連接的管理,以實(shí)現(xiàn)全局的負(fù)載均衡。網(wǎng)絡(luò)連接循環(huán)隊(duì)列初始化狀態(tài)的示意圖和申請(qǐng)連接后狀態(tài)的示意圖如圖5和圖6所示。消息優(yōu)先級(jí)隊(duì)列是為了保證消息可以可靠、公平的進(jìn)行處理而設(shè)計(jì)的。該隊(duì)列使用先進(jìn)先出(FIFO)的方式,對(duì)消息進(jìn)行管理,這保證了消息在時(shí)序上的公平性,即先提交的任務(wù),可以得到優(yōu)先的處理,同時(shí)也不影響后續(xù)提交的任務(wù)的正確調(diào)度。在使用上述消息優(yōu)先級(jí)隊(duì)列對(duì)任務(wù)消息進(jìn)行調(diào)度時(shí),先由消息發(fā)布組件將任務(wù)消息傳遞至消息中轉(zhuǎn)組件;消息中轉(zhuǎn)組件依次將該消息插入優(yōu)先級(jí)隊(duì)列的尾部,并將該消息設(shè)置為可見(jiàn)狀態(tài);消息中轉(zhuǎn)組件的負(fù)載均衡模塊504從優(yōu)先級(jí)隊(duì)列頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的消息,之后發(fā)送給相應(yīng)的消息處理組件;消息中轉(zhuǎn)組件將發(fā)送出去的消息設(shè)置為不可見(jiàn)狀態(tài),并等待處理組件的回復(fù);如果處理成功,消息中轉(zhuǎn)組件將刪除該消息; 如果處理不成功,消息中轉(zhuǎn)組件將重新將該消息設(shè)置為可見(jiàn)狀態(tài)。至此,一個(gè)任務(wù)消息在消息中轉(zhuǎn)組件中的調(diào)度處理完成。本實(shí)施例針對(duì)分布式環(huán)境下的特點(diǎn),提供了解決大規(guī)模集群情況下,進(jìn)行均衡任務(wù)負(fù)載,以及在機(jī)器出現(xiàn)故障時(shí),單點(diǎn)失效造成集群處理能力下降的問(wèn)題的方案。通過(guò)本實(shí)施例,在消息組件中對(duì)于網(wǎng)絡(luò)連接進(jìn)行了管理,一方面使得系統(tǒng)可以及時(shí)偵測(cè)到已經(jīng)失效的網(wǎng)絡(luò)連接,另一方面保證失效的節(jié)點(diǎn)對(duì)于任務(wù)消息的傳遞的影響到最低;通過(guò)可配置的接口,讓使用者可以按照需求來(lái)控制對(duì)于失效節(jié)點(diǎn)進(jìn)行恢復(fù)的策略;在消息發(fā)布組件、消息中轉(zhuǎn)組件與消息處理組件中,分別實(shí)現(xiàn)負(fù)載均衡算法,使得整個(gè)系統(tǒng)中的全部處理任務(wù)能夠均勻地分配到每個(gè)處理節(jié)點(diǎn)中。本申請(qǐng)的任務(wù)處理方案可以在大規(guī)模分布式集群中,實(shí)現(xiàn)任務(wù)的多道流水線(xiàn)式的處理,并針對(duì)實(shí)際使用中的單點(diǎn)失效問(wèn)題、負(fù)載均衡問(wèn)題進(jìn)行了詳細(xì)地分析與設(shè)計(jì),保證了集群處理能力的充分利用。本申請(qǐng)的任務(wù)處理方案支持集群并發(fā)處理模式,能夠動(dòng)態(tài)擴(kuò)展系統(tǒng)到1000+以上的服務(wù);平臺(tái)無(wú)I/O需求,僅依賴(lài)CPU、MEM、NETWORK,數(shù)據(jù)吞吐量?jī)H局限于節(jié)點(diǎn)的數(shù)量和網(wǎng)絡(luò)I/O能力;基于開(kāi)源軟件gearmand改進(jìn)而來(lái),解決了原版本的一些BUG和性能瓶頸;處理模塊支持“熱插拔模式”,支持不同業(yè)務(wù)流程快速搭建需求。本申請(qǐng)的技術(shù)方案解決了海量實(shí)時(shí)數(shù)據(jù)處理的問(wèn)題,解決了樣本數(shù)據(jù)上傳后,需要快速經(jīng)過(guò)存儲(chǔ)、鑒定、分揀、計(jì)算RANK等環(huán)節(jié)處理的問(wèn)題。能夠支持每日2 4T bytes/ day的樣本數(shù)據(jù),達(dá)到平均延遲不大于30s的處理能力??蓮V泛地應(yīng)用在360的云計(jì)算平臺(tái)上,為木馬云查殺引擎、主動(dòng)防御系統(tǒng)、網(wǎng)盾安全系統(tǒng)、用戶(hù)推薦系統(tǒng)等產(chǎn)品,提供了高效、可靠的數(shù)據(jù)分析服務(wù)。本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可。對(duì)于裝置實(shí)施例而言,由于其與方法實(shí)施例基本相似,所以描述的比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上對(duì)本申請(qǐng)所提供的一種任務(wù)處理方法和裝置進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在具體實(shí)施方式
及應(yīng)用范圍上均會(huì)有改變之處,綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
權(quán)利要求
1.一種任務(wù)處理方法,其特征在于,包括多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息,其中,所述多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,所述連接池用于存儲(chǔ)所述分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息;根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接;使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,進(jìn)行所述任務(wù)消息所請(qǐng)求的任務(wù)處理。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述分布式消息隊(duì)列的每個(gè)組件中均設(shè)置有連接池,每個(gè)所述組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息;所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟包括根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。
3.根據(jù)權(quán)利要求1或2所述的方法,其特征在于,還包括若使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息失敗,則重新選擇一個(gè)有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,并中斷失敗的網(wǎng)絡(luò)連接并釋放其資源,將該網(wǎng)絡(luò)連接設(shè)置為失效的網(wǎng)絡(luò)連接;記錄該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,還包括當(dāng)經(jīng)過(guò)所述設(shè)定的時(shí)間間隔后,接收到新的任務(wù)消息,則嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接。
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,還包括若嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接失敗,則重新設(shè)置該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在所述設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息;若嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接成功,則將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接。
6.根據(jù)權(quán)利要求1所述的方法,其特征在于,在所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟之前,還包括根據(jù)所述網(wǎng)絡(luò)連接的信息,判斷所述連接池中是否存在有效的網(wǎng)絡(luò)連接;若存在,則執(zhí)行所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟;若不存在,將所述連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),并嘗試恢復(fù)所述連接池中所有的網(wǎng)絡(luò)連接。
7.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括當(dāng)使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回給所述連接池,并判斷該網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),根據(jù)判斷結(jié)果,將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接或者無(wú)效的網(wǎng)絡(luò)連接。
8.根據(jù)權(quán)利要求2所述的方法,其特征在于,在所述多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息的步驟之前,還包括在所述分布式消息隊(duì)列的各個(gè)組件中設(shè)置負(fù)載均衡算法。
9.根據(jù)權(quán)利要求8所述的方法,其特征在于,所述根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟包括根據(jù)所述網(wǎng)絡(luò)連接的信息,按照所述負(fù)載均衡算法從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。
10.根據(jù)權(quán)利要求9所述的方法,其特征在于,所述分布式消息隊(duì)列包括消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件;在所述多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息的步驟之前,還包括將所述分布式消息隊(duì)列的各個(gè)組件中的連接池分別封裝為網(wǎng)絡(luò)連接循環(huán)隊(duì)列,并且在所述消息中轉(zhuǎn)組件中設(shè)置消息優(yōu)先級(jí)隊(duì)列。
11.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述根據(jù)所述負(fù)載均衡算法和所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接的步驟包括根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部開(kāi)始,選擇一個(gè)有效的網(wǎng)絡(luò)連接;所述方法還包括當(dāng)使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后, 將該網(wǎng)絡(luò)連接返回所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。
12.根據(jù)權(quán)利要求10所述的方法,其特征在于,所述消息中轉(zhuǎn)組件中的所述消息優(yōu)先級(jí)隊(duì)列為先進(jìn)先出方式的消息優(yōu)先級(jí)隊(duì)列;所述多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息的步驟包括所述消息中轉(zhuǎn)組件從所述消息優(yōu)先級(jí)隊(duì)列的頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息作為當(dāng)前待處理的任務(wù)消息。
13.一種任務(wù)處理裝置,其特征在于,包括接收模塊,用于在多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件中接收任務(wù)消息,其中,所述多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,所述連接池用于存儲(chǔ)所述分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息;選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接;連接模塊,用于使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,進(jìn)行所述任務(wù)消息所請(qǐng)求的任務(wù)處理。
14.根據(jù)權(quán)利要求13所述的裝置,其特征在于,所述分布式消息隊(duì)列的每個(gè)組件中均設(shè)置有連接池,每個(gè)所述組件的連接池用于存儲(chǔ)本組件與其它組件之間的網(wǎng)絡(luò)連接的信息;所述選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。
15.根據(jù)權(quán)利要求13或14所述的裝置,其特征在于,還包括失敗模塊,用于若所述連接模塊使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息失敗,則重新選擇一個(gè)有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,并中斷失敗的網(wǎng)絡(luò)連接并釋放其資源,將該網(wǎng)絡(luò)連接設(shè)置為失效的網(wǎng)絡(luò)連接;記錄該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息。
16.根據(jù)權(quán)利要求15所述的裝置,其特征在于,還包括重連模塊,用于當(dāng)經(jīng)過(guò)所述設(shè)定的時(shí)間間隔后,所述接收模塊接收到新的任務(wù)消息,嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接。
17.根據(jù)權(quán)利要求16所述的裝置,其特征在于,還包括重連設(shè)置模塊,用于若所述重連模塊嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接失敗,則重新設(shè)置該網(wǎng)絡(luò)連接中斷的時(shí)間點(diǎn),在所述設(shè)定的時(shí)間間隔內(nèi),不再使用該網(wǎng)絡(luò)連接發(fā)送任何任務(wù)消息;若嘗試恢復(fù)所述中斷的網(wǎng)絡(luò)連接成功,則將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接。
18.根據(jù)權(quán)利要求13所述的裝置,其特征在于,還包括判斷模塊,用于在所述選擇模塊根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接之前,根據(jù)所述網(wǎng)絡(luò)連接的信息,判斷所述連接池中是否存在有效的網(wǎng)絡(luò)連接;若存在,則執(zhí)行所述選擇模塊;若不存在,將所述連接池中所有的網(wǎng)絡(luò)連接的中斷時(shí)間點(diǎn)設(shè)置為當(dāng)前時(shí)間點(diǎn),并嘗試恢復(fù)所述連接池中所有的網(wǎng)絡(luò)連接。
19.根據(jù)權(quán)利要求13所述的裝置,其特征在于,還包括成功模塊,用于當(dāng)所述連接模塊使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回給所述連接池,并判斷該網(wǎng)絡(luò)連接的當(dāng)前連接狀態(tài),根據(jù)判斷結(jié)果,將該網(wǎng)絡(luò)連接設(shè)置為有效的網(wǎng)絡(luò)連接或者無(wú)效的網(wǎng)絡(luò)連接。
20.根據(jù)權(quán)利要求14所述的裝置,其特征在于,還包括第一設(shè)置模塊,用于在所述接收模塊接收任務(wù)消息之前,在所述分布式消息隊(duì)列的各個(gè)組件中設(shè)置負(fù)載均衡算法。
21.根據(jù)權(quán)利要求20所述的裝置,其特征在于,所述選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,按照所述負(fù)載均衡算法從接收到所述任務(wù)消息的組件的所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接。
22.根據(jù)權(quán)利要求21所述的裝置,其特征在于,所述分布式消息隊(duì)列包括消息發(fā)布組件、消息中轉(zhuǎn)組件和消息處理組件;所述裝置還包括第二設(shè)置模塊,用于在所述接收模塊接收任務(wù)消息之前,將所述分布式消息隊(duì)列的各個(gè)組件中的連接池分別封裝為網(wǎng)絡(luò)連接循環(huán)隊(duì)列,并且在所述消息中轉(zhuǎn)組件中設(shè)置消息優(yōu)先級(jí)隊(duì)列。
23.根據(jù)權(quán)利要求22所述的裝置,其特征在于,所述選擇模塊,用于根據(jù)所述網(wǎng)絡(luò)連接的信息,從接收到所述任務(wù)消息的組件的所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的頭部開(kāi)始,選擇一個(gè)有效的網(wǎng)絡(luò)連接;所述裝置還包括回歸模塊,用于當(dāng)所述連接模塊使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息成功完成后,將該網(wǎng)絡(luò)連接返回所述網(wǎng)絡(luò)連接循環(huán)隊(duì)列的尾部。
24.根據(jù)權(quán)利要求22所述的裝置,其特征在于,所述消息中轉(zhuǎn)組件中的所述消息優(yōu)先級(jí)隊(duì)列為先進(jìn)先出方式的消息優(yōu)先級(jí)隊(duì)列;所述接收模塊,用于所述消息中轉(zhuǎn)組件從所述消息優(yōu)先級(jí)隊(duì)列的頭部開(kāi)始,向后查找第一個(gè)可見(jiàn)狀態(tài)的任務(wù)消息作為當(dāng)前待處理的任務(wù)消息。
全文摘要
本申請(qǐng)?zhí)峁┝艘环N任務(wù)處理方法及裝置,其中,任務(wù)處理方法包括多道流水線(xiàn)處理系統(tǒng)的分布式消息隊(duì)列中的至少一個(gè)組件接收到任務(wù)消息,其中,所述多道流水線(xiàn)處理系統(tǒng)中設(shè)置有連接池,所述連接池用于存儲(chǔ)所述分布式消息隊(duì)列中各個(gè)組件之間的網(wǎng)絡(luò)連接的信息;根據(jù)所述網(wǎng)絡(luò)連接的信息,從所述連接池中選擇一個(gè)有效的網(wǎng)絡(luò)連接;使用選擇的所述有效的網(wǎng)絡(luò)連接發(fā)送所述任務(wù)消息,進(jìn)行所述任務(wù)消息所請(qǐng)求的任務(wù)處理。通過(guò)本申請(qǐng),避免了目前的分布式消息隊(duì)列系統(tǒng)中,因節(jié)點(diǎn)失效造成集群處理能力下降的問(wèn)題,有效保證了多道流水線(xiàn)處理系統(tǒng)的集群處理能力。
文檔編號(hào)H04L12/56GK102571568SQ20111044484
公開(kāi)日2012年7月11日 申請(qǐng)日期2011年12月27日 優(yōu)先權(quán)日2011年12月27日
發(fā)明者楊康, 袁瑞峰 申請(qǐng)人:北京奇虎科技有限公司