本發(fā)明涉及通信技術(shù)領(lǐng)域,尤其涉及一種確定被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法、一種監(jiān)控節(jié)點(diǎn)和一種包括該監(jiān)控節(jié)點(diǎn)的分布式集群系統(tǒng)。
背景技術(shù):
在分布式集群系統(tǒng)中,通常需要通過檢測某一個節(jié)點(diǎn)的狀態(tài)來判斷該節(jié)點(diǎn)是否正常工作或者是否還連接在集群中等,而檢測該節(jié)點(diǎn)的狀態(tài)一般都是采用心跳消息的方式,即通過在與節(jié)點(diǎn)的TCP連接上定時發(fā)送規(guī)定格式的心跳包,如果該節(jié)點(diǎn)在預(yù)設(shè)時間內(nèi)能夠接收到心跳包,則認(rèn)為該節(jié)點(diǎn)的狀態(tài)為正常。
但是,目前關(guān)于預(yù)設(shè)時間的選定還沒有固定的標(biāo)準(zhǔn),多是通過經(jīng)驗值來確定該預(yù)設(shè)時間的長短,這樣就容易導(dǎo)致誤判節(jié)點(diǎn)的狀態(tài),進(jìn)而影響到集群的協(xié)同工作等。
因此,在分布式集群系統(tǒng)中需要一種新的確定節(jié)點(diǎn)工作狀態(tài)的方法以解決上述問題。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于提供一種確定被監(jiān)控節(jié)點(diǎn)工作狀態(tài)的方法、監(jiān)控節(jié)點(diǎn)和集群系統(tǒng),在所述方法中,超時時間設(shè)置合理,以使得判斷結(jié)果更加準(zhǔn)確。
為了實(shí)現(xiàn)上述目的,作為本發(fā)明的一個方面,提供一種確定分布式集群系統(tǒng)中被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法,所述分布式集群系統(tǒng)包括監(jiān)控節(jié)點(diǎn)和至少一個被監(jiān)控節(jié)點(diǎn),所述被監(jiān)控節(jié)點(diǎn)用于向所述監(jiān)控節(jié)點(diǎn)發(fā)送心跳包,其中,所述方法包括多個監(jiān)控周期,對于任意一個監(jiān)控周期所述方法包括:
確定本次監(jiān)控周期的超時時間;
根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常;其中,
對于第一個監(jiān)控周期,確定第一個監(jiān)控周期的超時時間的步驟包括將預(yù)設(shè)超時時間作為第一個監(jiān)控周期的超時時間;
從第二個監(jiān)控周期開始,確定本次監(jiān)控周期的超時時間的步驟包括:
計算前一個監(jiān)控周期中所有的相鄰兩個心跳包之間的時間間隔的平均值;
利用所述平均值乘以前一個監(jiān)控周期中接收到所述心跳包的數(shù)量,得到參考超時時間;
根據(jù)以下公式計算所述參考超時時間和前一個監(jiān)控周期的超時時間之間的差異值:
a=(Q-P)/P;
其中,a為所述差異值;
Q為所述參考超時時間;
P為前一個監(jiān)控周期的超時時間;
當(dāng)所述差異值位于預(yù)定區(qū)間(a1,a2)內(nèi)時,將前一個監(jiān)控周期的超時時間設(shè)定為本次監(jiān)控周期的監(jiān)控時間,當(dāng)所述差異值位于所述預(yù)定區(qū)間之外時,將所述參考超時時間設(shè)置為本次監(jiān)控周期的超時時間,其中,a1<1,a2>1。
優(yōu)選地,所述方法還包括在確定本次監(jiān)控周期的超時時間的步驟和根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常的步驟之間進(jìn)行的將接收到心跳包的時間記錄在心跳包監(jiān)控表中的步驟,包括:
每接收到一個心跳包在所述心跳包監(jiān)控表中增加一行關(guān)于接收到的心跳包的記錄,其中,關(guān)于接收到的心跳包的記錄包括接收到所述心跳包的時間以及接收到的心跳包的時間與接收到上一個心跳包的時間之間的時間間隔;
判斷所述心跳包監(jiān)控表中的記錄是否超過預(yù)定行數(shù);
當(dāng)所述心跳包監(jiān)控表的行數(shù)超過預(yù)定行數(shù)時,刪除關(guān)于本心跳包監(jiān)控表中最早接收到的心跳包的記錄,并繼續(xù)執(zhí)行所述每接收到一個心跳包在所述心跳包監(jiān)控表中增加一行關(guān)于接收到的心跳包的記錄的步驟;
在所述根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常的步驟中,根據(jù)所述心跳包監(jiān)控表中記錄關(guān)于接收到的心跳包的記錄判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)。
優(yōu)選地,每個所述監(jiān)控周期包括多個觀察點(diǎn),任意相鄰兩個觀察點(diǎn)之間的時間間隔相同;
根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常的步驟包括按照時間順序依次在各個觀察點(diǎn)處進(jìn)行的:
判斷截至本觀察點(diǎn)時,超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例;
當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例超過所述預(yù)定比例時,判定所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)異常。
優(yōu)選地,根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常的步驟還包括:
當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例未超過所述預(yù)定比例時,判斷從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間是否逐漸增大;
當(dāng)從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間并非逐漸增大時,則繼續(xù)接收心跳包,并對所述心跳包監(jiān)控表執(zhí)行步驟所述判斷截至本觀察點(diǎn)時超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例的步驟;
當(dāng)從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間逐漸增大時,清空所述心跳包監(jiān)控表中所有的記錄,并在清空后繼續(xù)在所述心跳監(jiān)控表中增加關(guān)于接收到的心跳包的記錄;
判斷從本觀察點(diǎn)后與二分之一所述預(yù)定數(shù)量個時間間隔相同的時間段內(nèi)是否能夠接收到新的心跳包;
當(dāng)從本觀察點(diǎn)后與二分之一所述預(yù)定數(shù)量個時間間隔相同的時間段內(nèi)未能接收到新的心跳包時,則判定所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)異常。
優(yōu)選地,所述根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常的步驟還包括:
從本觀察點(diǎn)后與二分之一所述預(yù)定數(shù)量個時間間隔相同的時間段內(nèi)接收到新心跳包時,對經(jīng)過清空后形成的心跳包監(jiān)控表,按照時間順序?qū)Ω鱾€觀察點(diǎn)執(zhí)行所述判斷截至本觀察點(diǎn)時、超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例的步驟。
作為本發(fā)明的另一個方面,提供一種監(jiān)控節(jié)點(diǎn),所述監(jiān)控節(jié)點(diǎn)用于接收被監(jiān)控節(jié)點(diǎn)發(fā)送的心跳包,其中,所述監(jiān)控節(jié)點(diǎn)包括:
超時時間確定模塊,所述超時時間確定模塊用于確定本次監(jiān)控周期的超時時間;
狀態(tài)判斷模塊,所述狀態(tài)判斷模塊用于根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常;其中,所述超時時間確定模塊包括:
預(yù)設(shè)超時時間設(shè)定單元,所述預(yù)設(shè)超時時間設(shè)定單元用于將預(yù)設(shè)超時時間作為第一個監(jiān)控周期的超時時間;
平均值計算單元,所述平均值計算單元用于計算前一個監(jiān)控周期中所有的相鄰兩個心跳包之間的時間間隔的平均值;
參考時間計算單元,所述參考時間計算單元用于利用所述平均值乘以前一個監(jiān)控周期中接收到所述心跳包的數(shù)量,得到參考超時時間;
差異值計算單元,所述差異值計算單元用于根據(jù)以下公式計算所述參考超時時間和前一個監(jiān)控周期的超時時間之間的差異值:
a=(Q-P)/P;
其中,a為所述差異值;
Q為所述參考超時時間;
P為前一個監(jiān)控周期的超時時間;
超時時間選擇單元,所述超時時間選擇單元用于在當(dāng)差異值位于預(yù)定區(qū)間(a1,a2)內(nèi)時,將前一個監(jiān)控周期的超時時間設(shè)定為本次監(jiān)控周期的監(jiān)控時間,并且,所述超時時間選擇單元還用于在當(dāng)差異值位于所述預(yù)定區(qū)間之外時,將所述參考超時時間設(shè)置為本次監(jiān)控周期的超時時間,其中,a1<1,a2>1。
優(yōu)選地,所述監(jiān)控節(jié)點(diǎn)還包括心跳包監(jiān)控表生成模塊,所述心跳包監(jiān)控表生成模塊用于生成心跳包監(jiān)控表,并且所述心跳包監(jiān)控表生成模塊包括:記錄單元,所述記錄單元用于每接收到一個心跳包在所述心跳包監(jiān)控表中增加一行關(guān)于接收到的心跳包的記錄,其中,關(guān)于接收到的心跳包的記錄包括接收到所述心跳包的時間以及接收到的心跳包的時間與接收到上一個心跳包的時間之間的時間間隔;行數(shù)判斷單元,所述行數(shù)判斷單元用于判斷所述心跳包監(jiān)控表中的記錄是否超過預(yù)定行數(shù);和,刪除單元,所述刪除單元用于在所述心跳包監(jiān)控表的行數(shù)超過預(yù)定行數(shù)時,刪除關(guān)于本心跳包監(jiān)控表中最早接收到的心跳包的記錄;
所述狀態(tài)判斷模塊用于根據(jù)所述心跳包監(jiān)控表中記錄關(guān)于接收到的心跳包的記錄判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)。
優(yōu)選地,每個所述監(jiān)控周期包括多個觀察點(diǎn),任意相鄰兩個觀察點(diǎn)之間的時間間隔相同,所述狀態(tài)判斷模塊包括:
錯誤比例確定單元,所述錯誤比例確定單元用于依次在各個觀察點(diǎn)處判斷超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例;
異常判斷單元,所述異常判斷單元用于在當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例超過所述預(yù)定比例時,判定所述被監(jiān)控節(jié)點(diǎn)異常。
優(yōu)選地,所述狀態(tài)判斷模塊還包括:
初始錯誤判斷單元,用于當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例未超過所述預(yù)定比例時,判斷從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間是否逐漸增大,并生成判斷結(jié)果,且所述初始錯誤判斷單元還能夠?qū)⑺雠袛嘟Y(jié)果發(fā)送至所述錯誤比例確定單元,所述錯誤比例確定單元還用于在接收到所述初始錯誤判斷單元發(fā)出的“是”的判定結(jié)果時開始運(yùn)行;
清空單元,所述初始錯誤判斷單元還用于將所述判定結(jié)果發(fā)送至所述清空單元,所述清空單元用于在接收到所述初始錯誤判斷單元發(fā)送的“否”的判定結(jié)果時,清空所述心跳包監(jiān)控表中所有的記錄;
計時單元,所述計時單元用于判斷從本觀察點(diǎn)后與二分之一所述預(yù)定數(shù)量個時間間隔相同的時間段內(nèi)是否能夠接收到新的心跳包,并將判斷結(jié)果發(fā)送至所述異常判斷單元;
所述異常判斷單元還用于當(dāng)所述計時單元生成“是”的判定結(jié)果時,生成判定所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)異常的判定結(jié)果;所述異常判斷單元還用于當(dāng)所述計時單元生成“否”的判定結(jié)果時,根據(jù)經(jīng)過清空后形成的心跳包監(jiān)控表判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常。
作為本發(fā)明的還一個方面,提供一種集群系統(tǒng),所述集群系統(tǒng)包括監(jiān)控節(jié)點(diǎn)和至少一個被監(jiān)控節(jié)點(diǎn),其中,所述監(jiān)控節(jié)點(diǎn)為本發(fā)明所提供的上述監(jiān)控節(jié)點(diǎn)。
在本發(fā)明所提供的方法中,本次監(jiān)控周期的錯誤時間是由上一個監(jiān)控周期中心跳包之間的時間間隔、以及上一個監(jiān)控周期的錯誤時間所決定的,充分考慮了網(wǎng)絡(luò)狀況對心跳包接收時間的影響,并根據(jù)該影響調(diào)節(jié)錯誤時間,可以使判斷結(jié)果更加準(zhǔn)確。
附圖說明
附圖是用來提供對本發(fā)明的進(jìn)一步理解,并且構(gòu)成說明書的一部分,與下面的具體實(shí)施方式一起用于解釋本發(fā)明,但并不構(gòu)成對本發(fā)明的限制。在附圖中:
圖1是本發(fā)明實(shí)施例1所提供的確定分布式集群系統(tǒng)中被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法的流程圖;
圖2是圖1中所示的方法中,步驟S100的流程圖;
圖3是本發(fā)明實(shí)施例2所提供的確定分布式集群系統(tǒng)中被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法的流程圖;
圖4是本發(fā)明實(shí)施例4所提供的確定分布式集群系統(tǒng)中被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法的流程圖;
圖5是本發(fā)明所提供的監(jiān)控節(jié)點(diǎn)的模塊圖。
附圖標(biāo)記說明
100:超時時間確定模塊 110:預(yù)設(shè)超時時間設(shè)定單元
120:平均值計算單元 130:參考時間計算單元
140:差異值計算單元 150:超時時間選擇單元
200:心跳包監(jiān)控表生成模塊 210:記錄單元
220:行數(shù)判斷單元 230:刪除單元
300:狀態(tài)判斷模塊 310:錯誤比例確定單元
320:異常判斷單元 330:初始錯誤判斷單元
340:清空單元 350:計時單元
具體實(shí)施方式
以下結(jié)合附圖對本發(fā)明的具體實(shí)施方式進(jìn)行詳細(xì)說明。應(yīng)當(dāng)理解的是,此處所描述的具體實(shí)施方式僅用于說明和解釋本發(fā)明,并不用于限制本發(fā)明。
實(shí)施例1
作為本發(fā)明的一個方面,提供一種確定分布式集群系統(tǒng)中被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法,所述分布式集群系統(tǒng)包括監(jiān)控節(jié)點(diǎn)和至少一個被監(jiān)控節(jié)點(diǎn),所述被監(jiān)控節(jié)點(diǎn)用于向所述監(jiān)控節(jié)點(diǎn)發(fā)送心跳包,其中,如圖1所示,所述方法包括多個監(jiān)控周期,對于任意一個監(jiān)控周期所述方法包括:
S100、確定本次監(jiān)控周期的超時時間;
S300、根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常;其中,
對于第一個監(jiān)控周期,確定第一個監(jiān)控周期的超時時間的步驟包括將預(yù)設(shè)超時時間作為第一個監(jiān)控周期的超時時間;
從第二個監(jiān)控周期開始,如圖2所示,確定本次監(jiān)控周期的超時時間的步驟包括:
S110、計算前一個監(jiān)控周期中所有的相鄰兩個心跳包之間的時間間隔的平均值;
S120、利用所述平均值乘以前一個監(jiān)控周期中接收到所述心跳包的數(shù)量,得到參考超時時間;
S130、根據(jù)以下公式計算所述參考超時時間和前一個監(jiān)控周期的超時時間之間的差異值:
a=(Q-P)/P;
其中,a為所述差異值;
Q為所述參考超時時間;
P為前一個監(jiān)控周期的超時時間;
當(dāng)差異值a位于預(yù)定區(qū)間(a1,a2)內(nèi)時,將前一個監(jiān)控周期的超時時間設(shè)定為本次監(jiān)控周期的監(jiān)控時間,當(dāng)差異值a位于所述預(yù)定區(qū)間之外時,將所述參考超時時間設(shè)置為本次監(jiān)控周期的超時時間,其中,a1<1,a2>1。
容易理解的是,被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)包括正常和異常兩種狀態(tài)。
在本發(fā)明中,當(dāng)差異值a小于a1時,則表明上一個周期的超時時間明顯大于平均的心跳間隔,當(dāng)差異值a大于a2時,則表明上一周期的超時時間明顯小于平均的心跳間隔。利用明顯大于平均的心跳間隔或者明顯小于平均心跳間隔的時間作為超時時間顯然是不準(zhǔn)確的。因此,可以將平均的心跳間隔調(diào)整為本次監(jiān)控周期的超時時間,從而可以提高判斷的準(zhǔn)確性。
在本發(fā)明中,當(dāng)差異值a不在所述預(yù)定區(qū)間內(nèi)時,說明上一個監(jiān)控周期中,發(fā)生了異常。例如,當(dāng)差異值a小于a1或者大于a2時,表明上一個監(jiān)控周期中超時時間設(shè)置不合理,設(shè)置的過大或過小。
當(dāng)a是所述預(yù)定區(qū)間(a1,a2)內(nèi)的數(shù)值時,表明上一個監(jiān)控周期的超時時間與上一個監(jiān)控周期的平均心跳間隔相差不多,也就是說,上一個監(jiān)控周期的超時時間是準(zhǔn)確的,因此,可以利用上一個監(jiān)控周期的超時時間作為本次監(jiān)控周期的超時時間。
在本發(fā)明中,對a1和a2的具體數(shù)值并沒有特殊的限制。例如,a1可以為0.8,a2可以為1.2。
在本發(fā)明所提供的方法中,本次監(jiān)控周期的錯誤時間是由上一個監(jiān)控周期中心跳包之間的時間間隔、以及上一個監(jiān)控周期的錯誤時間所決定的。
在本發(fā)明所提供的方法中,充分考慮了網(wǎng)絡(luò)狀況對心跳包接收時間的影響,并根據(jù)該影響調(diào)節(jié)錯誤時間,可以使判斷結(jié)果更加準(zhǔn)確。
在本發(fā)明中,對所述預(yù)設(shè)超時時間并沒有特殊的限定。例如,作為一種優(yōu)選實(shí)施方式,可以選取相鄰兩個心跳包之間的理論間隔時間的100倍作為預(yù)設(shè)超時時間。
作為一種具體實(shí)施方式,相鄰兩個心跳包之間的理論間隔時間為3秒,那么所述預(yù)設(shè)超時時間則為300秒,也就是5分鐘。
在本發(fā)明中,對如何執(zhí)行步驟S300并沒有特殊的限制。例如,可以直接判斷相鄰兩個心跳包之間的間隔時間是否超過本次監(jiān)控周期的超時時間。如果存在超過本次監(jiān)控周期的超時時間的間隔時間,則判定被監(jiān)控節(jié)點(diǎn)工作狀態(tài)異常。如果不存在超過本次監(jiān)控周期的超時時間的時間間隔,則判定在本次監(jiān)控周期中,被監(jiān)控節(jié)點(diǎn)工作正常。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,在本次監(jiān)控周期開始之前,已經(jīng)按照步驟S100確定好了本次監(jiān)控周期的超時時間。
實(shí)施例2
本實(shí)施例提供一種種確定分布式集群系統(tǒng)中被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)的方法,具體,如圖3所示,所述方法包括:
S100、利用實(shí)施例1中所提供的方法確定本次監(jiān)控周期的超時時間;
S200、將接收到心跳包的時間記錄在心跳包監(jiān)控表中,具體地,如圖1所示,所述步驟S200包括:
S210、每接收到一個心跳包在所述心跳包監(jiān)控表中增加一行關(guān)于接收到的心跳包的記錄,其中,關(guān)于接收到的心跳包的記錄包括接收到所述心跳包的時間以及接收到的心跳包的時間與接收到上一個心跳包的時間之間的時間間隔;
S220、判斷所述心跳包監(jiān)控表的行數(shù)是否超過預(yù)定行數(shù);
S230、當(dāng)所述心跳包監(jiān)控表的行數(shù)超過預(yù)定行數(shù)時,刪除本心跳包監(jiān)控表中最早接收到的心跳包的記錄,并繼續(xù)執(zhí)行步驟S210。需要解釋的是,刪除了本心跳包監(jiān)控表中最早接收到的心跳包的記錄之后,所述心跳包監(jiān)控表中存在空閑的行,可以用于記錄隨后接收到的心跳包的記錄;
S300、根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常。
優(yōu)選地,當(dāng)所述心跳包監(jiān)控表的行數(shù)超過預(yù)定行數(shù)時,直接執(zhí)行所述步驟S210。
本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解的是,雖然步驟S200是一個循環(huán),但是,每記錄完一次關(guān)于心跳包的記錄,都要執(zhí)行步驟S300。
在本實(shí)施例所提供的方法中,當(dāng)接收到的心跳包的數(shù)量超過心跳包監(jiān)控表所能容納的最多值時,則把最早接收到的心跳包的記錄刪除,由此可知,利用本發(fā)明所提供的方法可以降低存儲心跳包記錄所需要的空間。
在本實(shí)施例所提供的方法中,對所述預(yù)定行數(shù)并沒有特殊的限制,例如,在本發(fā)明中,對一個心跳包監(jiān)控表的最大行數(shù)并沒有特殊的限制。例如,可以利用利用一下公式來確定心跳包監(jiān)控表的最大行數(shù):
p=M*1.2。
其中,p為心跳包監(jiān)控表的最大行數(shù);
M為預(yù)設(shè)超時時間與相鄰兩個心跳包之間的理論間隔時間之商。也就是說,心跳包監(jiān)控表的行數(shù)可以超過M的20%,從而可以使得監(jiān)控結(jié)果更加準(zhǔn)確。
因此,當(dāng)預(yù)設(shè)超時時間為300秒、相鄰兩個心跳包之間的理論間隔時間為3秒時,心跳包監(jiān)控表的最大行數(shù)p為120行。當(dāng)然,p并不限于此,例如,p還可以為1.5M等等,這些可以根據(jù)具體的應(yīng)用場合來確定。
相應(yīng)地,在所述步驟S300中,根據(jù)所述心跳包監(jiān)控表中記錄關(guān)于接收到的心跳包的記錄判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài),從而降低執(zhí)行本發(fā)明所提供個所述方法的工作量。
實(shí)施例3
作為本發(fā)明的一種優(yōu)選實(shí)施方式,為了及時地判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)、并降低監(jiān)控成本,優(yōu)選地,每個所述監(jiān)控周期包括多個觀察點(diǎn),任意相鄰兩個觀察點(diǎn)之間的時間間隔相同。
例如,在一個監(jiān)控周期可以為5分鐘的實(shí)施例中,可以在一個監(jiān)控周期中設(shè)置5個觀察點(diǎn),相當(dāng)于每隔一分鐘對被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)進(jìn)行一次判斷。相應(yīng)地,本實(shí)施例所提供的方法包括以下步驟:
S100、利用實(shí)施例1中描述的步驟S100確定本次監(jiān)控周期的超時時間;
S200、利用實(shí)施例2中描述的步驟S200將接收到心跳包的時間記錄在心跳包監(jiān)控表中;
S300、根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常,包括:
按照時間順序依次在各個觀察點(diǎn)處進(jìn)行的:
S310、判斷截至本觀察點(diǎn)時,超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例;
S320、當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例超過所述預(yù)定比例時,判定所述被監(jiān)控節(jié)點(diǎn)異常。
在步驟S310中,當(dāng)前心跳包監(jiān)控表中所有所述間隔時間的數(shù)量與當(dāng)前心跳包監(jiān)控表中記錄的所有心跳包記錄的數(shù)量相同。當(dāng)所述預(yù)定比例滿足步驟S320中所限定的條件時,表面異常的心跳包數(shù)量較多,因此,可以直接判定所述被監(jiān)控節(jié)點(diǎn)異常。
表1中所示的是心跳包監(jiān)控表的一種示例性實(shí)施方式。
表1
在表1中,Tn下方所示的節(jié)點(diǎn)則為監(jiān)控節(jié)點(diǎn)。在本發(fā)明所提供的方法中,還需要判斷監(jiān)控節(jié)點(diǎn)與上一個心跳包之間的時間間隔。
每接收到一個心跳包,即在所述心跳包監(jiān)控表中增加一行,如表2所示。
通過表2中可以看出存在一個心跳間隔超過的預(yù)設(shè)的超時時間。
當(dāng)然,也存在相鄰兩個心跳包之間的時間間隔不小于預(yù)設(shè)的超時時間的情況。如表3所示。
表3
在本發(fā)明中,對所述預(yù)定比例的具體值并沒有特殊的限定。例如,所述預(yù)定比例可以為1/2。也就是說,當(dāng)截止到本次觀察點(diǎn),超過本次觀察點(diǎn)所處的監(jiān)控周期的超時時間的時間間隔的數(shù)量占到本次觀察點(diǎn)之前所有時間間隔的數(shù)量的1/2以上時,則可直接判定在所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)異常。
在本申請中,當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在所有所述間隔時間中所占的比例未超過所述預(yù)定比例(例如,小于或1/2時)時,并不代表所述被監(jiān)控節(jié)點(diǎn)在本次監(jiān)控周期中是正常的。
實(shí)施例4
為了提高監(jiān)控的準(zhǔn)確程度,本發(fā)明還提供一種優(yōu)選的實(shí)施例,具體地,如圖4所示,該實(shí)施例所提供的方法包括以下步驟:
S100、利用實(shí)施例1中描述的步驟S100確定本次監(jiān)控周期的超時時間;
S200、利用實(shí)施例2中描述的步驟S200將接收到心跳包的時間記錄在心跳包監(jiān)控表中;
S300、根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常,包括:
按照時間順序依次在各個觀察點(diǎn)處進(jìn)行的:
S310、判斷截至本觀察點(diǎn)時,超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例;
S320、當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例超過所述預(yù)定比例時,判定所述被監(jiān)控節(jié)點(diǎn)異常;
S330、當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在所有所述間隔時間中所占的比例未超過所述預(yù)定比例(例如,小于或1/2時)時,判斷從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間是否逐漸增大;
S340、當(dāng)從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間并非逐漸增大時,則繼續(xù)接收心跳包,并對所述心跳包監(jiān)控表執(zhí)行步驟S310;
S350、當(dāng)從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間逐漸增大時,清除所述心跳包監(jiān)控表中所有的記錄,并在所述心跳監(jiān)控表中增加關(guān)于接收到的心跳包的記錄;
S360、判斷從本觀察點(diǎn)后二分之一所述預(yù)定數(shù)量個時間間隔內(nèi)是否能夠接收到新的心跳包;
S370、當(dāng)從本觀察點(diǎn)后二分之一所述預(yù)定數(shù)量個時間間隔內(nèi)未能接收到新的心跳包時,則判定所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)異常;
S380、從本觀察點(diǎn)后二分之一所述預(yù)定數(shù)量個(即,N/2個)時間間隔內(nèi)接收到新心跳包時,對步驟S350中形成的心跳包監(jiān)控表(即,經(jīng)過清空步驟后形成的心跳包監(jiān)控表),按照時間順序?qū)Ω鱾€觀察點(diǎn)執(zhí)行步驟S310。
本觀察點(diǎn)后二分之一所述預(yù)定數(shù)量個(即,N/2個)時間間隔內(nèi)接收到新心跳包表明并沒有發(fā)生丟包現(xiàn)象,可以根據(jù)新的心跳包監(jiān)控表中的記錄判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常。
容易理解的是,在執(zhí)行所述方法的過程中,時間是往前推移的,因此,步驟S350中形成的心跳包監(jiān)控表不同于之前的心跳包監(jiān)控表。
為了便于描述,用字母N表示所述預(yù)定數(shù)量。容易理解的是,預(yù)定數(shù)量N是一個常量,可以根據(jù)所述方法的具體操作環(huán)境決定,預(yù)定數(shù)量N并不會隨著監(jiān)控時間的變化而變化。例如,預(yù)定數(shù)量N可以為所述心跳包監(jiān)控表最大行數(shù)的一半。當(dāng)所述心跳包監(jiān)控表最大行數(shù)為120行時,N為60。當(dāng)本觀察點(diǎn)后N/2個時間間隔內(nèi)未能接收到新的心跳包,則表明可能發(fā)生了丟包現(xiàn)象。丟包也是被監(jiān)控節(jié)點(diǎn)異常的一種表現(xiàn)方式。
實(shí)施例5
作為發(fā)明的第二個方面,提供一種監(jiān)控節(jié)點(diǎn),該監(jiān)控節(jié)點(diǎn)用于執(zhí)行本發(fā)明所提供的上述方法,所述監(jiān)控節(jié)點(diǎn)用于接收被監(jiān)控節(jié)點(diǎn)發(fā)送的心跳包,其中,如圖5所示,所述監(jiān)控節(jié)點(diǎn)包括:
超時時間確定模塊100,該超時時間確定模塊100用于確定本次監(jiān)控周期的超時時間;
狀態(tài)判斷模塊300,該狀態(tài)判斷模塊300用于根據(jù)本次監(jiān)控周期的超時時間確定本次監(jiān)控周期中所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常;其中,所述超時時間確定模塊包括:
預(yù)設(shè)超時時間設(shè)定單元110,該預(yù)設(shè)超時時間設(shè)定單元110用于將預(yù)設(shè)超時時間作為第一個監(jiān)控周期的超時時間;
平均值計算單元120,該平均值計算單元120用于計算前一個監(jiān)控周期中所有的相鄰兩個心跳包之間的時間間隔的平均值;
參考時間計算單元130,該參考時間計算單元130用于利用所述平均值乘以前一個監(jiān)控周期中接收到所述心跳包的數(shù)量,得到參考超時時間;
差異值計算單元140,該差異值計算單元140用于根據(jù)以下公式計算所述參考超時時間和前一個監(jiān)控周期的超時時間之間的差異值:
a=(Q-P)/P;
其中,a為所述差異值;
Q為所述參考超時時間;
P為前一個監(jiān)控周期的超時時間;
超時時間選擇單元150,該超時時間選擇單元150用于在當(dāng)差異值a位于預(yù)定區(qū)間(a1,a2)內(nèi)時,將前一個監(jiān)控周期的超時時間設(shè)定為本次監(jiān)控周期的監(jiān)控時間,并且,所述超時時間選擇單元還用于在當(dāng)差異值a位于所述預(yù)定區(qū)間之外時,將所述參考超時時間設(shè)置為本次監(jiān)控周期的超時時間,其中,a1<1,a2>1。
容易理解的是,超時時間確定模塊100用于執(zhí)行步驟S100,狀態(tài)判斷模塊用于執(zhí)行步驟S300。預(yù)設(shè)超時時間設(shè)定單元110用于在第一個監(jiān)控周期執(zhí)行步驟S100,平均值計算單元120用于執(zhí)行步驟S110,參考時間計算單元130用于執(zhí)行步驟S120,差異值計算單元用于執(zhí)行步驟S130,超時時間選擇單元150用于執(zhí)行步驟S140。
優(yōu)選地,所述監(jiān)控節(jié)點(diǎn)還包括心跳包監(jiān)控表生成模塊200,該心跳包監(jiān)控表生成模塊200用于生成心跳包監(jiān)控表,并且所述心跳包監(jiān)控表生成模塊包括:
記錄單元210,該記錄單元210用于每接收到一個心跳包在所述心跳包監(jiān)控表中增加一行關(guān)于接收到的心跳包的記錄,其中,關(guān)于接收到的心跳包的記錄包括接收到所述心跳包的時間以及接收到的心跳包的時間與接收到上一個心跳包的時間之間的時間間隔;
行數(shù)判斷單元220,該行數(shù)判斷單元220用于判斷所述心跳包監(jiān)控表中的記錄是否超過預(yù)定行數(shù);和,
刪除單元230,該刪除單元230用于在所述心跳包監(jiān)控表的行數(shù)超過預(yù)定行數(shù)時,刪除關(guān)于本心跳包監(jiān)控表中最早接收到的心跳包的記錄。
狀態(tài)判斷模塊300用于根據(jù)所述心跳包監(jiān)控表中記錄關(guān)于接收到的心跳包的記錄判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)。
優(yōu)選地,每個所述監(jiān)控周期包括多個觀察點(diǎn),任意相鄰兩個觀察點(diǎn)之間的時間間隔相同,狀態(tài)判斷模塊300包括:
錯誤比例確定單元310,該錯誤比例確定單元310用于依次在各個觀察點(diǎn)處判斷超過本觀察點(diǎn)所處的監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例是否超過預(yù)定比例;
異常判斷單元320,該異常判斷單元320用于在當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例超過所述預(yù)定比例時,判定所述被監(jiān)控節(jié)點(diǎn)異常。
優(yōu)選地,所述狀態(tài)判斷模塊300還包括:
初始錯誤判斷單元330,該初始錯誤判斷單元用于當(dāng)超過本次監(jiān)控周期的超時時間的間隔時間的數(shù)量在當(dāng)前心跳包監(jiān)控表中所有所述間隔時間中所占的比例未超過所述預(yù)定比例時,判斷從本觀察點(diǎn)往前數(shù)連續(xù)預(yù)定數(shù)量個間隔時間是否逐漸增大,并生成判斷結(jié)果,且初始錯誤判斷單元330還能夠?qū)⑺雠袛嘟Y(jié)果發(fā)送至所述錯誤比例確定單元310,該錯誤比例確定單元310還用于在接收到所述初始錯誤判斷單元發(fā)出的“是”的判定結(jié)果時開始運(yùn)行;
清空單元340,初始錯誤判斷單元330還用于將所述判定結(jié)果發(fā)送至清空單元340,該清空單元用340于在接收到初始錯誤判斷單元330發(fā)送的“否”的判定結(jié)果時,清空所述心跳包監(jiān)控表中所有的記錄;
計時單元350,該計時單元350用于判斷從本觀察點(diǎn)后與二分之一所述預(yù)定數(shù)量個時間間隔相同的時間段內(nèi)是否能夠接收到新的心跳包,并將判斷結(jié)果發(fā)送至異常判斷單元320。
異常判斷單元320還用于當(dāng)計時單元350生成“是”的判定結(jié)果時,生成判定所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)異常的判定結(jié)果;異常判斷單元350還用于當(dāng)所述計時單元生成“否”的判定結(jié)果時,根據(jù)經(jīng)過清空后形成的心跳包監(jiān)控表判斷所述被監(jiān)控節(jié)點(diǎn)的工作狀態(tài)是否正常。
作為本發(fā)明的另一個方面,提供一種集群系統(tǒng),所述集群系統(tǒng)包括監(jiān)控節(jié)點(diǎn)和至少一個被監(jiān)控節(jié)點(diǎn),其中,所述監(jiān)控節(jié)點(diǎn)為本發(fā)明所提供的上述監(jiān)控節(jié)點(diǎn),所述被監(jiān)控節(jié)點(diǎn)向所述監(jiān)控節(jié)點(diǎn)發(fā)送心跳包。
作為本發(fā)明的一種優(yōu)選實(shí)施方式,所述集群系統(tǒng)為分布式集群系統(tǒng)。
作為本發(fā)明的一種優(yōu)選實(shí)施方式,所述監(jiān)控節(jié)點(diǎn)可以為中心節(jié)點(diǎn)。
可以理解的是,以上實(shí)施方式僅僅是為了說明本發(fā)明的原理而采用的示例性實(shí)施方式,然而本發(fā)明并不局限于此。對于本領(lǐng)域內(nèi)的普通技術(shù)人員而言,在不脫離本發(fā)明的精神和實(shí)質(zhì)的情況下,可以做出各種變型和改進(jìn),這些變型和改進(jìn)也視為本發(fā)明的保護(hù)范圍。