本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法和裝置。
背景技術(shù):
數(shù)據(jù)處理架構(gòu)(TPL Dataflow)是微軟提供的進(jìn)行流式處理的框架,適合需要高并發(fā)、高性能的應(yīng)用程序。TPL Dataflow中最基礎(chǔ)的組件是處理塊(Block),其中,每個(gè)處理塊(Block)又可以成為節(jié)點(diǎn),Block相當(dāng)于一個(gè)處理單元,每個(gè)Block定義了如何進(jìn)行數(shù)據(jù)處理的邏輯。將多個(gè)Block鏈接起來(lái),就組成了系統(tǒng)處理管道,只需要在管道開(kāi)始處輸入數(shù)據(jù),接下來(lái)整個(gè)管道自動(dòng)開(kāi)始運(yùn)行,從一個(gè)Block開(kāi)始執(zhí)行自己的處理邏輯,處理完成后將得到的數(shù)據(jù)投遞到下一個(gè)或多個(gè)Block,最終完成整個(gè)管道的處理。
參見(jiàn)圖1,分詞程序的處理管道的輸入可以是多個(gè)文件,首先通過(guò)文件讀取Block讀取文件,并將文件傳遞至下一層Block(即,圖1中分行Block);分行Block再將文件傳遞至下一層Block(即,分詞Block);分詞Block再將文件傳遞至單詞計(jì)數(shù)Block。其中,文件讀取Block,分行Block,分詞Block和單詞計(jì)數(shù)Block構(gòu)成一個(gè)完整的數(shù)據(jù)處理管道。
通過(guò)處理塊構(gòu)建的數(shù)據(jù)處理架構(gòu)可以為環(huán)狀,如圖2所示,請(qǐng)求標(biāo)記Block和鏈接分析Block構(gòu)成一個(gè)環(huán)狀的數(shù)據(jù)處理架構(gòu)。在該環(huán)狀數(shù)據(jù)處理架構(gòu)中,請(qǐng)求標(biāo)記Block對(duì)鏈接分析Block發(fā)起請(qǐng)求,將請(qǐng)求內(nèi)容投遞給鏈接分析Block。鏈接分析Block分析請(qǐng)求內(nèi)容中存在的鏈接,將鏈接投遞給請(qǐng)求標(biāo)記Block,其中,當(dāng)請(qǐng)求標(biāo)記Block和鏈接分析Block之間沒(méi)有任何待傳遞消息時(shí),由于兩個(gè)Block都在等待對(duì)方完成對(duì)消息的處理,因此,整個(gè)環(huán)狀數(shù)據(jù)處理架構(gòu)陷入死鎖狀態(tài)。
針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供了一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法和裝置,以至少解決現(xiàn)有 技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)容易陷入死鎖狀態(tài)的技術(shù)問(wèn)題。
根據(jù)本申請(qǐng)實(shí)施例的一個(gè)方面,提供了一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法,該方法包括:檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài),其中,所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)為構(gòu)成環(huán)狀數(shù)據(jù)處理架構(gòu)的節(jié)點(diǎn);在檢測(cè)到所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,控制心跳節(jié)點(diǎn)停止計(jì)數(shù),其中,所述心跳節(jié)點(diǎn)為所述環(huán)狀數(shù)據(jù)處理架構(gòu)中用于記錄所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)的節(jié)點(diǎn);在停止計(jì)數(shù)時(shí)控制所述心跳節(jié)點(diǎn)關(guān)閉,并通過(guò)所述心跳節(jié)點(diǎn)依次控制所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
進(jìn)一步地,檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài)包括:記錄所述心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù);經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄所述心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)在所述第二時(shí)刻的緩存消息的數(shù)量;判斷所述第二時(shí)刻的心跳數(shù)是否等于所述第一時(shí)刻的心跳數(shù),并判斷所述第二時(shí)刻的數(shù)量是否為零;在判斷出所述第二時(shí)刻的心跳數(shù)等于所述第一時(shí)刻的心跳數(shù)且所述第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)所述節(jié)點(diǎn)均處于空閑狀態(tài)。
進(jìn)一步地,所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中包括批數(shù)據(jù)處理節(jié)點(diǎn),在檢測(cè)到所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,并且在控制心跳節(jié)點(diǎn)停止計(jì)數(shù)之前,所述方法還包括:?jiǎn)?dòng)所述批數(shù)據(jù)處理節(jié)點(diǎn);經(jīng)過(guò)預(yù)設(shè)時(shí)間檢測(cè)所述批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài),其中,在檢測(cè)到所述批數(shù)據(jù)處理節(jié)點(diǎn)處于所述空閑狀態(tài)的情況下,則執(zhí)行所述控制心跳節(jié)點(diǎn)停止計(jì)數(shù)的步驟。
進(jìn)一步地,檢測(cè)所述批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)包括:記錄所述心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù);經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄所述心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和所述批數(shù)據(jù)處理節(jié)點(diǎn)在所述第二時(shí)刻的緩存消息的數(shù)量;判斷所述第二時(shí)刻的心跳數(shù)是否等于所述第一時(shí)刻的心跳數(shù),并判斷所述第二時(shí)刻的數(shù)量是否為零;在判斷出所述第二時(shí)刻的心跳數(shù)等于所述第一時(shí)刻的心跳數(shù)且判斷出所述第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)所述批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)。
進(jìn)一步地,在檢測(cè)所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)是否均處于空閑狀態(tài)之前,所述方法還包括:接收檢測(cè)指令,并根據(jù)所述檢測(cè)指令檢測(cè)所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)。
根據(jù)本申請(qǐng)實(shí)施例的另一方面,還提供了一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)裝置,該裝置包括:第一檢測(cè)單元,用于檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài),其中,所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)為構(gòu)成環(huán)狀數(shù)據(jù)處理架構(gòu)的節(jié)點(diǎn);第一控制單元,用于在檢測(cè)到所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,控制心跳節(jié)點(diǎn)停止計(jì)數(shù),其中, 所述心跳節(jié)點(diǎn)為所述環(huán)狀數(shù)據(jù)處理架構(gòu)中用于記錄所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)的節(jié)點(diǎn);第二控制單元,用于在停止計(jì)數(shù)時(shí)控制所述心跳節(jié)點(diǎn)關(guān)閉,并通過(guò)所述心跳節(jié)點(diǎn)依次控制所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
進(jìn)一步地,所述第一檢測(cè)單元包括:第一記錄模塊,用于記錄所述心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù);第二記錄模塊,用于經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄所述心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)在所述第二時(shí)刻的緩存消息的數(shù)量;第一判斷模塊,用于判斷所述第二時(shí)刻的心跳數(shù)是否等于所述第一時(shí)刻的心跳數(shù),并判斷所述第二時(shí)刻的數(shù)量是否為零;第一確定模塊,用于在判斷出所述第二時(shí)刻的心跳數(shù)等于所述第一時(shí)刻的心跳數(shù)且所述第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)所述節(jié)點(diǎn)均處于空閑狀態(tài)。
進(jìn)一步地,所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中包括批數(shù)據(jù)處理節(jié)點(diǎn),所述裝置還包括:?jiǎn)?dòng)單元,用于在所述第一檢測(cè)單元檢測(cè)到所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,并且在所述第一控制單元控制心跳節(jié)點(diǎn)停止計(jì)數(shù)之前,啟動(dòng)所述批數(shù)據(jù)處理節(jié)點(diǎn);第二檢測(cè)單元,用于經(jīng)過(guò)預(yù)設(shè)時(shí)間檢測(cè)所述批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài),其中,在檢測(cè)到所述批數(shù)據(jù)處理節(jié)點(diǎn)處于所述空閑狀態(tài)的情況下,調(diào)用所述第二控制單元控制心跳節(jié)點(diǎn)停止計(jì)數(shù)。
進(jìn)一步地,所述第二檢測(cè)單元包括:第三記錄模塊,用于記錄所述心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù);第四記錄模塊,用于經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄所述心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和所述批數(shù)據(jù)處理節(jié)點(diǎn)在所述第二時(shí)刻的緩存消息的數(shù)量;第二判斷模塊,用于判斷所述第二時(shí)刻的心跳數(shù)是否等于所述第一時(shí)刻的心跳數(shù),并判斷所述第二時(shí)刻的數(shù)量是否為零;第二確定模塊,用于在判斷出所述第二時(shí)刻的心跳數(shù)等于所述第一時(shí)刻的心跳數(shù)且判斷出所述第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)所述批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)。
進(jìn)一步地,所述裝置還包括:接收單元,用于在所述第一檢測(cè)單元檢測(cè)所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)是否均處于空閑狀態(tài)之前,接收檢測(cè)指令,并根據(jù)所述檢測(cè)指令檢測(cè)所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)。
在本申請(qǐng)實(shí)施例中,采用檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài),其中,所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)為構(gòu)成所述環(huán)狀數(shù)據(jù)處理架構(gòu)的節(jié)點(diǎn);在檢測(cè)到所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,控制心跳節(jié)點(diǎn)停止計(jì)數(shù),其中,所述心跳節(jié)點(diǎn)為所述環(huán)狀數(shù)據(jù)處理架構(gòu)中用于記錄所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)的節(jié)點(diǎn);在停止計(jì)數(shù)時(shí)所述心跳節(jié)點(diǎn)關(guān)閉,并通過(guò)所述心跳節(jié)點(diǎn)依次控制所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉的方式。通過(guò)在檢測(cè)到環(huán)狀數(shù)據(jù)處理架構(gòu)中的多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的 情況下,心跳節(jié)點(diǎn)停止計(jì)數(shù),即心跳階段關(guān)閉,當(dāng)心跳節(jié)點(diǎn)關(guān)閉時(shí),控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)依次關(guān)閉,相對(duì)于現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)中的多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)之間在沒(méi)有消息傳遞時(shí),會(huì)進(jìn)入死鎖狀態(tài),本申請(qǐng)通過(guò)在環(huán)狀數(shù)據(jù)處理架構(gòu)中添加心跳節(jié)點(diǎn),并根據(jù)該心跳節(jié)點(diǎn)依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉,達(dá)到了避免環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài)的目的,進(jìn)而解決了現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)容易陷入死鎖狀態(tài)的技術(shù)問(wèn)題,從而實(shí)現(xiàn)了當(dāng)環(huán)狀數(shù)據(jù)處理架構(gòu)處于空閑狀態(tài)下,不會(huì)進(jìn)入死鎖狀態(tài)的技術(shù)效果。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1是根據(jù)現(xiàn)有技術(shù)的一種數(shù)據(jù)處理架構(gòu)的示意圖;
圖2是根據(jù)現(xiàn)有技術(shù)的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的示意圖;
圖3是根據(jù)本申請(qǐng)實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法的流程圖;
圖4是根據(jù)本申請(qǐng)可選實(shí)施例的一種多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的檢測(cè)方法的流程圖;
圖5是根據(jù)本申請(qǐng)可選實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法的流程圖;
圖6是根據(jù)本申請(qǐng)可選實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的示意圖;以及
圖7是根據(jù)本申請(qǐng)實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)裝置的示意圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分的實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
需要說(shuō)明的是,本申請(qǐng)的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例能夠以除了在這里 圖示或描述的那些以外的順序?qū)嵤?。此外,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
根據(jù)本申請(qǐng)實(shí)施例,提供了一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法的方法實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖3是根據(jù)本申請(qǐng)實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法的流程圖,如圖3所示,該方法包括如下步驟S102至步驟S106:
步驟S102,檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài),其中,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)為構(gòu)成環(huán)狀數(shù)據(jù)處理架構(gòu)的節(jié)點(diǎn)。
在本申請(qǐng)實(shí)施例中,數(shù)據(jù)處理節(jié)點(diǎn)可以為處理塊Block,用于對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理,并且,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中的每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)可以為具有宿主的子節(jié)點(diǎn),也即,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)之間具有層級(jí)關(guān)系。其中,當(dāng)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)時(shí),表示該環(huán)狀數(shù)據(jù)處理架構(gòu)處于空閑狀態(tài)。
步驟S104,在檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,控制心跳節(jié)點(diǎn)停止計(jì)數(shù),其中,心跳節(jié)點(diǎn)為環(huán)狀數(shù)據(jù)處理架構(gòu)中用于記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)的節(jié)點(diǎn)。
具體地,該心跳節(jié)用于記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù),例如,當(dāng)任意數(shù)據(jù)處理節(jié)點(diǎn)中處理完一條數(shù)據(jù)時(shí),該心跳節(jié)點(diǎn)可以做“+1”處理,直至多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中所有的數(shù)據(jù)全部處理完(即,空閑狀態(tài)),該心跳節(jié)點(diǎn)停止計(jì)數(shù)。
步驟S106,在停止計(jì)數(shù)時(shí)控制心跳節(jié)點(diǎn)關(guān)閉,并通過(guò)心跳節(jié)點(diǎn)依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
具體地,心跳節(jié)點(diǎn)可以設(shè)置為該環(huán)狀數(shù)據(jù)處理架構(gòu)的第一個(gè)節(jié)點(diǎn),當(dāng)心跳節(jié)點(diǎn)停止計(jì)數(shù)時(shí),可以表示為該環(huán)狀數(shù)據(jù)處理架構(gòu)中的每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài),此時(shí),心跳節(jié)點(diǎn)可以向下一級(jí)節(jié)點(diǎn)發(fā)送一個(gè)指令或消息,以通知下一級(jí)節(jié)點(diǎn)可以關(guān)閉,下一級(jí)節(jié)點(diǎn)在接收到該指令或消息后關(guān)閉,并依此通知環(huán)狀數(shù)據(jù)處理架構(gòu)中的節(jié)點(diǎn)關(guān)閉,進(jìn)而避免了該環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài)。
在本申請(qǐng)實(shí)施例中,通過(guò)在檢測(cè)到環(huán)狀數(shù)據(jù)處理架構(gòu)中的多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處 于空閑狀態(tài)的情況下,心跳節(jié)點(diǎn)停止計(jì)數(shù),即心跳階段關(guān)閉,當(dāng)心跳節(jié)點(diǎn)關(guān)閉時(shí),控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)依次關(guān)閉,相對(duì)于現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)中的多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)之間在沒(méi)有消息傳遞時(shí),會(huì)進(jìn)入死鎖狀態(tài),本申請(qǐng)通過(guò)在環(huán)狀數(shù)據(jù)處理架構(gòu)中添加心跳節(jié)點(diǎn),并根據(jù)該心跳節(jié)點(diǎn)依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉,達(dá)到了避免環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài)的目的,進(jìn)而解決了現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)容易陷入死鎖狀態(tài)的技術(shù)問(wèn)題,從而實(shí)現(xiàn)了當(dāng)環(huán)狀數(shù)據(jù)處理架構(gòu)處于空閑狀態(tài)下,不會(huì)進(jìn)入死鎖狀態(tài)的技術(shù)效果。
可選地,檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài)包括如下步驟S1021至步驟S1027:
步驟S1021,記錄心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù)。
步驟S1023,經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)在第二時(shí)刻的緩存消息的數(shù)量。
步驟S1025,判斷第二時(shí)刻的心跳數(shù)是否等于第一時(shí)刻的心跳數(shù),并判斷第二時(shí)刻的數(shù)量是否為零。
步驟S1027,在判斷出第二時(shí)刻的心跳數(shù)等于第一時(shí)刻的心跳數(shù)且第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)節(jié)點(diǎn)均處于空閑狀態(tài)。
在本申請(qǐng)實(shí)施例中,第一時(shí)刻t1的心跳數(shù)記為h1,第二時(shí)刻t2的心跳數(shù)記為h2,第二時(shí)刻t2緩存消息的數(shù)量記為bufferCount2。
心跳數(shù)h1即為心跳節(jié)點(diǎn)在t1時(shí)刻的計(jì)數(shù)值,可以理解為環(huán)狀數(shù)據(jù)處理架構(gòu)在數(shù)據(jù)處理開(kāi)始的時(shí)刻直至t1時(shí)刻,所有數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù);心跳數(shù)h2即為心跳節(jié)點(diǎn)在t2時(shí)刻的計(jì)數(shù)值,可以理解為環(huán)狀數(shù)據(jù)處理架構(gòu)在數(shù)據(jù)處理開(kāi)始的時(shí)刻直至t2時(shí)刻,所有數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)。
在上述實(shí)施例中,t1時(shí)刻可以為環(huán)狀數(shù)據(jù)處理架構(gòu)中每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均未對(duì)數(shù)據(jù)進(jìn)行處理的時(shí)刻,然后記錄該t1時(shí)刻的心跳數(shù)h1。經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,再次記錄t2時(shí)刻的心跳數(shù)h1和多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)在t2時(shí)刻的緩存消息的數(shù)量bufferCount2,并將h1與h2進(jìn)行比較,并判斷t2時(shí)刻記錄的bufferCount2是否為零。若判斷出h1=h2,且bufferCount2=0,則確定該環(huán)狀數(shù)據(jù)處理架構(gòu)中每一個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài),此時(shí),即可確定環(huán)狀數(shù)據(jù)處理架構(gòu)完成對(duì)所有數(shù)據(jù)的處理。
若判斷出h1≠h2,或者bufferCount2≠0的情況下,表明該環(huán)狀數(shù)據(jù)處理架構(gòu)未處于空閑狀態(tài),因此,經(jīng)過(guò)一段時(shí)間后,返回并繼續(xù)執(zhí)行步驟S1021至步驟S1027,直 至檢測(cè)出h1=h2且bufferCount2=0時(shí),返回true,并結(jié)束該檢測(cè)流程。
在本申請(qǐng)實(shí)施例中,經(jīng)過(guò)預(yù)設(shè)時(shí)間再次檢測(cè)心跳數(shù)h2,并檢測(cè)緩存消息的數(shù)量bufferCount2是為了避免在第一時(shí)刻之后,數(shù)據(jù)處理節(jié)點(diǎn)還會(huì)對(duì)數(shù)據(jù)進(jìn)行處理,進(jìn)而導(dǎo)致環(huán)狀數(shù)據(jù)處理架構(gòu)在未完成對(duì)數(shù)據(jù)處理的情況下,關(guān)閉該環(huán)狀數(shù)據(jù)處理架構(gòu)中的每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)。
可選地,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中包括批數(shù)據(jù)處理節(jié)點(diǎn),在檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,并且在控制心跳節(jié)點(diǎn)停止計(jì)數(shù)之前,環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法還包括如下步驟S1至步驟S3:
步驟S1,啟動(dòng)批數(shù)據(jù)處理節(jié)點(diǎn)。
步驟S3,經(jīng)過(guò)預(yù)設(shè)時(shí)間檢測(cè)批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài),其中,在檢測(cè)到批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的情況下,則執(zhí)行步驟S104的控制心跳節(jié)點(diǎn)停止計(jì)數(shù)。
在本申請(qǐng)實(shí)施例中,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中可以包括批數(shù)據(jù)處理節(jié)點(diǎn),其中,該批數(shù)據(jù)處理節(jié)點(diǎn)為批量對(duì)數(shù)據(jù)進(jìn)行處理的節(jié)點(diǎn)。例如,任意一個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)每一次處理的數(shù)據(jù)量為10條,若該節(jié)點(diǎn)接收到的數(shù)據(jù)量不滿10條,則該批數(shù)據(jù)處理節(jié)點(diǎn)不會(huì)對(duì)接收到的數(shù)據(jù)進(jìn)行處理。此時(shí),需啟動(dòng)所有批數(shù)據(jù)處理節(jié)點(diǎn),然后經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,檢測(cè)批處理節(jié)點(diǎn)是否處于空閑狀態(tài)。
其中,檢測(cè)批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)包括如下步驟S31至步驟S37:
步驟S31,記錄心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù)。
步驟S33,經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和批數(shù)據(jù)處理節(jié)點(diǎn)在第二時(shí)刻的緩存消息的數(shù)量。
步驟S35,判斷第二時(shí)刻的心跳數(shù)是否等于第一時(shí)刻的心跳數(shù),并判斷第二時(shí)刻的數(shù)量是否為零。
步驟S37,在判斷出第二時(shí)刻的心跳數(shù)等于第一時(shí)刻的心跳數(shù)且判斷出第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)。
在本申請(qǐng)實(shí)施例中,第一時(shí)刻t1'的心跳數(shù)記為h3,第二時(shí)刻的心跳數(shù)記為h4,第二時(shí)刻t2'緩存消息的數(shù)量記為bufferCount2'。
心跳數(shù)h3即為心跳節(jié)點(diǎn)在t1'時(shí)刻的計(jì)數(shù)值,可以理解為環(huán)狀數(shù)據(jù)處理架構(gòu)在數(shù)據(jù)處理開(kāi)始的時(shí)刻直至t1'時(shí)刻,所有數(shù)據(jù)處理節(jié)點(diǎn)(包括批數(shù)據(jù)處理節(jié)點(diǎn))處理數(shù)據(jù)的條數(shù);心跳數(shù)h2即為心跳節(jié)點(diǎn)在t2'時(shí)刻的計(jì)數(shù)值,可以理解為環(huán)狀數(shù)據(jù)處理架構(gòu) 在數(shù)據(jù)處理開(kāi)始的時(shí)刻直至t2'時(shí)刻,所有數(shù)據(jù)處理節(jié)點(diǎn)(包括批數(shù)據(jù)處理節(jié)點(diǎn))處理數(shù)據(jù)的條數(shù)。
需要說(shuō)明的是,上述實(shí)施例中的第一時(shí)刻t1'與步驟S1021中第一時(shí)刻t1為不相同的時(shí)刻,相應(yīng)地,上述實(shí)施例中的第二時(shí)刻t2'與步驟S1023中第二時(shí)刻t2也為不相同的時(shí)刻。
在上述實(shí)施例中,t1'時(shí)刻可以為環(huán)狀數(shù)據(jù)處理架構(gòu)中每個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)均未對(duì)數(shù)據(jù)進(jìn)行處理的時(shí)刻,然后記錄該t1'時(shí)刻的心跳數(shù)h3。經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,再次記錄t2'時(shí)刻的心跳數(shù)h3和多個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)在t2'時(shí)刻的緩存消息的數(shù)量bufferCount2',并將h3與h4進(jìn)行比較,并判斷t2'時(shí)刻記錄的bufferCount2'是否為零。若判斷出h3=h4,且bufferCount2'=0,則確定該環(huán)狀數(shù)據(jù)處理架構(gòu)中每一個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài),此時(shí),即可確定環(huán)狀數(shù)據(jù)處理架構(gòu)完成對(duì)所有數(shù)據(jù)的處理。
若判斷出h3≠h4,或者bufferCount2'≠0的情況下,表明該環(huán)狀數(shù)據(jù)處理架構(gòu)未處于空閑狀態(tài),因此,經(jīng)過(guò)一段時(shí)間后,返回并繼續(xù)執(zhí)行步驟S31至步驟S37,直至檢測(cè)出h3=h4且bufferCount2'=0時(shí),返回true,并結(jié)束該流程。
在本申請(qǐng)實(shí)施例中,經(jīng)過(guò)預(yù)設(shè)時(shí)間再次檢測(cè)心跳數(shù)h4,并檢測(cè)緩存消息的數(shù)量bufferCount是為了避免在t1'時(shí)刻之后,批數(shù)據(jù)處理節(jié)點(diǎn)還會(huì)對(duì)數(shù)據(jù)進(jìn)行處理,進(jìn)而導(dǎo)致環(huán)狀數(shù)據(jù)處理架構(gòu)在未完成對(duì)數(shù)據(jù)處理的情況下,關(guān)閉該環(huán)狀數(shù)據(jù)處理架構(gòu)中的每個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)。
可選地,在檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)是否均處于空閑狀態(tài)之前,環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法還包括步驟:接收檢測(cè)指令,并根據(jù)檢測(cè)指令檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)。具體地,在檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)之前,用戶可以進(jìn)行相關(guān)的前置任務(wù),例如,點(diǎn)擊打開(kāi)與該環(huán)狀數(shù)據(jù)處理架構(gòu)處理數(shù)據(jù)需要應(yīng)用到的數(shù)據(jù)庫(kù),還可以點(diǎn)擊打開(kāi)該環(huán)狀數(shù)據(jù)處理架構(gòu)待處理的文件等。當(dāng)完成全部前置任務(wù)時(shí),服務(wù)器即接收到檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)的指令,并開(kāi)始檢測(cè)。
圖4是根據(jù)本申請(qǐng)可選實(shí)施例的一種多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的檢測(cè)方法的流程圖,如圖4所示,該方法包括如下步驟S202至步驟S214:
步驟S202,判斷多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否正在處理數(shù)據(jù),其中,該數(shù)據(jù)處理節(jié)點(diǎn)還可以為批數(shù)據(jù)處理節(jié)點(diǎn)。若判斷出正在處理數(shù)據(jù),則執(zhí)行步驟S204;若判斷出未處理數(shù)據(jù),則執(zhí)行步驟S214,即返回false。
步驟S204,記錄心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù)h1。
步驟S206,經(jīng)過(guò)預(yù)設(shè)時(shí)間再次記錄心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)h2。
步驟S208,記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)在第二時(shí)刻的緩存消息的數(shù)量bufferCount2。
步驟S210,判斷h1=h2且bufferCount2=0是否成立。其中,若判斷出成立的情況下,執(zhí)行步驟S212;若判斷出不成立的情況下,返回執(zhí)行步驟S214,即返回false。
步驟S212,返回true,并確定多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)。
在本可選實(shí)施例中,在環(huán)狀數(shù)據(jù)處理架構(gòu)中定義一個(gè)心跳節(jié)點(diǎn),該心跳節(jié)點(diǎn)不對(duì)數(shù)據(jù)進(jìn)行任何處理,僅記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理的數(shù)據(jù)條數(shù)。當(dāng)服務(wù)器檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均未進(jìn)行數(shù)據(jù)處理的情況下,開(kāi)始記錄該時(shí)刻(即,第一時(shí)刻)的心跳數(shù)h1。經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,再次記錄第二時(shí)刻的心跳數(shù)h2,并記錄第二時(shí)刻緩存消息的數(shù)量bufferCount2。然后判斷h1=h2且bufferCount2=0是否成立,若判斷出成立,則表明環(huán)狀數(shù)據(jù)處理架構(gòu)中每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均為空閑狀態(tài)。此時(shí),表明該環(huán)狀數(shù)據(jù)處理架構(gòu)完成對(duì)所有數(shù)據(jù)的處理,控制心跳節(jié)點(diǎn)將停止計(jì)數(shù),并發(fā)送相應(yīng)的消息至心跳節(jié)點(diǎn)的下一層節(jié)點(diǎn)Block1,以通知Block1可以關(guān)閉,Block1還可以發(fā)送相應(yīng)的消息至Block1的下一層節(jié)點(diǎn)Block2,以通知Block2可以關(guān)閉,同樣地,通過(guò)該方法依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
通過(guò)上述方法檢測(cè)環(huán)狀數(shù)據(jù)處理架構(gòu)處于空閑狀態(tài)的時(shí)機(jī),避免了環(huán)狀數(shù)據(jù)處理架構(gòu)由于環(huán)中消息為空的情況下,環(huán)中每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)因?yàn)橄嗷ヒ玫淖饔茫恢睙o(wú)法完成,最終進(jìn)入死鎖的狀態(tài)。
圖5是根據(jù)本申請(qǐng)可選實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法的流程圖,如圖5所示,該方法包括如下步驟S302至步驟S312:
步驟S302,接收檢測(cè)指令。在檢測(cè)環(huán)狀數(shù)據(jù)處理架構(gòu)是否處于空閑狀態(tài)之前,需要傳遞檢測(cè)指令,即前置任務(wù)完成的指令,其中,前置任務(wù)可以為點(diǎn)擊打開(kāi)與該環(huán)狀數(shù)據(jù)處理架構(gòu)處理數(shù)據(jù)需要應(yīng)用到的數(shù)據(jù)庫(kù),還可以點(diǎn)擊打開(kāi)該環(huán)狀數(shù)據(jù)處理架構(gòu)待處理的文件等。
步驟S304,判斷多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài),具體地,調(diào)用檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的方法。其中,若檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均完成數(shù)據(jù)處理時(shí),即處于空閑狀態(tài),執(zhí)行步驟S306;若檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)未完成數(shù)據(jù)處理,即未處于空閑狀態(tài),繼續(xù)執(zhí)行步驟S304調(diào)用檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的方法。
循環(huán)調(diào)用檢測(cè)環(huán)狀數(shù)據(jù)處理架構(gòu)空閑方法,即上述步驟S202至步驟S214所描述 的方法,來(lái)檢測(cè)環(huán)狀數(shù)據(jù)處理架構(gòu)是否處于空閑狀態(tài),直到返回true,即環(huán)狀數(shù)據(jù)處理架構(gòu)中沒(méi)有處理的消息。其中,每次循環(huán)前等待一段時(shí)間,防止太多無(wú)用的循環(huán)以及節(jié)省處理消耗。
步驟S306,啟動(dòng)批數(shù)據(jù)處理節(jié)點(diǎn)。檢查到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中包括批數(shù)據(jù)處理節(jié)點(diǎn)的情況下,即使批數(shù)據(jù)處理節(jié)點(diǎn)中的數(shù)據(jù)條數(shù)沒(méi)有達(dá)到該批數(shù)據(jù)處理節(jié)點(diǎn)的數(shù)據(jù)量(BatchSize),也同樣啟動(dòng)所有批數(shù)據(jù)處理節(jié)點(diǎn),進(jìn)行數(shù)據(jù)的處理。
步驟S308,判斷批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài),具體地,調(diào)用檢測(cè)批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的方法。其中,若檢測(cè)到批數(shù)據(jù)處理節(jié)點(diǎn)均完成數(shù)據(jù)處理時(shí),即處于空閑狀態(tài),執(zhí)行步驟S310;若檢測(cè)到批數(shù)據(jù)處理節(jié)點(diǎn)未完成數(shù)據(jù)處理時(shí),即未處于空閑狀態(tài),繼續(xù)執(zhí)行步驟S308調(diào)用檢測(cè)批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的方法。
循環(huán)調(diào)用檢測(cè)環(huán)狀數(shù)據(jù)處理架構(gòu)空閑方法,通過(guò)上述步驟S202至步驟S214檢測(cè)批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)。當(dāng)檢測(cè)多批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)時(shí),表明環(huán)狀數(shù)據(jù)處理架構(gòu)都空閑,沒(méi)有需要處理的消息,可以關(guān)閉。
步驟S310,心跳節(jié)點(diǎn)關(guān)閉。
步驟S312,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)依次關(guān)閉。當(dāng)心跳節(jié)點(diǎn)關(guān)閉時(shí),多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)依次關(guān)閉,避免了環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài)。
本申請(qǐng)實(shí)施例還提供了一種環(huán)狀數(shù)據(jù)處理架構(gòu)的裝置,該檢測(cè)裝置主要用于執(zhí)行本申請(qǐng)實(shí)施例上述內(nèi)容所提供的環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)方法,以下對(duì)本申請(qǐng)實(shí)施例所提供的環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)裝置做具體介紹。
圖6是根據(jù)本申請(qǐng)可選實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的示意圖,如圖6所示,在該環(huán)狀數(shù)據(jù)處理架構(gòu)中包括請(qǐng)求標(biāo)記節(jié)點(diǎn)和鏈接分析節(jié)點(diǎn)(即,數(shù)據(jù)處理節(jié)點(diǎn))和心跳節(jié)點(diǎn)。其中,心跳節(jié)點(diǎn)設(shè)置在該環(huán)狀數(shù)據(jù)處理架構(gòu)的第一個(gè)節(jié)點(diǎn)的位置。
如圖6所示,請(qǐng)求標(biāo)記節(jié)點(diǎn)提交數(shù)據(jù)至鏈接分析節(jié)點(diǎn)。當(dāng)數(shù)據(jù)提交完成后,開(kāi)始使用上述本申請(qǐng)實(shí)施例提供的環(huán)狀數(shù)據(jù)處理架構(gòu)提供的檢測(cè)方法檢測(cè)環(huán)狀數(shù)據(jù)處理架構(gòu)處理數(shù)據(jù)完成的時(shí)機(jī)。在環(huán)狀數(shù)據(jù)處理架構(gòu)中所有數(shù)據(jù)處理節(jié)點(diǎn)都處理完成后,即每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)沒(méi)有緩存的消息后,且心跳節(jié)點(diǎn)心跳不再增加之后,此時(shí)環(huán)狀數(shù)據(jù)處理架構(gòu)可以完成了。此時(shí),心跳節(jié)點(diǎn)停止計(jì)數(shù),即心跳節(jié)點(diǎn)完成,并依次控制請(qǐng)求標(biāo)記節(jié)點(diǎn)關(guān)閉,最后鏈接分析節(jié)點(diǎn)完成和鏈接分析節(jié)點(diǎn)關(guān)閉。最終整個(gè)環(huán)狀數(shù)據(jù)處理架構(gòu)處理完成。由于沒(méi)有批數(shù)據(jù)處理節(jié)點(diǎn),因此,無(wú)需啟動(dòng)批數(shù)據(jù)處理節(jié)點(diǎn)。
圖7是根據(jù)本申請(qǐng)實(shí)施例的一種環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)裝置的示意圖,如圖7 所示,該IP范圍的比較裝置主要包括第一檢測(cè)單元10、第一控制單元20和第二控制單元30,其中:
第一檢測(cè)單元10,用于檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài),其中,前置任務(wù)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)為構(gòu)成前置任務(wù)環(huán)狀數(shù)據(jù)處理架構(gòu)的節(jié)點(diǎn)。
在本申請(qǐng)實(shí)施例中,數(shù)據(jù)處理節(jié)點(diǎn)可以為處理塊Block,用于對(duì)數(shù)據(jù)進(jìn)行相應(yīng)的處理,并且,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中的每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)可以為具有宿主的子節(jié)點(diǎn),也即,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)之間具有層級(jí)關(guān)系。其中,當(dāng)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)時(shí),表示該環(huán)狀數(shù)據(jù)處理架構(gòu)處于空閑狀態(tài)。
第一控制單元20,用于在檢測(cè)到前置任務(wù)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,控制心跳節(jié)點(diǎn)停止計(jì)數(shù),其中,前置任務(wù)心跳節(jié)點(diǎn)為前置任務(wù)環(huán)狀數(shù)據(jù)處理架構(gòu)中用于記錄前置任務(wù)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)的節(jié)點(diǎn)。
具體地,該心跳節(jié)用于記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù),例如,當(dāng)任意數(shù)據(jù)處理節(jié)點(diǎn)中處理完一條數(shù)據(jù)時(shí),該心跳節(jié)點(diǎn)可以做“+1”處理,直至多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中所有的數(shù)據(jù)全部處理完(即,空閑狀態(tài)),該心跳節(jié)點(diǎn)停止計(jì)數(shù)。
第二控制單元30,用于在停止計(jì)數(shù)時(shí)控制前置任務(wù)心跳節(jié)點(diǎn)關(guān)閉,并通過(guò)前置任務(wù)心跳節(jié)點(diǎn)依次控制前置任務(wù)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
具體地,心跳節(jié)點(diǎn)可以設(shè)置為該環(huán)狀數(shù)據(jù)處理架構(gòu)的第一個(gè)節(jié)點(diǎn)。當(dāng)心跳節(jié)點(diǎn)停止計(jì)數(shù)時(shí),可以表示為該環(huán)狀數(shù)據(jù)處理架構(gòu)中的每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài),此時(shí),心跳節(jié)點(diǎn)可以向下一級(jí)節(jié)點(diǎn)發(fā)送一個(gè)指令或消息,以通知下一級(jí)節(jié)點(diǎn)可以關(guān)閉,下一級(jí)節(jié)點(diǎn)在接收到該指令或消息后關(guān)閉,并依此通知環(huán)狀數(shù)據(jù)處理架構(gòu)中的節(jié)點(diǎn)關(guān)閉,進(jìn)而避免了該環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài)。
在本申請(qǐng)實(shí)施例中,通過(guò)在檢測(cè)到環(huán)狀數(shù)據(jù)處理架構(gòu)中的多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,心跳節(jié)點(diǎn)停止計(jì)數(shù),即心跳階段關(guān)閉,當(dāng)心跳節(jié)點(diǎn)關(guān)閉時(shí),控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)依次關(guān)閉,相對(duì)于現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)中的多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)之間在沒(méi)有消息傳遞時(shí),會(huì)進(jìn)入死鎖狀態(tài),本申請(qǐng)通過(guò)在環(huán)狀數(shù)據(jù)處理架構(gòu)中添加心跳節(jié)點(diǎn),并根據(jù)該心跳節(jié)點(diǎn)依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉,達(dá)到了避免環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài)的目的,進(jìn)而解決了現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)容易陷入死鎖狀態(tài)的技術(shù)問(wèn)題,從而實(shí)現(xiàn)了當(dāng)環(huán)狀數(shù)據(jù)處理架構(gòu)處于空閑狀態(tài)下,不會(huì)進(jìn)入死鎖狀態(tài)的技術(shù)效果。
可選地,第一檢測(cè)單元包括:第一記錄模塊,用于記錄心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù);第二記錄模塊,用于經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和 多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)在第二時(shí)刻的緩存消息的數(shù)量;第一判斷模塊,用于判斷第二時(shí)刻的心跳數(shù)是否等于第一時(shí)刻的心跳數(shù),并判斷第二時(shí)刻的數(shù)量是否為零;第一確定模塊,用于在判斷出第二時(shí)刻的心跳數(shù)等于第一時(shí)刻的心跳數(shù)且第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)節(jié)點(diǎn)均處于空閑狀態(tài)。
在環(huán)狀數(shù)據(jù)處理架構(gòu)中定義一個(gè)心跳節(jié)點(diǎn),該心跳節(jié)點(diǎn)不對(duì)數(shù)據(jù)進(jìn)行任何處理,僅記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理的數(shù)據(jù)條數(shù)。當(dāng)服務(wù)器檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均未進(jìn)行數(shù)據(jù)處理的情況下,通過(guò)第一記錄模塊記錄該時(shí)刻(即,第一時(shí)刻)的心跳數(shù)h1。經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,通過(guò)第二記錄模塊再次記錄第二時(shí)刻的心跳數(shù)h2,并記錄第二時(shí)刻緩存消息的數(shù)量bufferCount2。然后通過(guò)第一判斷模塊判斷h1=h2且bufferCount2=0是否成立,若判斷出成立,則通過(guò)第一確定模塊確定出環(huán)狀數(shù)據(jù)處理架構(gòu)中每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均為空閑狀態(tài)。此時(shí),表明該環(huán)狀數(shù)據(jù)處理架構(gòu)完成對(duì)所有數(shù)據(jù)的處理,控制心跳節(jié)點(diǎn)將停止計(jì)數(shù),并發(fā)送相應(yīng)的消息至心跳節(jié)點(diǎn)的下一層節(jié)點(diǎn)Block1,以通知Block1可以關(guān)閉,Block1還可以發(fā)送相應(yīng)的消息至Block1的下一層節(jié)點(diǎn)Block2,以通知Block2可以關(guān)閉,同樣地,通過(guò)該方法依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
可選地,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中包括批數(shù)據(jù)處理節(jié)點(diǎn),裝置還包括:?jiǎn)?dòng)單元,用于在第一檢測(cè)單元檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,并且在第一控制單元控制心跳節(jié)點(diǎn)停止計(jì)數(shù)之前,啟動(dòng)批數(shù)據(jù)處理節(jié)點(diǎn);第二檢測(cè)單元,用于經(jīng)過(guò)預(yù)設(shè)時(shí)間檢測(cè)批數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài),其中,在檢測(cè)到批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)的情況下,調(diào)用第二控制單元控制心跳節(jié)點(diǎn)停止計(jì)數(shù)。
在本申請(qǐng)實(shí)施例中,多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中可以包括批數(shù)據(jù)處理節(jié)點(diǎn),其中,該批數(shù)據(jù)處理節(jié)點(diǎn)為批量對(duì)數(shù)據(jù)進(jìn)行處理的節(jié)點(diǎn)。例如,任意一個(gè)批數(shù)據(jù)處理節(jié)點(diǎn)每一次處理的數(shù)據(jù)量為10條,若該節(jié)點(diǎn)接收到的數(shù)據(jù)量不滿10條,則該批數(shù)據(jù)處理節(jié)點(diǎn)不會(huì)對(duì)接收到的數(shù)據(jù)進(jìn)行處理。此時(shí),通過(guò)啟動(dòng)單元啟動(dòng)所有批數(shù)據(jù)處理節(jié)點(diǎn),然后經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,再通過(guò)第二檢測(cè)單元檢測(cè)批處理節(jié)點(diǎn)是否處于空閑狀態(tài)。
可選地,前置任務(wù)第二檢測(cè)單元包括:第三記錄模塊,用于記錄心跳節(jié)點(diǎn)在第一時(shí)刻的心跳數(shù);第四記錄模塊,用于經(jīng)過(guò)預(yù)設(shè)時(shí)間后再次記錄前置任務(wù)心跳節(jié)點(diǎn)在第二時(shí)刻的心跳數(shù)和前置任務(wù)批數(shù)據(jù)處理節(jié)點(diǎn)在前置任務(wù)第二時(shí)刻的緩存消息的數(shù)量;第二判斷模塊,用于判斷前置任務(wù)第二時(shí)刻的心跳數(shù)是否等于前置任務(wù)第一時(shí)刻的心跳數(shù),并判斷前置任務(wù)第二時(shí)刻的數(shù)量是否為零;第二確定模塊,用于在判斷出前置任務(wù)第二時(shí)刻的心跳數(shù)等于前置任務(wù)第一時(shí)刻的心跳數(shù)且判斷出前置任務(wù)第二時(shí)刻的數(shù)量為零的情況下,確定每個(gè)前置任務(wù)批數(shù)據(jù)處理節(jié)點(diǎn)處于空閑狀態(tài)。
在環(huán)狀數(shù)據(jù)處理架構(gòu)中定義一個(gè)心跳節(jié)點(diǎn),該心跳節(jié)點(diǎn)不對(duì)數(shù)據(jù)進(jìn)行任何處理, 僅記錄多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理的數(shù)據(jù)條數(shù)。當(dāng)服務(wù)器檢測(cè)到多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均未進(jìn)行數(shù)據(jù)處理的情況下,通過(guò)第三記錄模塊記錄該時(shí)刻(即,第一時(shí)刻)的心跳數(shù)h1。經(jīng)過(guò)預(yù)設(shè)時(shí)間之后,通過(guò)第四記錄模塊再次記錄第二時(shí)刻的心跳數(shù)h2,并記錄第二時(shí)刻緩存消息的數(shù)量bufferCount2。然后通過(guò)第二判斷模塊判斷h1=h2且bufferCount2=0是否成立,若判斷出成立,通過(guò)第二確定模塊確定出環(huán)狀數(shù)據(jù)處理架構(gòu)中每個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均為空閑狀態(tài)。此時(shí),表明該環(huán)狀數(shù)據(jù)處理架構(gòu)完成對(duì)所有數(shù)據(jù)的處理,控制心跳節(jié)點(diǎn)將停止計(jì)數(shù),并發(fā)送相應(yīng)的消息至心跳節(jié)點(diǎn)的下一層節(jié)點(diǎn)Block1,以通知Block1可以關(guān)閉,Block1還可以發(fā)送相應(yīng)的消息至Block1的下一層節(jié)點(diǎn)Block2,以通知Block2可以關(guān)閉,同樣地,通過(guò)該方法依次控制多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
可選地,裝置還包括:接收單元,用于在前置任務(wù)第一檢測(cè)單元檢測(cè)前置任務(wù)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)中每個(gè)節(jié)點(diǎn)是否均處于空閑狀態(tài)之前,接收檢測(cè)指令,并根據(jù)前置任務(wù)檢測(cè)指令檢測(cè)前置任務(wù)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)。具體地,在檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)之前,用戶可以進(jìn)行相關(guān)的前置任務(wù),例如,點(diǎn)擊打開(kāi)與該環(huán)狀數(shù)據(jù)處理架構(gòu)處理數(shù)據(jù)需要應(yīng)用到的數(shù)據(jù)庫(kù),還可以點(diǎn)擊打開(kāi)該環(huán)狀數(shù)據(jù)處理架構(gòu)待處理的文件等。當(dāng)完成全部前置任務(wù)時(shí),服務(wù)器即接收到檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否處于空閑狀態(tài)的指令,并開(kāi)始檢測(cè)。
所述環(huán)狀數(shù)據(jù)處理架構(gòu)的檢測(cè)裝置包括處理器和存儲(chǔ)器,上述第一檢測(cè)單元10、第一控制單元20和第二控制單元30等均作為程序單元存儲(chǔ)在存儲(chǔ)器中,由處理器執(zhí)行存儲(chǔ)在存儲(chǔ)器中的上述程序單元來(lái)實(shí)現(xiàn)相應(yīng)的功能。
處理器中包含內(nèi)核,由內(nèi)核去存儲(chǔ)器中調(diào)取相應(yīng)的程序單元。內(nèi)核可以設(shè)置一個(gè)或以上,通過(guò)調(diào)整內(nèi)核參數(shù)避免環(huán)狀數(shù)據(jù)處理架構(gòu)進(jìn)入死鎖狀態(tài),進(jìn)而解決了現(xiàn)有技術(shù)中環(huán)狀數(shù)據(jù)處理架構(gòu)容易陷入死鎖狀態(tài)的技術(shù)問(wèn)題。
存儲(chǔ)器可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性?xún)?nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM),存儲(chǔ)器包括至少一個(gè)存儲(chǔ)芯片。
本申請(qǐng)還提供了一種計(jì)算機(jī)程序產(chǎn)品,當(dāng)在數(shù)據(jù)處理設(shè)備上執(zhí)行時(shí),適于執(zhí)行初始化有如下方法步驟的程序代碼:檢測(cè)多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)是否均處于空閑狀態(tài),其中,所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)為構(gòu)成所述環(huán)狀數(shù)據(jù)處理架構(gòu)的節(jié)點(diǎn);在檢測(cè)到所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)均處于空閑狀態(tài)的情況下,控制心跳節(jié)點(diǎn)停止計(jì)數(shù),其中,所述心跳節(jié)點(diǎn)為所述環(huán)狀數(shù)據(jù)處理架構(gòu)中用于記錄所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)處理數(shù)據(jù)的條數(shù)的節(jié)點(diǎn);在停止計(jì)數(shù)時(shí)所述心跳節(jié)點(diǎn)關(guān)閉,并通過(guò)所述心跳節(jié)點(diǎn)依次控制所述多個(gè)數(shù)據(jù)處理節(jié)點(diǎn)關(guān)閉。
上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本申請(qǐng)的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如前置任務(wù)單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
前置任務(wù)作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
前置任務(wù)集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例前置任務(wù)方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上前置任務(wù)僅是本申請(qǐng)的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯?,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。