本申請涉及互聯(lián)網(wǎng)通信技術(shù)領域,特別涉及一種集群中任務線程運行的監(jiān)控方法、裝置及系統(tǒng)。
背景技術(shù):
隨著互聯(lián)網(wǎng)通信技術(shù)的日新月異,一些大型的互聯(lián)網(wǎng)系統(tǒng),由于業(yè)務復雜等原因,會出現(xiàn)大集群環(huán)境下多任務線程運行的場景。一般任務線程運行后,都需要一段較長時間來進行業(yè)務處理,監(jiān)聽服務器需要保證在該時間內(nèi)各任務線程穩(wěn)定的運行。
現(xiàn)有技術(shù)中為保證大集群環(huán)境下各任務線程穩(wěn)定運行采取的監(jiān)控方法主要包括兩種:一種是收集報告模式,另一種是主動回查模式。在收集報告模式中需要將每一個任務線程的狀態(tài)報告給監(jiān)聽服務器,當監(jiān)聽服務器在收集到某個任務線程的任務失敗狀態(tài)報告時將重啟所述任務線程的任務副本來保證任務線程穩(wěn)定的運行。在主動回查模式中每個任務線程都需要在監(jiān)聽服務器上進行注冊,這樣監(jiān)聽服務器可以按照一定周期進行逐個任務線程查詢,通過回查模式獲取任務線程的任務狀態(tài),根據(jù)查詢?nèi)蝿諣顟B(tài)來確定是否重啟任務線程的任務副本來保證任務線程穩(wěn)定的運行。但現(xiàn)有技術(shù)的所述收集報告模式的監(jiān)控方法中會由于網(wǎng)絡問題或者機器宕機的情況導致任務狀態(tài)不能順利報告給監(jiān)聽服務器,監(jiān)聽服務器只能根據(jù)一段時間沒有收到任務狀態(tài)報告的規(guī)則來重啟任務線程的任務副本;所述主動回查模式的監(jiān)控方法中也受限于機器、網(wǎng)絡的因素無法準確的獲取任務狀態(tài),所以也只能根據(jù)預設數(shù)量次的回查次數(shù)內(nèi)未查到任務狀態(tài)的條件來重啟任務線程的副本。
因此,現(xiàn)有的上述兩種監(jiān)控方法中均無法準確獲取任務狀態(tài),會出現(xiàn)任務沒有消亡卻盲目的重啟任務線程的任務副本的情況,造成因所述任務線程重復啟動的長時間并發(fā)報錯,導致較大的監(jiān)控開發(fā)成本和系統(tǒng)風險。
技術(shù)實現(xiàn)要素:
本申請實施例的目的是提供一種集群中任務線程運行的監(jiān)控方法、裝置及系統(tǒng),可以保證大集群環(huán)境下各任務線程穩(wěn)定運行,提高系統(tǒng)穩(wěn)定性,降低系統(tǒng)風險。
為解決上述技術(shù)問題,本申請實施例提供一種集群中任務線程運行的監(jiān)控方法、裝置及 系統(tǒng)是這樣實現(xiàn)的:
一種集群中任務線程運行的監(jiān)控方法,所述方法包括:
集群中的任務服務器基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息;
所述集群中的監(jiān)聽服務器以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息;
所述監(jiān)聽服務器計算所述任務線程的當前心跳時間信息與所述第一預設時間的時間之和,比較所述時間之和與當前時間的大小;
所述監(jiān)聽服務器根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行。
一種集群中任務線程運行的監(jiān)控方法,所述方法包括:
以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息;
計算所述任務線程的當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和,比較所述時間之和與當前時間的大?。?/p>
根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行。
一種集群中任務線程運行的監(jiān)控方法,所述方法包括:
在監(jiān)聽服務器啟動任務線程時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;
當所述檢查的結(jié)果為是時,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息。
一種集群中任務線程運行的監(jiān)控裝置,所述裝置包括:
心跳時間信息獲取模塊,用于以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息;
數(shù)據(jù)計算模塊,用于計算所述任務線程的當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和;
數(shù)據(jù)比較模塊,用于比較所述數(shù)據(jù)計算模塊計算得到的時間之和與當前時間的大?。?/p>
任務線程運行控制模塊,用于根據(jù)所述數(shù)據(jù)比較模塊比較的結(jié)果控制所述集群中任務線程的運行。
一種集群中任務線程運行的監(jiān)控裝置,所述裝置包括:
檢查模塊,用于在監(jiān)聽服務器啟動任務線程時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;
心跳時間信息更新模塊,用于當所述檢查模塊的檢查結(jié)果為是時,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息。
一種集群中任務線程運行的監(jiān)控系統(tǒng),所述系統(tǒng)包括:
監(jiān)聽服務器,用于以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息;以及用于計算所述任務線程的當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和,比較所述時間之和與當前時間的大??;以及用于根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行;
任務服務器,用于在監(jiān)聽服務器啟動任務線程時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;以及用于當所述檢查的結(jié)果為是時,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息;
數(shù)據(jù)庫,用于存儲集群中任務線程的當前心跳時間信息。
本申請實施例中任務服務器基于心跳時間關聯(lián)通道將任務線程的當前心跳時間信息以第一預設時間為周期在數(shù)據(jù)庫中更新存儲,監(jiān)聽服務器從所述數(shù)據(jù)庫中獲取任務線程的當前心跳時間信息之后,計算出當前心跳時間信息與所述第一預設時間的時間之和,并通過比較所述時間之和與當前時間的大小的方式判斷當前任務線程是否正常運行。最后,根據(jù)比較的結(jié)果可以有效的控制所述集群中任務線程的運行。與現(xiàn)有技術(shù)相比,利用本申請實施例可以無需直接依賴任務線程的任務狀態(tài),直接判斷出任務線程是否正常運行,有效提高系統(tǒng)穩(wěn)定性,降低系統(tǒng)風險。
附圖說明
為了更清楚地說明本申請實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本申請中記載的一些實施例,對于本領域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控方法的一種實施例的流程示意圖;
圖2是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控方法的另一種實施例的流程示意圖;
圖3是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控方法的另一種實施例的流程示意圖;
圖4是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的一種實施例的結(jié)構(gòu)示意圖;
圖5是本申請?zhí)峁┑乃鋈蝿站€程運行控制模塊一種實施例的模塊示意圖;
圖6是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的另一種實施例的結(jié)構(gòu)示意圖;
圖7是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的另一種實施例的結(jié)構(gòu)示意圖;
圖8是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的另一種實施例的結(jié)構(gòu)示意圖;
圖9是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控系統(tǒng)的一種實施例的結(jié)構(gòu)示意圖。
具體實施方式
為了使本技術(shù)領域的人員更好地理解本申請中的技術(shù)方案,下面將結(jié)合本申請實施例中的附圖,對本申請實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本申請一部分實施例,而不是全部的實施例。基于本申請中的實施例,本領域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都應當屬于本申請保護的范圍。
以下以幾個具體的例子詳細說明本申請實施例的具體實現(xiàn)。
以下首先介紹本申請一種集群中任務線程運行的監(jiān)控方法的一種實施例。圖1是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控方法的一種實施例的流程示意圖,本申請?zhí)峁┝巳鐚嵤├蛄鞒虉D所述的方法操作步驟,但基于常規(guī)或者無創(chuàng)造性的勞動可以包括更多或者更少的操作步驟。實施例中列舉的步驟順序僅僅為眾多步驟執(zhí)行順序中的一種方式,不代表唯一的執(zhí)行順序。在實際中的系統(tǒng)或客戶端產(chǎn)品執(zhí)行時,可以按照實施例或者附圖所示的方法順序執(zhí)行或者并行執(zhí)行(例如并行處理器或者多線程處理的環(huán)境)。具體的如圖1所示,所述方法可以包括:
s110:集群中的任務服務器基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息。
在本申請實施例中,集群中的任務服務器可以基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息。在實際應用中,一般所述集群中可以包括多個任務線程對應的任務服務器,以及監(jiān)控所述多個任務線程的監(jiān)聽服務器。具體的,所述任務服務器可以包括客戶端,也可以包括控制多個任務線程的服務器。具體的,所述第一預設時間可以根據(jù)實際應用情況設置,一般的,所述第一預設時間可以小于任務線程運行處理時間。具體的,所述心跳時間關聯(lián)通道與相應的運行中的任務線程一一對應。當任務線程與數(shù)據(jù)庫建立了心跳時間關聯(lián)通道之后,可以保證將所述任務線程的心跳時間信息存儲到數(shù)據(jù)庫中。具體的,所述當前心跳時間信息可以是任務線程在運行期間所述任務服務器存儲 到數(shù)據(jù)庫中的當前時間信息。例如,任務線程a正在運行,且距離上次在數(shù)據(jù)庫中更新存儲當前心跳時間信息已達到所述第一預設時間,那么任務服務器可以將所述任務線程a的當前時間信息存儲到數(shù)據(jù)庫中作為當前心跳時間信息。
進一步的,在實際應用中,當需要進行業(yè)務處理時,集群中可以為所述業(yè)務分配相應的任務線程,相應的,所述方法還可以包括:
所述監(jiān)聽服務器啟動所述集群中的任務線程,并分別建立所述集群中的任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道。
具體的,一般一個任務線程只可以與所述數(shù)據(jù)庫建立一條心跳時間關聯(lián)通道。當任務線程與所述數(shù)據(jù)庫建立了心跳時間關聯(lián)通道,基于所述心跳時間關聯(lián)通道所述任務線程在運行期間就可以在所述數(shù)據(jù)庫中更新存儲當前心跳時間信息。相應的,所述方法還可以包括:
所述任務服務器在任務線程啟動時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;
當所述檢查的結(jié)果為是時,所述任務服務器基于所述心跳時間關聯(lián)通道執(zhí)行以第一預設時間為周期在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息的操作。
相應的,所述方法還可以包括:
當所述檢查的結(jié)果為否時,停止所述任務線程當前任務的運行。
上述通過在任務線程啟動運行時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道可以保證當任務線程自身占有相應的心跳時間關聯(lián)通道時,可以繼續(xù)進行業(yè)務處理;一旦自身沒有相應的心跳時間關聯(lián)通道時,所述任務服務器可以停止當前任務的運行。這樣同一業(yè)務的任務線程間也存在了互斥性,可以避免了任務沒有消亡卻盲目的重啟任務線程的任務副本的情況,解決了因所述任務線程重復啟動的長時間并發(fā)報錯。
s120:所述集群中的監(jiān)聽服務器以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息。
本申請實施例中,在步驟s110之后,所述集群中的監(jiān)聽服務器可以以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息。具體的,所述第二預設時間可以根據(jù)實際應用情況設置,具體的,所述第二預設時間可以小于等于所述第一預設時間。例如,所述第一預設時間為30s時,所述第二預設時間可以為25s。
具體的,本申請實施例所述監(jiān)聽服務器可以通過數(shù)據(jù)庫的api(applicationprogramminginterface,應用程序編程接口)接口訪問數(shù)據(jù)庫,獲取任務線程的當前心跳時間信息。這里通過api接口進行訪問可以有效避免網(wǎng)絡問題導致的數(shù)據(jù)通信問題。
s130:所述監(jiān)聽服務器計算所述任務線程的當前心跳時間信息與所述第一預設時間的時間之和,比較所述時間之和與當前時間的大小。
本申請實施例中,在步驟s120之后,所述監(jiān)聽服務器可以計算所述任務線程的當前心跳時間信息與所述第一預設時間的時間之和,比較所述時間之和與當前時間的大小。具體的,例如任務線程a在數(shù)據(jù)庫中的最近一次更新存儲的當前心跳時間信息09:32:10,可以表示為time_heartbeat=9*3600+32*60+10,假設第一預設時間為25s,可以表示為time_first=25*60,那么可以計算得到所述任務線程a的當前心跳時間信息與所述第一預設時間的時間之和09:32:35,可以表示為time_heartbeat+time_first=9*3600+32*60+35。
具體的,當計算得到任務線程的當前心跳時間信息與所述第一預設時間的時間之和后,可以獲取當前時間,比較所述時間之和與當前時間的大小。
s140:所述監(jiān)聽服務器根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行。
本申請實施例中,在步驟s130之后,所述監(jiān)聽服務器可以根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行。具體的,可以包括下述中的任意一種:
當所述比較的結(jié)果為所述時間之和小于所述當前時間時,所述監(jiān)聽服務器重啟所述集群中所述時間之和所對應的任務線程的任務副本;
當所述比較的結(jié)果為所述時間之和大于等于所述當前時間時,所述監(jiān)聽服務器執(zhí)行以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息的操作來完成所述集群中任務線程的運行。
具體的,在實際應用中,以上述任務線程a所對應的所述時間之和time_heartbeat+time_first=9*3600+32*60+35為例,假設當前時間09:32:45,可以表示為time_now=9*3600+32*60+45,那么可以得到time_heartbeat+time_first<time_now,相應的,步驟s130中比較的結(jié)果為所述時間之和小于所述當前時間,所述監(jiān)聽服務器可以通過重啟所述集群中所述時間之和所對應的任務線程的任務副本來保證任務線程可以繼續(xù)運行,從而可以進行相應業(yè)務的處理。相應的,在所述監(jiān)聽服務器重啟所述集群中所述時間之和所對應的任務線程的任務副本之后,所述方法還可以包括:
所述監(jiān)聽服務器建立所述任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道。
具體的,當監(jiān)聽服務器任務線程的任務副本之后,建立所述任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道,可以保證當前運行中的任務線程可以占有相應的心跳時間關聯(lián)通道。這樣無論所述任務線程對應的原始任務線程是否已經(jīng)停止相應任務的運行,當原始任務線程 發(fā)現(xiàn)已經(jīng)不再占有對應心跳時間關聯(lián)通道后會自動停止相應任務的運行。
具體的,在實際應用中,以上述任務線程a所對應的所述時間之和time_heartbeat+time_first=9*3600+32*60+35為例,假設當前時間09:32:45,可以表示為time_now=9*3600+32*60+45,那么可以得到time_heartbeat+time_first>time_now,相應的,步驟s130中比較的結(jié)果為所述時間之和大于所述當前時間,可以判斷相應的任務線程正在穩(wěn)定運行,所述任務線程可以繼續(xù)以第一預設時間為周期在數(shù)據(jù)庫中更新存儲當前心跳時間信息。相應的,所述監(jiān)聽服務器可以繼續(xù)執(zhí)行s120以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息的操作來完成所述集群中任務線程的運行。
由此可見,本申請一種集群中任務線程運行的監(jiān)控方法的實施例中任務服務器基于心跳時間關聯(lián)通道將任務線程的當前心跳時間信息以第一預設時間為周期在數(shù)據(jù)庫中更新存儲,監(jiān)聽服務器從所述數(shù)據(jù)庫中獲取任務線程的當前心跳時間信息之后,計算出當前心跳時間信息與所述第一預設時間的時間之和,并通過比較所述時間之和與當前時間的大小的方式判斷當前任務線程是否正常運行。然后,根據(jù)比較的結(jié)果可以有效的控制所述集群中任務線程的運行。同時,通過在任務線程啟動運行時檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道的方式,可以保證同一業(yè)務的任務線程間也存在了互斥性,可以避免任務沒有消亡卻盲目的重啟任務線程的任務副本的情況,有效解決了因所述任務線程重復啟動的長時間并發(fā)報錯。與現(xiàn)有技術(shù)相比,利用本申請實施例可以無需直接依賴任務線程的任務狀態(tài),直接判斷出任務線程是否正常運行,同時解決了因所述任務線程重復啟動的長時間并發(fā)報錯,有效提高了系統(tǒng)穩(wěn)定性,降低了系統(tǒng)風險。
考慮監(jiān)聽服務器為主的步驟,以下介紹本申請一種集群中任務線程運行的監(jiān)控方法的另一種實施例,圖2是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控方法的另一種實施例的流程示意圖,本申請?zhí)峁┝巳鐚嵤├蛄鞒虉D所述的方法操作步驟,但基于常規(guī)或者無創(chuàng)造性的勞動可以包括更多或者更少的操作步驟。實施例中列舉的步驟順序僅僅為眾多步驟執(zhí)行順序中的一種方式,不代表唯一的執(zhí)行順序。在實際中執(zhí)行時,可以按照實施例或者附圖所示的方法順序執(zhí)行或者并行執(zhí)行(例如并行處理器或者多線程處理的環(huán)境)。具體的如圖2所示,所述方法可以包括:
s210:以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息。
s220:計算所述任務線程的當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和,比較所述時間之和與當前時間的大小。
s230:根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行。
具體的,所述根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行可以包括下述中的任意一種:
當所述比較的結(jié)果為所述時間之和小于所述當前時間時,重啟所述集群中所述時間之和所對應的任務線程的任務副本;
當所述比較的結(jié)果為所述時間之和大于等于所述當前時間時,執(zhí)行以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息的操作來完成所述集群中任務線程的運行。
進一步的,在所述重啟所述集群中所述時間之和所對應的任務線程的任務副本之后,所述方法還可以包括:
建立所述任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道。
進一步的,所述方法還可以包括:
啟動所述集群中的任務線程,并分別建立所述集群中的任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道。
由以上本申請實施例的技術(shù)方案可見,本申請中監(jiān)聽服務器以第二預設時間為周期從數(shù)據(jù)庫中獲取任務線程的當前心跳時間信息之后,計算出當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和,并通過比較所述時間之和與當前時間的大小的方式判斷當前任務線程是否正常運行。然后,根據(jù)比較的結(jié)果可以有效的控制所述集群中任務線程的運行。與現(xiàn)有技術(shù)相比,利用本申請實施例可以無需直接依賴任務線程的任務狀態(tài),直接判斷出任務線程是否正常運行,有效提高了系統(tǒng)穩(wěn)定性,降低了系統(tǒng)風險。
考慮任務服務器為主的步驟,以下介紹本申請一種集群中任務線程運行的監(jiān)控方法的另一種實施例,圖3是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控方法的另一種實施例的流程示意圖,本申請?zhí)峁┝巳鐚嵤├蛄鞒虉D所述的方法操作步驟,但基于常規(guī)或者無創(chuàng)造性的勞動可以包括更多或者更少的操作步驟。實施例中列舉的步驟順序僅僅為眾多步驟執(zhí)行順序中的一種方式,不代表唯一的執(zhí)行順序。在實際中執(zhí)行時,可以按照實施例或者附圖所示的方法順序執(zhí)行或者并行執(zhí)行(例如并行處理器或者多線程處理的環(huán)境)。具體的如圖3所示,所述方法可以包括:
s310:在監(jiān)聽服務器啟動任務線程時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;
s320:當所述檢查的結(jié)果為是時,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息。
進一步的,所述方法還可以包括:
當所述檢查的結(jié)果為否時,停止所述任務線程當前任務的運行。
由以上本申請實施例的技術(shù)方案可見,本申請中任務服務器在任務線程啟動運行時檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道的方式,可以保證同一業(yè)務的任務線程間也存在了互斥性,可以避免任務沒有消亡卻盲目的重啟任務線程的任務副本的情況,有效解決了因所述任務線程重復啟動的長時間并發(fā)報錯。然后,當建立了所述心跳時間關聯(lián)通道后,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息,以使后續(xù)監(jiān)聽服務器可以基于所述當前心跳時間信息判斷當前任務線程是否正常運行,進而可以有效的控制所述集群中任務線程的運行。與現(xiàn)有技術(shù)相比,利用本申請實施例可以解決了因所述任務線程重復啟動的長時間并發(fā)報錯,有效提高了系統(tǒng)穩(wěn)定性,降低了系統(tǒng)風險。
本申請另一方面還提供一種集群中任務線程運行的監(jiān)控裝置的一種實施例,圖4是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的一種實施例的結(jié)構(gòu)示意圖,如圖4所示,所述裝置400可以包括:
心跳時間信息獲取模塊410,可以用于以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息。
數(shù)據(jù)計算模塊420,可以用于計算所述任務線程的當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和。
數(shù)據(jù)比較模塊430,可以用于比較所述數(shù)據(jù)計算模塊計算得到的時間之和與當前時間的大小。
任務線程運行控制模塊440,可以用于根據(jù)所述數(shù)據(jù)比較模塊比較的結(jié)果控制所述集群中任務線程的運行。
本申請?zhí)峁┧鋈蝿站€程運行控制模塊440的一種具體實施例方式。具體的,圖5是本申請?zhí)峁┑乃鋈蝿站€程運行控制模塊一種實施例的模塊示意圖,如圖5所示,本申請的一種實施例中所述任務線程運行控制模塊440可以包括:
第一控制處理單元441,可以用于當所述比較的結(jié)果為所述時間之和小于所述當前時間時,重啟所述集群中所述時間之和所對應的任務線程的任務副本;
第二控制處理單元442,可以用于當所述比較的結(jié)果為所述時間之和大于等于所述當前 時間時,執(zhí)行以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息的操作來完成所述集群中任務線程的運行。
圖6是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的另一種實施例的結(jié)構(gòu)示意圖,另一種實施例中,如圖6所示,所述裝置400還可以包括:
第一關聯(lián)通道建立模塊450,可以用于在重啟所述集群中所述時間之和所對應的任務線程的任務副本之后,建立所述任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道。
圖7是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的另一種實施例的結(jié)構(gòu)示意圖,另一種實施例中,如圖7所示,所述裝置400還可以包括:
第二關聯(lián)通道建立模塊460,可以用于啟動所述集群中的任務線程,并分別建立所述集群中的任務線程與所述數(shù)據(jù)庫之間的心跳時間關聯(lián)通道。
本申請中心跳時間信息獲取模塊410從所述數(shù)據(jù)庫中以第二預設時間為周期獲取任務線程的當前心跳時間信息;然后,數(shù)據(jù)計算模塊420可以通過計算得到當前心跳時間信息與所述第一預設時間的時間之和;接著,數(shù)據(jù)比較模塊430可以通過比較所述時間之和與當前時間的大小的方式判斷當前任務線程是否正常運行。最后,任務線程運行控制模塊440可以根據(jù)比較的結(jié)果有效的控制所述集群中任務線程的運行,提高系統(tǒng)穩(wěn)定性,降低系統(tǒng)風險。
本申請另一方面還提供一種集群中任務線程運行的監(jiān)控裝置的另一種實施例,圖8是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控裝置的一種實施例的結(jié)構(gòu)示意圖,如圖8所示,所述裝置800可以包括:
檢查模塊810,可以用于在監(jiān)聽服務器啟動任務線程時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;
心跳時間信息更新模塊820,可以用于當所述檢查模塊的檢查結(jié)果為是時,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息。
在另一個實施例中,所述裝置800還可以包括:
任務運行停止模塊,可以用于當所述檢查模塊的檢查結(jié)果為否時,停止所述任務線程當前任務的運行。
本申請?zhí)峁┑臋z查模塊810通過在任務線程啟動運行時檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道的方式,可以保證同一業(yè)務的任務線程間也存在了互斥性,可以避免任務沒有消亡卻盲目的重啟任務線程的任務副本的情況,有效解決了因所述任務線程重復啟動的長時間并發(fā)報錯。
本申請另一方面還提供一種集群中任務線程運行的監(jiān)控系統(tǒng),圖9是本申請?zhí)峁┑募褐腥蝿站€程運行的監(jiān)控系統(tǒng)的一種實施例的結(jié)構(gòu)示意圖,如圖9所示,所述系統(tǒng)900可以包括:
監(jiān)聽服務器910,可以用于以第二預設時間為周期獲取所述數(shù)據(jù)庫中任務線程的當前心跳時間信息;以及用于計算所述任務線程的當前心跳時間信息與任務服務器在數(shù)據(jù)庫中更新存儲所述任務線程的當前心跳時間信息對應周期的第一預設時間的時間之和,比較所述時間之和與當前時間的大??;以及用于根據(jù)所述比較的結(jié)果控制所述集群中任務線程的運行;
任務服務器920,可以用于在監(jiān)聽服務器啟動任務線程時,檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道;以及用于當所述檢查的結(jié)果為是時,基于心跳時間關聯(lián)通道以第一預設時間為周期在數(shù)據(jù)庫中更新存儲任務線程的當前心跳時間信息;
數(shù)據(jù)庫930,可以用于存儲集群中任務線程的當前心跳時間信息。
由此可見,本申請一種集群中任務線程運行的監(jiān)控方法、裝置及系統(tǒng)的實施例基于心跳時間關聯(lián)通道將任務線程的當前心跳時間信息以第一預設時間為周期在數(shù)據(jù)庫中更新存儲,監(jiān)聽服務器從所述數(shù)據(jù)庫中獲取任務線程的當前心跳時間信息之后,計算出當前心跳時間信息與所述第一預設時間的時間之和,并通過比較所述時間之和與當前時間的大小的方式判斷當前任務線程是否正常運行。然后,根據(jù)比較的結(jié)果可以有效的控制所述集群中任務線程的運行。同時,通過在任務線程啟動運行時檢查所述任務線程是否與所述數(shù)據(jù)庫之間建立了心跳時間關聯(lián)通道的方式,可以保證同一業(yè)務的任務線程間也存在了互斥性,可以避免任務沒有消亡卻盲目的重啟任務線程的任務副本的情況,有效解決了因所述任務線程重復啟動的長時間并發(fā)報錯。與現(xiàn)有技術(shù)相比,利用本申請實施例可以無需直接依賴任務線程的任務狀態(tài),直接判斷出任務線程是否正常運行,同時解決了因所述任務線程重復啟動的長時間并發(fā)報錯,有效提高了系統(tǒng)穩(wěn)定性,降低了系統(tǒng)風險。
盡管本申請內(nèi)容中提到數(shù)據(jù)庫、監(jiān)聽服務器、和任務服務器之間的數(shù)據(jù)交互等之類的數(shù)據(jù)處理的描述,但是,本申請并不局限于必須是完全標準或者所提及的數(shù)據(jù)處理應用環(huán)境的情況。本申請中各個實施例中所涉及的上述描述僅是本申請中的一些實施例中的應用。當然,在符合本申請上述各實施例的中所述的處理方法步驟的其他無創(chuàng)造性的變形,仍然可以實現(xiàn)相同的申請,在此不再贅述。
雖然本申請?zhí)峁┝巳鐚嵤├蛄鞒虉D所述的方法操作步驟,但基于常規(guī)或者無創(chuàng)造性的手段可以包括更多或者更少的操作步驟。實施例中列舉的步驟順序僅僅為眾多步驟執(zhí)行順序中的一種方式,不代表唯一的執(zhí)行順序。在實際中的裝置或客戶端產(chǎn)品執(zhí)行時,可以按照實 施例或者附圖所示的方法順序執(zhí)行或者并行執(zhí)行(例如并行處理器或者多線程處理的環(huán)境)。
上述實施例闡明裝置或模塊,具體可以由計算機芯片或?qū)嶓w實現(xiàn),或者由具有某種功能的產(chǎn)品來實現(xiàn)。為了描述的方便,描述以上裝置時以功能分為各種模塊分別描述。當然,在實施本申請時可以把各模塊的功能在同一個或多個軟件和/或硬件中實現(xiàn),也可以將實現(xiàn)同一功能的模塊由多個子模塊或子單元的組合實現(xiàn)。
本領域技術(shù)人員也知道,除了以純計算機可讀程序代碼方式實現(xiàn)控制器以外,完全可以通過將方法步驟進行邏輯編程來使得控制器以邏輯門、開關、專用集成電路、可編程邏輯控制器和嵌入微控制器等的形式來實現(xiàn)相同功能。因此這種控制器可以被認為是一種硬件部件,而對其內(nèi)部包括的用于實現(xiàn)各種功能的裝置也可以視為硬件部件內(nèi)的結(jié)構(gòu)?;蛘呱踔?,可以將用于實現(xiàn)各種功能的裝置視為既可以是實現(xiàn)方法的軟件模塊又可以是硬件部件內(nèi)的結(jié)構(gòu)。
本申請可以在由計算機執(zhí)行的計算機可執(zhí)行指令的一般上下文中描述,例如程序模塊。一般地,程序模塊包括執(zhí)行特定任務或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)、類等等。也可以在分布式計算環(huán)境中實踐本申請,在這些分布式計算環(huán)境中,由通過通信網(wǎng)絡而被連接的遠程處理設備來執(zhí)行任務。在分布式計算環(huán)境中,程序模塊可以位于包括存儲設備在內(nèi)的本地和遠程計算機存儲介質(zhì)中。
通過以上的實施方式的描述可知,本領域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品可以存儲在存儲介質(zhì)中,如rom/ram、磁碟、光盤等,包括若干指令用以使得一臺計算機設備(可以是個人計算機,移動終端,服務器,或者網(wǎng)絡設備等)執(zhí)行本申請各個實施例或者實施例的某些部分所述的方法。
本說明書中的各個實施例采用遞進的方式描述,各個實施例之間相同或相似的部分互相參見即可,每個實施例重點說明的都是與其他實施例的不同之處。本申請可用于眾多通用或?qū)S玫挠嬎銠C系統(tǒng)環(huán)境或配置中。例如:個人計算機、服務器計算機、手持設備或便攜式設備、平板型設備、移動通信終端、多處理器系統(tǒng)、基于微處理器的系統(tǒng)、可編程的電子設備、網(wǎng)絡pc、小型計算機、大型計算機、包括以上任何系統(tǒng)或設備的分布式計算環(huán)境等等。
雖然通過實施例描繪了本申請,本領域普通技術(shù)人員知道,本申請有許多變形和變化而不脫離本申請的精神,希望所附的權(quán)利要求包括這些變形和變化而不脫離本申請的精神。