本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,尤其涉及一種超時監(jiān)控方法及裝置。
背景技術(shù):
在互聯(lián)網(wǎng)中,一般是基于互聯(lián)網(wǎng)協(xié)議發(fā)送數(shù)據(jù)請求,以請求獲取數(shù)據(jù)信息。然而當(dāng)前的網(wǎng)絡(luò)環(huán)境非常復(fù)雜,并不是每一次數(shù)據(jù)請求都能及時地獲取到相應(yīng)的數(shù)據(jù)信息。相較于同步請求,異步請求是發(fā)送方發(fā)出數(shù)據(jù)后,不等接收方發(fā)回響應(yīng),直接發(fā)送下個數(shù)據(jù)包的通訊方式。在交易系統(tǒng)中,對于異步請求,發(fā)出請求后,需要對收到對方應(yīng)答的返回時間進行監(jiān)控,超過一定時間即認(rèn)為該請求的應(yīng)答超時無效。
常見的超時監(jiān)控方式是發(fā)出請求后,將請求數(shù)據(jù)及相關(guān)時間戳記錄在數(shù)據(jù)庫內(nèi),對每一個發(fā)出的請求進行監(jiān)控,當(dāng)超出規(guī)定的時間間隔仍未收到對方的反饋,即當(dāng)該請求的發(fā)出時間加上規(guī)定的時間間隔小于當(dāng)前時間,則認(rèn)為該請求的應(yīng)答超時。這種實現(xiàn)方法將所有請求數(shù)據(jù)均存儲到數(shù)據(jù)庫中,且需要對所有請求挨個判斷是否超時,數(shù)據(jù)庫需要提供大量的資源進行存儲和計算,壓力較大,尤其在高并發(fā)的大量數(shù)據(jù)的情況下,對數(shù)據(jù)庫的資源消耗非常嚴(yán)重。
技術(shù)實現(xiàn)要素:
本發(fā)明實施例提供一種超時監(jiān)控方法及裝置,用以解決現(xiàn)有技術(shù)中對請求進行超時監(jiān)控需要消耗較多數(shù)據(jù)庫資源的問題。
本發(fā)明實施例提供的超時監(jiān)控方法包括:
服務(wù)器確定請求消息的關(guān)鍵信息,所述關(guān)鍵信息包括請求消息的發(fā)送時間;
所述服務(wù)器將所述關(guān)鍵信息存儲至一級緩存;
所述服務(wù)器按照設(shè)定頻率掃描所述一級緩存,若所述一級緩存中包含第一請求消息,則將所述第一請求消息的關(guān)鍵信息存入二級緩存,所述第一請求消息為未收到應(yīng)答消息的請求消息;
所述服務(wù)器掃描所述二級緩存,通過消息日志確定所述二級緩存中的第二請求消息是否收到應(yīng)答消息,若否,則確定所述第二請求消息超時,其中,所述第二請求消息為發(fā)送時間與當(dāng)前時間之間的差值大于超時閾值的請求消息。
可選的,還包括:
所述服務(wù)器若接收到應(yīng)答消息,則在所述一級緩存中查找所述應(yīng)答消息對應(yīng)的請求消息;
若查找到所述應(yīng)答消息對應(yīng)的請求消息,則將所述應(yīng)答消息對應(yīng)的請求消息的關(guān)鍵信息標(biāo)記為已應(yīng)答。
可選的,所述服務(wù)器將所述關(guān)鍵信息存儲至一級緩存,包括:
所述服務(wù)器確定將所述請求消息存儲至一級緩存的寫入時間;
所述服務(wù)器根據(jù)請求消息的寫入時間對N取余數(shù)的結(jié)果,將所述請求消息的關(guān)鍵信息存入對應(yīng)的內(nèi)存區(qū)域中,所述一級緩存的內(nèi)存被預(yù)先劃分為N個內(nèi)存區(qū)域,其中,每個內(nèi)存區(qū)域的大小為單位時間內(nèi)預(yù)估的交易筆數(shù)乘以關(guān)鍵信息的數(shù)據(jù)段大小。
可選的,所述服務(wù)器按照設(shè)定頻率掃描所述一級緩存,包括:
所述服務(wù)器創(chuàng)建N個監(jiān)控進程,每個監(jiān)控進程對應(yīng)一個內(nèi)存區(qū)域,每個監(jiān)控進程按照所述設(shè)定頻率掃描對應(yīng)的內(nèi)存區(qū)域。
可選的,所述服務(wù)器掃描所述二級緩存,通過消息日志確定所述二級緩存中的第二請求消息是否收到應(yīng)答消息,包括:
所述二級緩存采用鏈表方式,按照第一請求消息發(fā)送時間的先后從表頭依次將第一請求消息的關(guān)鍵信息存入所述鏈表;
所述服務(wù)器從表頭依次查詢所述鏈表中第一請求消息的關(guān)鍵信息,判斷所述第一請求消息的發(fā)送時間與當(dāng)前時間之間的差值是否大于所述超時閾值;
若是,則將所述第一請求消息作為第二請求消息,根據(jù)所述第二請求消息的消息日志確定所述第二請求消息是否收到應(yīng)答消息;若否,則對所述第二請求消息進行超時處理。
一種超時監(jiān)控裝置,包括:
寫入模塊,用于確定請求消息的關(guān)鍵信息,所述關(guān)鍵信息包括請求消息的發(fā)送時間;
所述寫入模塊,還用于將所述關(guān)鍵信息存儲至一級緩存;
第一監(jiān)控模塊,用于按照設(shè)定頻率掃描所述一級緩存,若所述一級緩存中包含第一請求消息,則將所述第一請求消息的關(guān)鍵信息存入二級緩存,所述第一請求消息為未收到應(yīng)答消息的請求消息;
第二監(jiān)控模塊,用于掃描所述二級緩存,通過消息日志確定所述二級緩存中的第二請求消息是否收到應(yīng)答消息,若否,則確定所述第二請求消息超時,其中,所述第二請求消息為發(fā)送時間與當(dāng)前時間之間的差值大于超時閾值的請求消息。
可選的,所述寫入模塊,還用于:
若接收到應(yīng)答消息,則在所述一級緩存中查找所述應(yīng)答消息對應(yīng)的請求消息;
若查找到所述應(yīng)答消息對應(yīng)的請求消息,則將所述應(yīng)答消息對應(yīng)的請求消息的關(guān)鍵信息標(biāo)記為已應(yīng)答。
可選的,所述寫入模塊,具體用于:
確定將所述請求消息存儲至一級緩存的寫入時間;
根據(jù)請求消息的寫入時間對N取余數(shù)的結(jié)果,將所述請求消息的關(guān)鍵信息存入對應(yīng)的內(nèi)存區(qū)域中,所述一級緩存的內(nèi)存被預(yù)先劃分為N個內(nèi)存區(qū)域,其中,每個內(nèi)存區(qū)域的大小為單位時間內(nèi)預(yù)估的交易筆數(shù)乘以關(guān)鍵信息的數(shù)據(jù)段大小。
可選的,所述第一監(jiān)控模塊,具體用于
所述服務(wù)器創(chuàng)建N個監(jiān)控進程,每個監(jiān)控進程對應(yīng)一個內(nèi)存區(qū)域,每個監(jiān)控進程按照所述設(shè)定頻率掃描對應(yīng)的內(nèi)存區(qū)域。
可選的,所述第二監(jiān)控模塊,具體用于:
所述二級緩存采用鏈表方式,按照第一請求消息發(fā)送時間的先后從表頭依次將第一請求消息的關(guān)鍵信息存入所述鏈表;
從表頭依次查詢所述鏈表中第一請求消息的關(guān)鍵信息,判斷所述第一請求消息的發(fā)送時間與當(dāng)前時間之間的差值是否大于所述超時閾值;
若是,則將所述第一請求消息作為第二請求消息,根據(jù)所述第二請求消息的消息日志確定所述第二請求消息是否收到應(yīng)答消息;若否,則對所述第二請求消息進行超時處理。
本發(fā)明實施例中,服務(wù)器發(fā)出請求消息后,將請求消息的關(guān)鍵信息存儲至一級緩存,請求消息的關(guān)鍵信息中包括該請求消息的發(fā)送時間。服務(wù)器按照設(shè)定頻率掃描一級緩存,根據(jù)關(guān)鍵信息確定一級緩存中的請求消息是否收到應(yīng)答消息,將未收到應(yīng)答消息的請求消息作為第一請求消息,并將第一請求消息的關(guān)鍵信息存入二級緩存。由于大多數(shù)請求消息會在很短的時間內(nèi)反饋應(yīng)答消息,因此,只需將一級緩存中很少數(shù)量的請求消息作為第一請求消息,存入二級緩存。此外,服務(wù)器掃描二級緩存,根據(jù)二級緩存中的關(guān)鍵信息,確定請求消息的發(fā)送時間與當(dāng)前時間之間的差值,若該差值大于超時閾值,則將請求消息作為第二請求消息,查找該第二請求消息的消息日志,根據(jù)消息日志確定第二請求消息是否收到應(yīng)答消息。如果第二請求消息仍未收到應(yīng)答消息,則確定第二請求消息超時。本發(fā)明實施例將請求消息的關(guān)鍵信息存入緩存中,通過緩存監(jiān)控請求消息的應(yīng)答情況,無需數(shù)據(jù)庫進行存儲和計算,緩解了數(shù)據(jù)庫資源的消耗,減輕了數(shù)據(jù)庫的壓力。
附圖說明
為了更清楚地說明本發(fā)明實施例中的技術(shù)方案,下面將對實施例描述中所需要使用的附圖作簡要介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域的普通技術(shù)人員來講,在不付出創(chuàng)造性勞動性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例中一種超時監(jiān)控方法的流程圖;
圖2為本發(fā)明實施例適用的一種系統(tǒng)架構(gòu);
圖3為本發(fā)明的具體實施例中超時監(jiān)控方法的流程圖;
圖4為本發(fā)明實施例中一種超時監(jiān)控裝置的結(jié)構(gòu)示意圖。
具體實施方式
為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面將結(jié)合附圖對本發(fā)明作進一步地詳細(xì)描述,顯然,所描述的實施例僅僅是本發(fā)明一部份實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其它實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供了一種超時監(jiān)控方法,其流程如圖1所示,方法可以包括如下步驟:
步驟101、服務(wù)器確定請求消息的關(guān)鍵信息,所述關(guān)鍵信息包括請求消息的發(fā)送時間。
上述步驟中,請求消息的關(guān)鍵信息包括請求消息的發(fā)送時間,服務(wù)器將請求消息的發(fā)送時間存儲在緩存中,可以根據(jù)該發(fā)送時間計算未收到應(yīng)答消息的請求消息是否已超過應(yīng)答時限。另外,關(guān)鍵信息中還包括該請求消息的主鍵,在分布式緩存中,可以根據(jù)請求消息的主鍵從服務(wù)器中快速查詢到該請求消息的相關(guān)信息。
步驟102、所述服務(wù)器將所述關(guān)鍵信息存儲至一級緩存。
步驟103、所述服務(wù)器按照設(shè)定頻率掃描所述一級緩存,若所述一級緩存中包含第一請求消息,則將所述第一請求消息的關(guān)鍵信息存入二級緩存,所述第一請求消息為未收到應(yīng)答消息的請求消息。
步驟104、所述服務(wù)器掃描所述二級緩存,通過消息日志確定所述二級緩存中的第二請求消息是否收到應(yīng)答消息,若否,則確定所述第二請求消息超時,其中,所述第二請求消息為發(fā)送時間與當(dāng)前時間之間的差值大于超時閾值的請求消息。
本發(fā)明實施例中,服務(wù)器發(fā)出請求消息后,將請求消息的關(guān)鍵信息存儲至一級緩存,請求消息的關(guān)鍵信息中包括該請求消息的發(fā)送時間。服務(wù)器按照設(shè)定頻率掃描一級緩存,根據(jù)關(guān)鍵信息確定一級緩存中的請求消息是否收到應(yīng)答消息,將未收到應(yīng)答消息的請求消息作為第一請求消息,并將第一請求消息的關(guān)鍵信息存入二級緩存。由于大多數(shù)請求消息會在很短的時間內(nèi)反饋應(yīng)答消息,因此,只需將一級緩存中很少數(shù)量的請求消息作為第一請求消息,存入二級緩存。此外,服務(wù)器掃描二級緩存,根據(jù)二級緩存中的關(guān)鍵信息,確定請求消息的發(fā)送時間與當(dāng)前時間之間的差值,若該差值大于超時閾值,則將請求消息作為第二請求消息,查找該第二請求消息的消息日志,根據(jù)消息日志確定第二請求消息是否收到應(yīng)答消息。如果第二請求消息仍未收到應(yīng)答消息,則確定第二請求消息超時。本發(fā)明實施例將請求消息的關(guān)鍵信息存入緩存中,通過緩存監(jiān)控請求消息的應(yīng)答情況,無需數(shù)據(jù)庫進行存儲和計算,緩解了數(shù)據(jù)庫資源的消耗,減輕了數(shù)據(jù)庫的壓力。
本發(fā)明實施例中,為了緩解數(shù)據(jù)庫的壓力,服務(wù)器設(shè)立了兩級緩存,其中,一級緩存由于需要存儲所有發(fā)出的請求消息的關(guān)鍵信息,相較于二級緩存,需要較大的容量,一般設(shè)計為共享內(nèi)存的形式。此外,為了提高效率,若業(yè)務(wù)量較小,也可以根據(jù)交易量和業(yè)務(wù)需要,設(shè)計為進程內(nèi)內(nèi)存數(shù)據(jù)或者內(nèi)存映射的形式,內(nèi)存映射可以提供斷電恢復(fù)或短暫停機恢復(fù)的能力,在內(nèi)存操作的同時可以由操作系統(tǒng)寫入文件。因此,二級緩存也可為共享內(nèi)存,而業(yè)務(wù)量較小的情況下,可以將第二請求消息直接在進程內(nèi)內(nèi)存空間存放,這樣可以進一步提高效率。
為了便于監(jiān)管,一級緩存被劃分為多個內(nèi)存區(qū)域,上述步驟102包括:
所述服務(wù)器確定將所述請求消息存儲至一級緩存的寫入時間;
所述服務(wù)器根據(jù)請求消息的寫入時間對N取余數(shù)的結(jié)果,將所述請求消息的關(guān)鍵信息存入對應(yīng)的內(nèi)存區(qū)域中,所述一級緩存的內(nèi)存被預(yù)先劃分為N個內(nèi)存區(qū)域,其中,每個內(nèi)存區(qū)域的大小為單位時間內(nèi)預(yù)估的交易筆數(shù)乘以關(guān)鍵信息的數(shù)據(jù)段大小。
具體來說,一級緩存的內(nèi)存預(yù)先被劃分為N個內(nèi)存區(qū)域,為了便于計算和歸類,一般根據(jù)超時閾值確定N的取值,由于超時閾值一般為幾十秒,相應(yīng)的,N的取值也可為幾十,本發(fā)明實施例中,將N的取值設(shè)定為60,即一級緩存的內(nèi)存劃分為60個內(nèi)存區(qū)域。為了便于描述,將這60個內(nèi)存區(qū)域編號為0~59。
請求消息發(fā)出后,服務(wù)器將請求消息的關(guān)鍵信息加入隊列中,等待寫入一級緩存。將關(guān)鍵信息存入一級緩存時,根據(jù)當(dāng)前的寫入時間,將寫入時間按對N去余數(shù),并根據(jù)計算結(jié)果將關(guān)鍵信息存入對應(yīng)的內(nèi)存區(qū)域內(nèi)。例如,本發(fā)明實施例中N的取值為60,內(nèi)存區(qū)域的編號為0~59。若將關(guān)鍵信息存入一級緩存的當(dāng)前的寫入時間是13時48分34秒,將該寫入時間對60秒取余數(shù),計算結(jié)果為34,因此,將該請求消息的關(guān)鍵信息存入編號為34的內(nèi)存區(qū)域中。
為了保證內(nèi)存區(qū)域的容量,并兼顧服務(wù)器的工作效率,本發(fā)明實施例中,服務(wù)器對一級緩存的內(nèi)存區(qū)域進行初始化,一個內(nèi)存區(qū)域的初始化大小為單位時間內(nèi)預(yù)估的交易筆數(shù)乘以關(guān)鍵信息的數(shù)據(jù)段大小,由于每個請求消息的關(guān)鍵信息的數(shù)據(jù)段大小相同,因此,同一時間段內(nèi),每個內(nèi)存區(qū)域的大小相同。對于不同時間段,單位時間的交易筆數(shù)越多,內(nèi)存區(qū)域初始化越大。由于內(nèi)存區(qū)域的大小在初始化中決定,且按照預(yù)估的單位時間交易筆數(shù)峰值確定,這樣能夠確保有足夠的存儲空間存入關(guān)鍵信息。此外,對于不同時間段,可通過調(diào)整參數(shù)進而重新申請并分配足夠大小的內(nèi)存區(qū)域。
服務(wù)器將關(guān)鍵信息存入內(nèi)存區(qū)域的同時,也以一定頻率掃描每個內(nèi)存區(qū)域。為了保證效率,便于管理,服務(wù)器針對每個內(nèi)存區(qū)域分別掃描。則上述步驟103,所述服務(wù)器按照設(shè)定頻率掃描所述一級緩存,包括:
所述服務(wù)器創(chuàng)建N個監(jiān)控進程,每個監(jiān)控進程對應(yīng)一個內(nèi)存區(qū)域,每個監(jiān)控進程按照所述設(shè)定頻率掃描對應(yīng)的內(nèi)存區(qū)域。
也就是說,對應(yīng)于N個內(nèi)存區(qū)域,本發(fā)明實施例中的服務(wù)器設(shè)立N個監(jiān)控進程,每個監(jiān)控進程對應(yīng)一個內(nèi)存區(qū)域,每個監(jiān)控進程負(fù)責(zé)從對應(yīng)的內(nèi)存區(qū)域的起始點開始,掃描內(nèi)存區(qū)域。根據(jù)大數(shù)據(jù)統(tǒng)計,一般來說,95%以上的請求消息在5秒內(nèi)都會收到應(yīng)答消息,其中,又有近99%的請求消息是在2秒內(nèi)收到應(yīng)答消息,基于此,監(jiān)控進程對內(nèi)存區(qū)域的掃描間隔一般設(shè)置為1至2秒,即每隔2秒監(jiān)控進程掃描一次相應(yīng)的內(nèi)存區(qū)域。服務(wù)器將收到的請求消息從內(nèi)存區(qū)域的起始點存入對應(yīng)的內(nèi)存區(qū)域。監(jiān)控進程從內(nèi)存區(qū)域的起始點開始掃描該內(nèi)存區(qū)域,監(jiān)控進程可以在每次掃描的起始處設(shè)置一個結(jié)束標(biāo)記,這樣,監(jiān)控進程直至掃描到內(nèi)存區(qū)域內(nèi)的第一個結(jié)束標(biāo)記即結(jié)束本次掃描,或者也可以監(jiān)控進程每次掃描均掃描到對應(yīng)的內(nèi)存區(qū)域的終點。
服務(wù)器將請求消息的關(guān)鍵信息存入一級緩存后,若接收到該請求消息的響應(yīng)消息,則修改請求消息的關(guān)鍵信息。本發(fā)明實施例還包括:
所述服務(wù)器若接收到應(yīng)答消息,則在所述一級緩存中查找所述應(yīng)答消息對應(yīng)的請求消息;
若查找到所述應(yīng)答消息對應(yīng)的請求消息,則將所述應(yīng)答消息對應(yīng)的請求消息的關(guān)鍵信息標(biāo)記為已應(yīng)答。
具體地,在掃描的間隙,若服務(wù)器接收到響應(yīng)消息,則在一級緩存中查找對應(yīng)的請求消息,若查找到對應(yīng)的請求消息,則將該請求消息的關(guān)鍵信息標(biāo)記為已應(yīng)答。這樣,當(dāng)服務(wù)器掃描到該請求消息的關(guān)鍵信息,確定該請求消息已收到應(yīng)答消息,則不對該請求消息進行其它處理。若該請求消息未收到應(yīng)答消息,即相應(yīng)的關(guān)鍵信息未被標(biāo)記為已應(yīng)答,則服務(wù)器將該請求消息作為第一請求消息,將其關(guān)鍵信息存入二級緩存中,同時刪除一級緩存中該請求消息的關(guān)鍵信息。
針對二級緩存,由于請求消息的關(guān)鍵信息已經(jīng)過一級緩存的監(jiān)控和過濾,二級緩存中存儲的關(guān)鍵信息已小于所有關(guān)鍵信息的總量的5%,因此,二級緩存占的內(nèi)存空間很小,可以采用進程內(nèi)鏈表實現(xiàn)。本發(fā)明實施例中,所述服務(wù)器掃描所述二級緩存,通過消息日志確定所述二級緩存中的第二請求消息是否收到應(yīng)答消息,包括:
所述二級緩存采用鏈表方式,按照第一請求消息發(fā)送時間的先后從表頭依次將第一請求消息的關(guān)鍵信息存入所述鏈表;
所述服務(wù)器從表頭依次查詢所述鏈表中第一請求消息的關(guān)鍵信息,判斷所述第一請求消息的發(fā)送時間與當(dāng)前時間之間的差值是否大于所述超時閾值;
若是,則將所述第一請求消息作為第二請求消息,根據(jù)所述第二請求消息的消息日志確定所述第二請求消息是否收到應(yīng)答消息;若否,則對所述第二請求消息進行超時處理。
本發(fā)明實施例中,按照第一請求消息發(fā)送時間的前后順序,從表頭依次將第一請求消息的關(guān)鍵信息存入二級緩存中,則二級緩存的表頭為發(fā)送最早的第一請求消息,表尾為發(fā)送最晚的第一請求消息。不同于N個監(jiān)控進程對一級緩存進行掃描,本發(fā)明實施例中設(shè)置一個監(jiān)控進程對二級緩存進行掃描,為了方便描述,將對一級緩存進行掃描的N個監(jiān)控進程作為一級監(jiān)控進程,將對二級緩存進行掃描的監(jiān)控進程做為二級監(jiān)控進程。二級監(jiān)控進程循環(huán)掃描二級緩存鏈表,從表頭開始,判定二級緩存鏈表中是否為空,若為空則等待下一次掃描,若不為空,則從第一個請求消息開始,根據(jù)二級緩存中存儲的關(guān)鍵信息,判斷第一請求消息的發(fā)送時間與當(dāng)前時間之間的差值是否大于超時閾值,即判斷第一請求消息是否超時,若否,則二級監(jiān)控進程下移到二級緩存中的第二個請求消息繼續(xù)研判;若是,即第一請求消息的發(fā)送時間與當(dāng)前時間的差值已大于超時閾值,則將該第一請求消息作為第二請求消息,根據(jù)其關(guān)鍵信息查詢相應(yīng)的消息日志,根據(jù)第二請求消息的消息日志確定第二請求消息是否收到應(yīng)答消息,若是,則該第二請求消息已收到應(yīng)答消息,不對其做超時處理;若否,即該第二請求消息仍未收到應(yīng)答消息,則調(diào)用外部超時處理服務(wù)對該第二請求消息進行超時處理。之后,無論該第二請求消息是否收到應(yīng)答消息,二級監(jiān)控進程均下移到二級緩存中的第二個請求消息繼續(xù)研判,直至將二級緩存中的請求消息全部研判。
進一步,本發(fā)明實施例中,還配備異常捕捉裝置,負(fù)責(zé)捕捉在服務(wù)器故障或重新啟動過程中發(fā)出的請求消息,使得服務(wù)器可以重新處理這段時間內(nèi)發(fā)出的請求消息?;蛘咴谌斯じ深A(yù)下,通過該異常捕捉裝置,從數(shù)據(jù)庫內(nèi)捕捉基于指定時間點開始的請求消息,調(diào)用服務(wù)器重新處理。
為了更清楚地理解本發(fā)明,下面以具體的實施例對上述流程進行詳細(xì)描述,該具體的實施例中,包括消息寫入單元、一級緩存、一級監(jiān)控進程、二級緩存和二級監(jiān)控進程,如圖2所示,其中,消息寫入單元負(fù)責(zé)獲取已發(fā)出的請求消息的關(guān)鍵信息,并將關(guān)鍵信息寫入一級緩存中,一級緩存中包括60個內(nèi)存區(qū)域,編號為0~59,一級監(jiān)控進程的數(shù)量也為60個,分別與一級緩存的60個內(nèi)存區(qū)域一一對應(yīng),負(fù)責(zé)分別監(jiān)控一級緩存中對應(yīng)的內(nèi)存區(qū)域,并將未收到應(yīng)答消息的關(guān)鍵信息寫入二級緩存中。二級監(jiān)控負(fù)責(zé)監(jiān)控二級緩存中的關(guān)鍵信息,若超出超時閾值,查閱消息日志表,確定仍未收到應(yīng)答消息的請求消息,并調(diào)用外部超時處理裝置對這些請求消息進行超時處理。
具體實施例的步驟如圖3所示,包括:
步驟301、消息寫入單元獲取請求消息的關(guān)鍵信息,關(guān)鍵信息包括請求消息的發(fā)送時間。
步驟302、消息寫入單元確定將請求消息存儲至一級緩存的寫入時間,根據(jù)寫入時間對60秒取余數(shù)的結(jié)果,將請求消息的關(guān)鍵信息存入對應(yīng)的內(nèi)存區(qū)域中。
步驟303、消息寫入單元接收應(yīng)答消息,在一級緩存中查找該應(yīng)答消息對應(yīng)的請求消息,若查找到,則將該請求消息的關(guān)鍵信息標(biāo)記為已應(yīng)答。
步驟304、一級監(jiān)控進程按照設(shè)定頻率,掃描一級緩存內(nèi)對應(yīng)的內(nèi)存區(qū)域,若發(fā)現(xiàn)沒有已應(yīng)答標(biāo)記的關(guān)鍵信息,則作為第一請求消息,并將第一請求消息的關(guān)鍵信息存入二級緩存中。
步驟305、二級監(jiān)控進程從表頭掃描二級緩存的內(nèi)存區(qū)域,從第一請求消息的關(guān)鍵信息中,確定出發(fā)送時間與當(dāng)前時間之間的差值大于超時閾值的第一請求消息,作為第二請求消息。
步驟306、二級監(jiān)控進程根據(jù)第二請求消息的關(guān)鍵信息查找消息日志,確定第二請求消息仍收到應(yīng)答消息。
步驟307、二級監(jiān)控進程調(diào)用外部裝置對第二請求消息進行超時處理。
需要說明的是,上述步驟中,消息寫入單元、一級監(jiān)控進程和二級監(jiān)控進程執(zhí)行操作的順序并無先后順序,即消息寫入單元將請求消息的關(guān)鍵信息寫入一級緩存的同時,一級監(jiān)控進程也在以設(shè)定頻率掃描一級緩存,并且同時,二級監(jiān)控也在周期性地掃描二級緩存。上述步驟編號僅是為了敘述方便。
基于相同的技術(shù)構(gòu)思,本發(fā)明實施例還提供一種超時監(jiān)控裝置,如圖4所示,包括:
寫入模塊401,用于確定請求消息的關(guān)鍵信息,所述關(guān)鍵信息包括請求消息的發(fā)送時間;
所述寫入模塊401,還用于將所述關(guān)鍵信息存儲至一級緩存;
第一監(jiān)控模塊402,用于按照設(shè)定頻率掃描所述一級緩存,若所述一級緩存中包含第一請求消息,則將所述第一請求消息的關(guān)鍵信息存入二級緩存,所述第一請求消息為未收到應(yīng)答消息的請求消息;
第二監(jiān)控模塊403,用于掃描所述二級緩存,通過消息日志確定所述二級緩存中的第二請求消息是否收到應(yīng)答消息,若否,則確定所述第二請求消息超時,其中,所述第二請求消息為發(fā)送時間與當(dāng)前時間之間的差值大于超時閾值的請求消息。
所述寫入模塊401,還用于:
若接收到應(yīng)答消息,則在所述一級緩存中查找所述應(yīng)答消息對應(yīng)的請求消息;
若查找到所述應(yīng)答消息對應(yīng)的請求消息,則將所述應(yīng)答消息對應(yīng)的請求消息的關(guān)鍵信息標(biāo)記為已應(yīng)答。
所述寫入模塊401,具體用于:
確定將所述請求消息存儲至一級緩存的寫入時間;
根據(jù)請求消息的寫入時間對N取余數(shù)的結(jié)果,將所述請求消息的關(guān)鍵信息存入對應(yīng)的內(nèi)存區(qū)域中,所述一級緩存的內(nèi)存被預(yù)先劃分為N個內(nèi)存區(qū)域,其中,每個內(nèi)存區(qū)域的大小為單位時間內(nèi)預(yù)估的交易筆數(shù)乘以關(guān)鍵信息的數(shù)據(jù)段大小。
所述第一監(jiān)控模塊402,具體用于
所述服務(wù)器創(chuàng)建N個監(jiān)控進程,每個監(jiān)控進程對應(yīng)一個內(nèi)存區(qū)域,每個監(jiān)控進程按照所述設(shè)定頻率掃描對應(yīng)的內(nèi)存區(qū)域。
所述第二監(jiān)控模塊403,具體用于:
所述二級緩存采用鏈表方式,按照第一請求消息發(fā)送時間的先后從表頭依次將第一請求消息的關(guān)鍵信息存入所述鏈表;
從表頭依次查詢所述鏈表中第一請求消息的關(guān)鍵信息,判斷所述第一請求消息的發(fā)送時間與當(dāng)前時間之間的差值是否大于所述超時閾值;
若是,則將所述第一請求消息作為第二請求消息,根據(jù)所述第二請求消息的消息日志確定所述第二請求消息是否收到應(yīng)答消息;若否,則對所述第二請求消息進行超時處理。
本發(fā)明是參照根據(jù)本發(fā)明實施例的方法、設(shè)備(系統(tǒng))、和計算機程序產(chǎn)品的流程圖和/或方框圖來描述的。應(yīng)理解可由計算機程序指令實現(xiàn)流程圖和/或方框圖中的每一流程和/或方框、以及流程圖和/或方框圖中的流程和/或方框的結(jié)合??商峁┻@些計算機程序指令到通用計算機、專用計算機、嵌入式處理機或其他可編程數(shù)據(jù)處理設(shè)備的處理器以產(chǎn)生一個機器,使得通過計算機或其他可編程數(shù)據(jù)處理設(shè)備的處理器執(zhí)行的指令產(chǎn)生用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的裝置。
這些計算機程序指令也可存儲在能引導(dǎo)計算機或其他可編程數(shù)據(jù)處理設(shè)備以特定方式工作的計算機可讀存儲器中,使得存儲在該計算機可讀存儲器中的指令產(chǎn)生包括指令裝置的制造品,該指令裝置實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能。
這些計算機程序指令也可裝載到計算機或其他可編程數(shù)據(jù)處理設(shè)備上,使得在計算機或其他可編程設(shè)備上執(zhí)行一系列操作步驟以產(chǎn)生計算機實現(xiàn)的處理,從而在計算機或其他可編程設(shè)備上執(zhí)行的指令提供用于實現(xiàn)在流程圖一個流程或多個流程和/或方框圖一個方框或多個方框中指定的功能的步驟。
盡管已描述了本發(fā)明的優(yōu)選實施例,但本領(lǐng)域內(nèi)的技術(shù)人員一旦得知了基本創(chuàng)造性概念,則可對這些實施例作出另外的變更和修改。所以,所附權(quán)利要求意欲解釋為包括優(yōu)選實施例以及落入本發(fā)明范圍的所有變更和修改。
顯然,本領(lǐng)域的技術(shù)人員可以對本發(fā)明進行各種改動和變型而不脫離本發(fā)明的精神和范圍。這樣,倘若本發(fā)明的這些修改和變型屬于本發(fā)明權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本發(fā)明也意圖包含這些改動和變型在內(nèi)。