欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種消息通知方法和設(shè)備與流程

文檔序號:12377162閱讀:386來源:國知局
一種消息通知方法和設(shè)備與流程

本申請涉及網(wǎng)絡(luò)技術(shù)領(lǐng)域,特別是涉及一種消息通知方法和設(shè)備。



背景技術(shù):

目前分布式計算服務(wù)模型主要可分為離線計算和實時計算兩種。離線計算主要采用批處理的方式處理數(shù)據(jù),適用于高吞吐,低成本,數(shù)據(jù)處理延遲不敏感的大數(shù)據(jù)處理業(yè)務(wù)。實時計算包括流式計算,準(zhǔn)實時服務(wù)等,是指利用分布式的思想和方法,對海量“流”式數(shù)據(jù)進行實時處理,適用于高并發(fā),低延時的數(shù)據(jù)實時處理業(yè)務(wù)。如開源架構(gòu)storm(一種流數(shù)據(jù)處理架構(gòu))提供的流式計算服務(wù),spark streaming(一種準(zhǔn)實時分布式數(shù)據(jù)處理架構(gòu))提供的準(zhǔn)實時服務(wù)等。不管是哪種計算模型,在分布式的環(huán)境下,數(shù)據(jù)處理引擎部分基本可抽象成DAG(Directed Acyclic Graph,有向無環(huán)圖)的框架來處理數(shù)據(jù)。DAG可以理解為有順序依賴關(guān)系的一些邏輯處理節(jié)點組成的有向無環(huán)圖,數(shù)據(jù)在父節(jié)點處理完成之后才會傳送給子節(jié)點進行處理,直到所有的葉子節(jié)點處理完成,客戶端輸入的數(shù)據(jù)才算被數(shù)據(jù)處理引擎處理完成了。如hadoop(一種能夠?qū)Υ罅繑?shù)據(jù)進行分布式處理的軟件框架)的數(shù)據(jù)倉庫工具Hive也是將用戶提交的sql(Structured Query Language,結(jié)構(gòu)化查詢語言)轉(zhuǎn)換成由MR(Map-Reduce,映射歸約)組成的DAG來處理批量數(shù)據(jù),spark(一種批量數(shù)據(jù)處理架構(gòu))也設(shè)計成是基于RDD(Resilient Distributed Datasets,彈性分布式數(shù)據(jù)集)數(shù)據(jù)單元的算子組成的DAG處理流程,storm的拓?fù)浣Y(jié)構(gòu)topology更加是典型的DAG框架。

上述系統(tǒng)中,可以認(rèn)為數(shù)據(jù)流向大體上都會經(jīng)歷數(shù)據(jù)輸入,數(shù)據(jù)處理,結(jié)果輸出三個階段,其中DAG處理模型就屬于數(shù)據(jù)處理部分。在有些業(yè)務(wù)場景下,當(dāng)數(shù)據(jù)單元被處理完成后,有些用戶希望及時知道這個狀態(tài)以進行下一步流程,這就需要數(shù)據(jù)處理引擎提供消息通知框架或者其他方式如客戶端 API讓用戶能夠及時知曉處理結(jié)果,而消息通知的數(shù)據(jù)粒度,延時性,正確性以及容錯性決定了數(shù)據(jù)處理引擎實現(xiàn)消息通知機制的難度。對于基于DAG架構(gòu)的離線計算,用戶可通過調(diào)用客戶端的API(客戶端的操作系統(tǒng)留給應(yīng)用程序的一個調(diào)用接口)獲取到輸入的一批數(shù)據(jù)是否處理完成的情況,達(dá)到通知用戶的目的,大部分離線計算業(yè)務(wù)對于消息通知的數(shù)據(jù)粒度和及時性要求很低,因此一般不需要嚴(yán)格意義上及時的采用推送PUSH模式的消息通知機制。而對于很多基于DAG架構(gòu)的流式計算業(yè)務(wù),對數(shù)據(jù)通知的粒度和延時性可能會變得很高,甚至數(shù)據(jù)粒度需要縮小到每條數(shù)據(jù),即當(dāng)一條數(shù)據(jù)流入流式計算引擎后,這條數(shù)據(jù)以及由這條數(shù)據(jù)觸發(fā)而產(chǎn)生的所有新數(shù)據(jù)被所有的DAG處理完成后,數(shù)據(jù)處理引擎需要立馬通知用戶,用戶根據(jù)處理結(jié)果及時作出相應(yīng)決策。

在實現(xiàn)本申請的過程中,申請人發(fā)現(xiàn)現(xiàn)有技術(shù)至少存在以下問題:

基于目前的分布式計算系統(tǒng)還沒有出現(xiàn)比較成熟高效的消息通知機制,并且由于某些分布式計算系統(tǒng)框架本身的缺陷使消息通知機制無法實現(xiàn)預(yù)期的效果。



技術(shù)實現(xiàn)要素:

本申請的目的在于提供一種消息通知方法和設(shè)備,通過邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則對接收的信息和將要發(fā)送的信息中的ID進行比較,并將比較結(jié)果發(fā)送給子邏輯節(jié)點中的一個繼續(xù)比較,當(dāng)邏輯節(jié)點在接收到信息后不再產(chǎn)生信息的信息時將最后的攜帶有ID的比較結(jié)果的信息發(fā)送給服務(wù)器,由服務(wù)器根據(jù)預(yù)設(shè)規(guī)則判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,本申請通過比較信息中的ID達(dá)到判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,并達(dá)到通知用戶的目的,這樣的處理方式由系統(tǒng)中的各個邏輯節(jié)點和服務(wù)器共同完成,并且比較的是信息中的ID,不會占用某一設(shè)備過多的資源,從而使消息通知機制能夠達(dá)到比較高的性能。

本申請的技術(shù)方案如下:

一種消息通知方法,所述方法包括:

所述邏輯節(jié)點為將要發(fā)送的每個信息添加一個唯一ID,其中,所述邏輯節(jié)點發(fā)送每個攜帶有唯一ID的信息只能被下組邏輯節(jié)點中的一個獲??;

所述邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則用將要發(fā)送的信息和接收的信息中的ID進行比較;

所述邏輯節(jié)點將攜帶有比較結(jié)果的所述將要發(fā)送的信息發(fā)送給子邏輯節(jié)點中的一個,以使所述子邏輯節(jié)點用接收的信息中包含的ID和將要發(fā)送的信息中的ID與所述比較結(jié)果進行比較;

當(dāng)邏輯節(jié)點對接收的信息進行處理后沒有產(chǎn)生新的信息時,所述邏輯節(jié)點將接收的信息中的ID進行比較,并將比較結(jié)果攜帶在發(fā)送給所述服務(wù)器的信息中,以使所述服務(wù)器在根據(jù)所述預(yù)設(shè)規(guī)則判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知用戶。

當(dāng)所述邏輯節(jié)點為根邏輯節(jié)點時,所述根邏輯節(jié)點接收并轉(zhuǎn)發(fā)所述用戶輸入的數(shù)據(jù)信息,以使所述根邏輯節(jié)點將用戶輸入的數(shù)據(jù)信息轉(zhuǎn)發(fā)給所述根邏輯節(jié)點的子邏輯節(jié)點來對用戶輸入的數(shù)據(jù)信息進行處理;

其中,所述用戶輸入的數(shù)據(jù)信息中沒有添加ID。

所述方法還包括:

在所述邏輯節(jié)點接收到用戶發(fā)送的數(shù)據(jù)信息后,所述邏輯節(jié)點接收所述服務(wù)器發(fā)送的與所述用戶發(fā)送的相同的數(shù)據(jù)信息,以使所述服務(wù)器根據(jù)所述預(yù)設(shè)規(guī)則對所述邏輯節(jié)點返回的攜帶有比較結(jié)果的信息進行判斷,并根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

一種消息通知方法,所述方法包括:

所述服務(wù)器接收邏輯節(jié)點發(fā)送的攜帶有比較結(jié)果的信息;

所述服務(wù)器在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對接收的攜帶有比較結(jié)果的信息進行判斷,在判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知所述用戶;

其中,所述邏輯節(jié)點為不會在根據(jù)接收的信息產(chǎn)生新信息的邏輯節(jié)點;

所述比較結(jié)果是所述邏輯節(jié)點用接受的信息中包含的ID進行比較生成 的。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

所述服務(wù)器在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對接收的比較結(jié)果進行判斷,在判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知所述用戶,具體為:

所述服務(wù)器在預(yù)設(shè)時間內(nèi)判斷接收的比較結(jié)果中相同ID的個數(shù),如果相同ID的個數(shù)為偶數(shù)個,所述服務(wù)器刪除所述偶數(shù)個相同的ID,當(dāng)所述服務(wù)器中不存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)信息處理完成,并通知所述用戶;

如果相同ID的個數(shù)為奇數(shù)個,所述服務(wù)器保留所述奇數(shù)個相同ID中的一個,并繼續(xù)接收攜帶有比較結(jié)果的信息,當(dāng)在預(yù)定時間內(nèi)所述服務(wù)器中還存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)沒有處理完成,直到所述預(yù)設(shè)時間結(jié)束前所述服務(wù)器中不存在ID時通知所述用戶其發(fā)送的數(shù)據(jù)信息處理完成。

所述方法還包括:

在用戶向邏輯節(jié)點發(fā)送數(shù)據(jù)信息后,所述服務(wù)器向所述邏輯節(jié)點發(fā)送與所述用戶發(fā)送的相同的數(shù)據(jù)信息;

所述服務(wù)器接收邏輯節(jié)點返回的攜帶有比較結(jié)果的信息;

所述服務(wù)器在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對所述信息中的比較結(jié)果進行判斷,以使所述服務(wù)器根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

一種邏輯節(jié)點設(shè)備,所述設(shè)備包括:

添加模塊,用于為將要發(fā)送的每個信息添加一個唯一ID,其中,所述邏輯節(jié)點發(fā)送每個攜帶有唯一ID的信息只能被下組邏輯節(jié)點中的一個獲取;

比較模塊,用于根據(jù)預(yù)設(shè)規(guī)則用將要發(fā)送的信息和接收的信息中的ID進行比較;

第一發(fā)送模塊,用于將攜帶有比較結(jié)果的所述將要發(fā)送的信息發(fā)送給子邏輯節(jié)點中的一個,以使所述子邏輯節(jié)點用接收的信息中包含的ID和將要發(fā)送的信息中的ID與所述比較結(jié)果進行比較;

第二發(fā)送模塊,當(dāng)邏輯節(jié)點對接收的信息進行處理后沒有產(chǎn)生新的信息 時,所述邏輯節(jié)點將接收的信息中的ID進行比較,并將比較結(jié)果攜帶在發(fā)送給所述服務(wù)器的信息中,以使所述服務(wù)器在根據(jù)所述預(yù)設(shè)規(guī)則判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知用戶。

當(dāng)所述邏輯節(jié)點為根邏輯節(jié)點時,所述根邏輯節(jié)點接收并轉(zhuǎn)發(fā)所述用戶輸入的數(shù)據(jù)信息,以使所述根邏輯節(jié)點將用戶輸入的數(shù)據(jù)信息轉(zhuǎn)發(fā)給所述根邏輯節(jié)點的子邏輯節(jié)點來對用戶輸入的數(shù)據(jù)信息進行處理;

其中,所述用戶輸入的數(shù)據(jù)信息中沒有添加ID。

所述設(shè)備還包括:

接收模塊,在所述邏輯節(jié)點接收到用戶發(fā)送的數(shù)據(jù)信息后,用于接收所述服務(wù)器發(fā)送的與所述用戶發(fā)送的相同的數(shù)據(jù)信息,以使所述服務(wù)器根據(jù)所述預(yù)設(shè)規(guī)則對所述邏輯節(jié)點返回的攜帶有比較結(jié)果的信息進行判斷,并根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

一種服務(wù)器設(shè)備,所述設(shè)備包括:

第一接收模塊,用于接收邏輯節(jié)點發(fā)送的用接收的信息和將要發(fā)送的攜帶有比較結(jié)果的信息;

第一判斷模塊,用于在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對接收的攜帶有比較結(jié)果的信息進行判斷;

通知模塊,用于在判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知所述用戶;

其中,所述邏輯節(jié)點為不會在根據(jù)接收的信息產(chǎn)生新信息的邏輯節(jié)點;

所述比較結(jié)果是所述邏輯節(jié)點用接受的信息中包含的ID進行比較生成的。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

所述第一判斷模塊,具體用于:

在預(yù)設(shè)時間內(nèi)判斷接收的比較結(jié)果中相同ID的個數(shù),如果相同ID的個數(shù)為偶數(shù)個,所述服務(wù)器刪除所述偶數(shù)個相同的ID,當(dāng)所述服務(wù)器中不存在 ID時則表示所述用戶發(fā)送的數(shù)據(jù)信息處理完成;

如果相同ID的個數(shù)為奇數(shù)個,所述服務(wù)器保留所述奇數(shù)個相同ID中的一個,并繼續(xù)接收攜帶有比較結(jié)果的信息,當(dāng)在預(yù)定時間內(nèi)所述服務(wù)器中還存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)沒有處理完成,直到所述預(yù)設(shè)時間結(jié)束前所述服務(wù)器中不存在ID時通知所述用戶其發(fā)送的數(shù)據(jù)信息處理完成。

所述設(shè)備還包括:

發(fā)送模塊,在用戶向邏輯節(jié)點發(fā)送數(shù)據(jù)信息后,用于向所述邏輯節(jié)點發(fā)送與所述用戶發(fā)送的相同的數(shù)據(jù)信息;

第二接收模塊,用于接收所述邏輯節(jié)點返回的攜帶有比較結(jié)果的信息;

第二判斷模塊,用于在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對所述信息中的比較結(jié)果進行判斷,以使所述服務(wù)器根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

本申請通過邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則對接收的信息和將要發(fā)送的信息中的ID進行比較,并將攜帶有比較結(jié)果的信息發(fā)送給下組邏輯節(jié)點中的一個繼續(xù)比較,當(dāng)邏輯節(jié)點在接收到信息后不再產(chǎn)生新的信息時將最后的ID的比較結(jié)果攜帶在發(fā)送給服務(wù)器的信息中,由服務(wù)器根據(jù)預(yù)設(shè)規(guī)則判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,本申請通過比較信息中的ID達(dá)到判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,并達(dá)到通知用戶的目的,這樣的處理方式由系統(tǒng)中的各個邏輯節(jié)點和服務(wù)器共同完成,并且比較的是信息中的ID,不會占用某一設(shè)備過多的資源,從而使消息通知機制能夠達(dá)到比較高的性能。

附圖說明

為了更清楚地說明本申請或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對本申請或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單的介紹,顯而易見地,下面描述中的附圖僅僅是本申請的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。

圖1為本申請實施例中的一種消息通知方法示意圖之一;

圖2為本申請實施例中的一種信息處理流程示意圖;

圖3為本申請實施例中的一種消息通知方法示意圖之二;

圖4為本申請實施例中的一種分布式流式計算系統(tǒng)stream框架結(jié)構(gòu)示意圖;

圖5為本申請實施例中的一種基于stream系統(tǒng)處理的record數(shù)據(jù)處理拓?fù)涫疽鈭D;

圖6為本申請實施例中的一種基于Batch機制的工作原理示意圖;

圖7為本申請實施例中的一種邏輯節(jié)點的結(jié)構(gòu)示意圖;

圖8為本申請實施例中的一種服務(wù)器的結(jié)構(gòu)示意圖。

具體實施方式

下面將結(jié)合本申請中的附圖,對本申請中的技術(shù)方案進行清楚、完整的描述,顯然,所描述的實施例是本申請的一部分實施例,而不是全部的實施例?;诒旧暾堉械膶嵤├?,本領(lǐng)域普通技術(shù)人員獲得的其他實施例,都屬于本申請保護的范圍。

邏輯節(jié)點存在于服務(wù)器中,所述服務(wù)器中包括一個根邏輯節(jié)點和所述根邏輯節(jié)點下的多級邏輯節(jié)點,根邏輯節(jié)點和其他多級邏輯節(jié)點都可以統(tǒng)稱為邏輯節(jié)點,其中,如果一個邏輯節(jié)點有下級邏輯節(jié)點,那么下級邏輯節(jié)點稱為該邏輯節(jié)點的子邏輯節(jié)點,。如圖2所示,服務(wù)器中包括:一個根邏輯節(jié)點PN(Processer Node,邏輯節(jié)點)和多級邏輯節(jié)點PN1-PN6,PN1和PN2稱為根邏輯節(jié)點PN的下級邏輯節(jié)點,即PN的子邏輯節(jié)點,同時,根邏輯節(jié)點PN稱為邏輯節(jié)點PN1和PN2的上級邏輯節(jié)點,PN1和PN2可以稱為一級邏輯節(jié)點,PN1的下級邏輯節(jié)點為PN3、PN4、PN5,PN3、PN4、PN5稱為PN1的子邏輯節(jié)點,PN6為PN2的下級邏輯節(jié)點,即PN2的子邏輯節(jié)點為PN6,PN2為PN6的上級邏輯節(jié)點,PN3、PN4、PN5和PN6可以稱為二級邏輯節(jié)點。

用戶發(fā)送的數(shù)據(jù)信息由所述服務(wù)器轉(zhuǎn)發(fā)到根邏輯節(jié)點上,同時所述服務(wù)器記錄所述用戶發(fā)送的數(shù)據(jù)信息。

一種基于分布式計算系統(tǒng)的消息通知方法,如圖1所示,所述方法包括 以下步驟:

步驟101,邏輯節(jié)點為將要發(fā)送的每個信息添加一個唯一ID(Identity,身份標(biāo)識號碼)。

其中,所述邏輯節(jié)點發(fā)送每個攜帶有唯一ID的信息只能被所述邏輯節(jié)點的子邏輯節(jié)點中的一個獲取。

具體的,如圖2所示,PN1在其要發(fā)送3個信息中添加的ID分別為r3、r4、r5,其中,PN1中的每個信息只能發(fā)送到PN1的子邏輯節(jié)點PN3、PN、PN5中的一個中,例如:添加有r3信息被發(fā)送到PN3中,添加有r4信息被發(fā)送到PN4中,添加有r5信息被發(fā)送到PN5中。

其中,所述邏輯節(jié)點根據(jù)預(yù)先設(shè)定的邏輯計算方式對接收的信息進行處理生成將要發(fā)送的信息,具體的,邏輯節(jié)點對接受的信息進行處理時使用的邏輯計算方式是預(yù)先設(shè)定好的,并且,不同的邏輯節(jié)點使用的邏輯計算方式也可能是不同的。

步驟102,所述邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則用將要發(fā)送的信息和接收的信息中的ID進行比較。

當(dāng)所述邏輯節(jié)點為根邏輯節(jié)點時,所述根邏輯節(jié)點接收并轉(zhuǎn)發(fā)用戶輸入的數(shù)據(jù)信息,以使所述根邏輯節(jié)點將用戶輸入的數(shù)據(jù)信息轉(zhuǎn)發(fā)給所述根邏輯節(jié)點的子邏輯節(jié)點來對用戶輸入的數(shù)據(jù)信息進行處理;

所述用戶輸入的數(shù)據(jù)信息是根據(jù)預(yù)先設(shè)定的固定格式編輯生成的。

其中,所述用戶輸入的數(shù)據(jù)信息中沒有添加ID,在所述根邏輯節(jié)點接收到所述用戶輸入的數(shù)據(jù)信息后,在將所述數(shù)據(jù)信息發(fā)送給所述根邏輯節(jié)點的子邏輯節(jié)點時在所述數(shù)據(jù)信息中添加ID。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個,當(dāng)然所述預(yù)設(shè)規(guī)則也可以為異或算法,還可以為其他方法或算法,但是凡是能夠達(dá)到本申請技術(shù)效果的方法或算法均屬于本申請的保護范圍。

具體的,如圖2所示,PN為根邏輯節(jié)點,所述PN接收用戶輸入的數(shù)據(jù)信息,用戶輸入的數(shù)據(jù)信息中不存在ID,但是所述PN發(fā)送給子邏輯節(jié)點PN1 和PN2時,在所述數(shù)據(jù)信息中添加ID,如果發(fā)送給PN1的信息的ID為r1發(fā)送給PN2的信息的ID為r2,那么,根邏輯節(jié)點接受和發(fā)送的信息的ID的比較結(jié)果是r1、r2。

如果PN1接收的信息中包含的ID為r1,所述PN1根據(jù)預(yù)先設(shè)定的邏輯計算方式對ID為r1的信息進行邏輯計算,并在通過邏輯計算后得到的信息中添加ID,其中,通過邏輯計算得到的信息為將要發(fā)送的信息,如果將要發(fā)送的信息中的ID為r3、r4、r5,通過比較,PN1接收的信息和將要發(fā)送的信息中的ID沒有相同的,此時PN1得到的比較結(jié)果是r1、r3、r4、r5。

步驟103,所述邏輯節(jié)點將攜帶有比較結(jié)果的所述將要發(fā)送的信息發(fā)送給子邏輯節(jié)點中的一個,以使所述子邏輯節(jié)點用接收的信息中包含的ID和將要發(fā)送的信息中的ID與所述比較結(jié)果進行比較。

其中,邏輯節(jié)點接收的信息中包含有上級邏輯節(jié)點為所述信息分配的ID和上級邏輯節(jié)點接收的信息中包含的ID與將要發(fā)送的信息中的ID進行比較的結(jié)果,所述比較結(jié)果一個ID集合。

具體的,如圖2所示,PN將攜帶有r1的信息發(fā)送給PN1,同時也將比較結(jié)果(r1,r2)發(fā)送給PN1,PN1將要發(fā)送信息中的ID為r3、r4、r5,因此PN1中有偶數(shù)個r1,因此將其刪除,比較結(jié)果為r2、r3、r4、r5,在PN1可以將攜帶有ID的一個信息和比較結(jié)果發(fā)送給邏輯節(jié)點PN3、PN4、PN5中的一個。

步驟104,當(dāng)邏輯節(jié)點對接收的信息進行處理后沒有產(chǎn)生新的信息時,所述邏輯節(jié)點將接收的信息中的ID進行比較,并將比較結(jié)果攜帶在發(fā)送給所述服務(wù)器的信息中,以使所述服務(wù)器在根據(jù)所述預(yù)設(shè)規(guī)則判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知用戶。

具體的,如圖2所示,PN3在對接收到的信息進行處理后沒有產(chǎn)生新的信息,PN3接收的信息的ID為r3,接收的比較結(jié)果是r2、r3、r4、r5,有偶數(shù)個r3,因此將r3刪除,比較結(jié)果為r2、r4、r5,PN3將此結(jié)果攜帶在發(fā)送服務(wù)器的信息中;

PN4在對接收到的信息進行處理后沒有產(chǎn)生新的信息,且PN4沒有接收 到PN1發(fā)送的比較結(jié)果,所述PN4中只有接收到得信息中有ID,因此,所述PN4將接收的信息中的ID(r4)發(fā)送給服務(wù)器。

所述方法還包括:

在所述邏輯節(jié)點接收到用戶發(fā)送的數(shù)據(jù)信息后,所述邏輯節(jié)點接收所述服務(wù)器發(fā)送的與所述用戶發(fā)送的相同的數(shù)據(jù)信息,以使所述服務(wù)器根據(jù)所述預(yù)設(shè)規(guī)則對所述邏輯節(jié)點返回的攜帶有比較結(jié)果的信息進行判斷,并根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

具體的,為了保證服務(wù)器由于特殊原因?qū)е碌臄?shù)據(jù)丟失而不能及時的通知用戶,所述服務(wù)器根據(jù)預(yù)先設(shè)定的機制,所述服務(wù)器在判斷出PN接收到用戶發(fā)送的數(shù)據(jù)信息后,PN接收所述服務(wù)器發(fā)送的一個或多個與所述用戶發(fā)送的相同的數(shù)據(jù)信息,并進行與所述用戶發(fā)送的數(shù)據(jù)信息相同的操作,在所述服務(wù)器接收到所有比較結(jié)果后根據(jù)預(yù)設(shè)規(guī)則判斷根邏輯節(jié)點接收的與所述用戶發(fā)送的相同的數(shù)據(jù)信息是否處理完成,如果處理完成那么表示之前用戶發(fā)送的數(shù)據(jù)信息同樣完成了,只是由于服務(wù)器的數(shù)據(jù)丟失導(dǎo)致沒有及時通知用戶,此時服務(wù)器需要通知用戶其發(fā)送的數(shù)據(jù)信息處理完成。

當(dāng)然,所述邏輯節(jié)點將將要發(fā)送的信息的ID和接收的信息的ID直接發(fā)送給所述服務(wù)器,由所述服務(wù)器根據(jù)預(yù)設(shè)規(guī)則對接收所有的ID進行比較來判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

一種消息通知方法,如圖3所示,所述方法包括以下步驟:

步驟301,所述服務(wù)器接收邏輯節(jié)點發(fā)送的攜帶有比較結(jié)果的信息。

其中,所述邏輯節(jié)點為不會在根據(jù)接收的信息產(chǎn)生新信息的邏輯節(jié)點。

所述比較結(jié)果是所述邏輯節(jié)點用接受的信息中包含的ID進行比較生成的。

步驟302,所述服務(wù)器在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對接收的攜帶有比較結(jié)果的信息進行判斷,在判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知所述用戶。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

具體的,如圖2所示,邏輯節(jié)點PN3、PN4、PN5和PN6為不再產(chǎn)生信 息的邏輯節(jié)點,則表示所述用戶發(fā)送的數(shù)據(jù)信息處理完成,那么所述邏輯節(jié)點PN3、PN4、PN5和PN6根據(jù)預(yù)設(shè)規(guī)則將接收的信息中ID和接收的比較結(jié)果進行比較后,將比較結(jié)果發(fā)送給所述服務(wù)器。

所述服務(wù)器在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對接收的攜帶有比較結(jié)果的信息進行判斷,在判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知所述用戶,具體為:

所述服務(wù)器在預(yù)設(shè)時間內(nèi)判斷接收的攜帶有比較結(jié)果的信息中相同ID的個數(shù),如果相同ID的個數(shù)為偶數(shù)個,所述服務(wù)器刪除所述偶數(shù)個相同的ID,當(dāng)所述服務(wù)器中不存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)信息處理完成,并通知所述用戶;

如果相同ID的個數(shù)為奇數(shù)個,所述服務(wù)器保留所述奇數(shù)個相同ID中的一個,并繼續(xù)接收攜帶有比較結(jié)果的信息,當(dāng)在預(yù)定時間內(nèi)所述服務(wù)器中還存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)沒有處理完成,直到所述預(yù)設(shè)時間結(jié)束前所述服務(wù)器中不存在ID時通知所述用戶其發(fā)送的數(shù)據(jù)信息處理完成。

具體的,如圖2所示,邏輯節(jié)點PN3、PN4、PN5、PN6為不再產(chǎn)生信息的邏輯節(jié)點,并且PN3將接受的信息中的ID和接收的比較結(jié)果進行比較后為:r2、r4、r5,PN4為:r4,PN5為:r5,點PN6為:r2,邏輯節(jié)點PN3、PN4、PN5、PN6將比較后的結(jié)果發(fā)送給服務(wù)器,此時所述服務(wù)器中出現(xiàn)的ID都是偶數(shù)個能夠刪除,表示用戶發(fā)送的數(shù)據(jù)信息處理完成,因此所述服務(wù)器可以根據(jù)比較結(jié)果來通知所述用戶。

同時,由于用戶發(fā)送一個數(shù)據(jù)信息的處理周期是有限制的,在一個處理周期內(nèi)如果沒有完成處理,則表示處理超時或者系統(tǒng)出現(xiàn)問題。

在用戶向邏輯節(jié)點發(fā)送數(shù)據(jù)信息后,所述方法還包括:

所述服務(wù)器向邏輯節(jié)點發(fā)送與所述用戶發(fā)送的相同的數(shù)據(jù)信息;

所述服務(wù)器接收邏輯節(jié)點返回的攜帶有比較結(jié)果的信息;

所述服務(wù)器在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對所述信息中的比較結(jié)果進行判斷,以使所述服務(wù)器根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

本申請通過邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則對接收的信息和將要發(fā)送的信息中的 ID進行比較,并將攜帶有比較結(jié)果的信息發(fā)送給下組邏輯節(jié)點中的一個繼續(xù)比較,當(dāng)邏輯節(jié)點在接收到信息后不再產(chǎn)生新的信息時將最后的ID的比較結(jié)果攜帶在發(fā)送給服務(wù)器的信息中,由服務(wù)器根據(jù)預(yù)設(shè)規(guī)則判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,本申請通過比較信息中的ID達(dá)到判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,并達(dá)到通知用戶的目的,這樣的處理方式由系統(tǒng)中的各個邏輯節(jié)點和服務(wù)器共同完成,并且比較的是信息中的ID,不會占用某一設(shè)備過多的資源,從而使消息通知機制能夠達(dá)到比較高的性能。

為了進一步闡述本申請的技術(shù)思想,現(xiàn)結(jié)合具體的應(yīng)用場景,其中預(yù)設(shè)規(guī)則為異或運算,對本申請的技術(shù)方案進行說明。

具體的,如圖4所示的一種分布式流式計算系統(tǒng)框架,其中包括三個功能組件:控制節(jié)點Controller,數(shù)據(jù)源Shard(可以理解為根邏輯節(jié)點)和數(shù)據(jù)處理邏輯拓?fù)鋱DTopology,和用于消息同步的消息同步節(jié)點Acker Node和批量數(shù)據(jù)同步節(jié)點Batch Global Syner,其中,Topology是一個用戶構(gòu)建的處理數(shù)據(jù)的DAG邏輯流程圖,它由具有順序依賴關(guān)系的一個或多個邏輯節(jié)點PN構(gòu)成,每個PN可以有多個物理運行實例,流入topology的數(shù)據(jù)會按照DAG的路徑順序流到各個PN上進行處理,Shard用于接收用戶發(fā)送的數(shù)據(jù)信息,它先把數(shù)據(jù)寫到分布式文件系統(tǒng)中,保證數(shù)據(jù)正常落地,然后再發(fā)送給后面連接的N個topology進行處理。Controller用來接受用戶發(fā)送的創(chuàng)建topology請求,然后進行必要的轉(zhuǎn)換處理后會調(diào)度到具體的一臺或多臺機器上運行,其中,所述分布式流式計算系統(tǒng)框架存在與服務(wù)器中。

具體的數(shù)據(jù)信息record處理過程如下:用戶從客戶端向服務(wù)器中輸入一條record,先會選擇服務(wù)器中某個shard節(jié)點落地,然后被轉(zhuǎn)發(fā)到該shard對應(yīng)的N個topology上面進行處理。每個topology的PN在處理完接受到的record后可能會產(chǎn)生N個(N>=0)新的record繼續(xù)發(fā)往它的子PN節(jié)點進行處理,就這樣隨著topology DAG的計算路徑不斷產(chǎn)生的新record的過程可以理解為由源頭record觸發(fā)生成了一個數(shù)據(jù)信息樹record tree,每條源record產(chǎn)生的tree形狀不一定相同,但是它們的DAG形狀肯定是topology DAG的子樹,而且根節(jié)點相同。如果shard后面連接的topology有多個,那么源頭record觸發(fā)生 成的新record就會組成一個森林。當(dāng)這個record森林不在生長,即不再產(chǎn)生新的record時,可認(rèn)為這條源record被stream引擎處理結(jié)束了,可以通知用戶處理結(jié)束的狀態(tài)。同時,由于不同record攜帶的數(shù)據(jù)信息不同,可能會生成不同的record森林。

當(dāng)一個數(shù)據(jù)信息被處理完成時,其中的信息總是成對出現(xiàn)的,即一個邏輯節(jié)點發(fā)送一個信息,該信息就會被另一個邏輯節(jié)點接收,因此,可以每個新生成的record都會指定一個隨機生成的唯一ID,當(dāng)一個record被一個PN創(chuàng)建,那么該record就會被另一個PN接收,這兩個PN對應(yīng)的同一個ID,在進行異或運算時就會為0,說明這個record被PN成功處理了,進一步的,當(dāng)一個record森林完成的時候,所有record都對應(yīng)一對相同的ID,因此通過異或運算得到的結(jié)果肯定為0。

如圖5所示為本申請實施例中一種基于stream系統(tǒng)處理的record的流程圖,其中,圖5顯示了先后兩條record經(jīng)過stream引擎處理后生成的record森林,第一張圖顯示了topology森林形狀,后面兩張圖分別是兩條record:r1和r2生成的record森林形狀。

每個record森林只有葉子節(jié)點(不會產(chǎn)生新信息的邏輯節(jié)點)會跟AckerNode進行通信以減少網(wǎng)絡(luò)開銷,一個record森林所有的葉子節(jié)點都會把本地先通過異或部分ID計算出來的結(jié)果發(fā)往同一個Acker Node,由于這些record都是由同一源record派生出來的,因此他們都會有一個和源record相同值的消息通知字段稱之為Mesg ID,通過Mesg ID得到要發(fā)送給acker Node的ID編號,acker Node獲取到某個Mesg ID的部分異或值A(chǔ)ckVal后,會把這個值和當(dāng)前內(nèi)存中保存的此Mesg ID對應(yīng)的已有的ackval進行異或運算,如果值為0,說明該Mesg ID對應(yīng)的源record經(jīng)過stream引擎處理完成了,可以將此Mesg ID通知用戶狀態(tài)結(jié)果,如果值不為0,說明還沒有處理完,可繼續(xù)等待。

具體的,用戶提交兩個創(chuàng)建topology的請求:top1和top2,并且指定處理shard1上的數(shù)據(jù)。用戶請求發(fā)送到了Controller后,Controller生成必要的平面圖之后會把兩個topology在計算集群中按順序調(diào)度起來。每個topology 的PN可以線程粒度或者進程粒度來執(zhí)行,具體什么方式取決于集群使用的資源調(diào)度系統(tǒng)的實現(xiàn)機制。Controller會針對每個topology隨機生成一個整數(shù)值(ID),每個topology第一個PN也會攜帶這個整數(shù)作為從shard上接收的源record的初始ackval,例如:當(dāng)創(chuàng)建top1時,隨機分配整數(shù)t1,acker Node上所有源record的初始ackval=t1,當(dāng)創(chuàng)建top2時,系統(tǒng)隨機分配整數(shù)t2,acker Node上的ackval=t1^t2(^表示異或運算符),ackval值是異或運算后的結(jié)果。

在top1和top2調(diào)度起來之后,并且r1的消息通知字段值為mesgId1,落地之后把r1轉(zhuǎn)發(fā)給top1的第一個PN1和top2第一個PN2,PN2接收到r1后給它賦初值ackval=t1,由于top2只有一個邏輯節(jié)點PN2,因此PN2就是葉子節(jié)點,即top2的record tree中r1就是葉子節(jié)點,因此把PN2上r1的ackval=t1發(fā)送給acker Node,由于acker Node上所有record的初始ackval=t1^t2,將它和發(fā)送過來的t1進行異或運算得到ackval=t1^t2^t1=t2,結(jié)果不為0,因此acker Node繼續(xù)等待mesgID1的其他ackval發(fā)送過來;PN1接收到r1后給它賦初值ackval=t2,然后r1被PN2處理完之后會生成三條record(r3,r4,r5),系統(tǒng)會分別為其隨機分配初始ackval(t3,t4,5),PN2會默認(rèn)選擇最后一個生成的record(r5)攜帶其他新生成record(r3,r4)的ackval(t3,t4)和接受到的record(r1)的ackval(t2)的異或運算值作為它的ackval,因此r5的ackval=t2^t3^t4,r3的ackval=t3,r4的ackval=t4,r5不需要異或自己的ackval(t5),因為它發(fā)送到下一個PN后,這個t5最終會被異或為0,因此不需要這個多余的異或運算。r3,r4,r5接著被分別發(fā)送給PN3,PN4,PN5。

所有沒有直接或間接依賴關(guān)系的PN,都是并行運行的,順序不分先后,所以PN3,PN4,PN5會并行處理發(fā)送過來的record。PN3接收到r3,沒有再產(chǎn)生新的record,因此屬于record tree的一個葉子節(jié)點,PN3會把r3攜帶的ackval=t3發(fā)送給acker Node后,此時mesgId1的ackval=t2^t3;PN4接收r4,產(chǎn)生了新的record(r6),此時r6就是最后一個新生成的record,按照上述步驟可得r6需攜帶的ackval=t4,并將r6發(fā)往下一個PN6;PN5接收到r5之后會產(chǎn)生兩個新的record(r7,r8),系統(tǒng)為第一個新的record r7分配新的初始ackval=t7,最后r7 ackval=t7,按照上述步驟r7的ackval(t7)和r5的 ackval(t2^t3^t4)會發(fā)送給r8攜帶下去,因此r8ackval=t2^t3^t4^t7,r7和r8分別發(fā)往PN7和PN8處理。

PN6接收到r6之后,沒有再產(chǎn)生新的節(jié)點,屬于record tree的一個葉子節(jié)點,因此會把r6攜帶的ackval=t4發(fā)送給acker Node后,此時mesgId1的ackval=t2^t3^t4;PN7接收到r7之后,沒有再產(chǎn)生新的節(jié)點,會把r7攜帶的ackval=t7發(fā)送給acker Node后,此時mesgId1的ackval=t2^t3^t4^t7;PN8接收到r8之后,沒有再產(chǎn)生新的節(jié)點,會把r8攜帶的ackval=t2^t3^t4^t7發(fā)送給acker Node后,此時mesgId1的ackval=t2^t3^t4^t7^t2^t3^t4^t7=0。

最后acker Node上源record(r1)對應(yīng)的mesgID1的ackval=0,則認(rèn)為源r1已經(jīng)被處理完成了,并且r1對應(yīng)的record森林確實不再生長了,此時可以將mesgID1通知給用戶,用戶獲取結(jié)果后可進行下一步的決策。

上述實施例基于異或原理跟蹤record tree的結(jié)構(gòu),每個record只需要增加8個字節(jié)來保存ackval值即可(stream系統(tǒng)默認(rèn)使用8個字節(jié),當(dāng)然也可以擴展為16個字節(jié)以減少同一個record森林中不同record隨機產(chǎn)生的ID卻相同的概率),而且通過record攜帶ackval到葉子節(jié)點才發(fā)送最后的本地ackval到Acker Node進行最終的計算,只需要消耗一次必要的網(wǎng)絡(luò)資源即可。

如圖6所示為一個輔助的容錯機制來處理異常情況的流程示意圖,基于這套機制,Acker Node不需要持久化任何狀態(tài),record森林葉子節(jié)點也不需要進行網(wǎng)絡(luò)重發(fā)ackval給Acker Node,但同時又能保證所有源record對應(yīng)的mesgID在任何情況下都不會丟失可及時通知用戶,這套容錯機制借助了Batch的概念來解決這些問題,其中,一個Batch會包含若干條record,所有的shard會被定期分發(fā)遞增的Batch ID,并且流入的所有record都屬于一個Batch,直到下一個Batch ID到來;Batch ID會作為一種特殊的record按順序流入到所有的topology的所有PN,每個PN會同步所有的父PN的Batch ID是否都已經(jīng)到來,如果是,則認(rèn)為該Batch結(jié)束,這個PN不會再有屬于這個Batch ID的record到來了,然后生成Batch IDEnd的消息發(fā)往所有的子PN,每個PN都是同樣的處理流程,直到葉子PN。

其中,Topology的PN可細(xì)分為根節(jié)點agent PN和非根節(jié)點inner PN, agentPN即為topology DAG的根節(jié)點,innerPN為topology DAG的其他節(jié)點,為了優(yōu)化需要,連接在同一個shard上面的所有topology的agentPN都放在同一個進程中,每個數(shù)據(jù)源實例shard instance對應(yīng)一個agent PN進程,如圖6所示,top1和top2的agent PN放在同一個進程內(nèi),每個topology的agent PN所在的進程為agent Node,該agentNode進程中還存在一個Mesg Notifier,它是消息通知框架中連接用戶的組件,當(dāng)它被Acker Node告知某條record已經(jīng)被處理完成時,會立馬把這條record的Mesg ID通知給用戶,或者當(dāng)它接受到一個Global Batch ID End的消息時,會把屬于該Batch ID和小于該Batch ID的所有還沒有通知給用戶的record全部發(fā)出去通知用戶這些record已處理完成。InnerPN代指topology的其他所有節(jié)點,并不是指某個PN節(jié)點。Blobal Batch Syner是一個單點(BBS),用來全局同步Batch ID結(jié)束的消息,當(dāng)topology的葉子PN節(jié)點生成一個Batch IDEnd的消息時會發(fā)送給BBS,當(dāng)BBS接受到來自所有的topology的所有葉子PN的Batch ID End消息時,會針對該Batch ID生成一個Global Batch ID End的消息,并發(fā)送給所有的Acker Node和所有的Agent PN的Mesg Notifier。Global Batch ID End表示stream引擎已經(jīng)處理完了屬于這個Batch ID和小于這個Batch ID的所有record,Mesg Notifier自然可以將這些record通知給用戶。同時Acker Node接收到Global Batch ID End后會將屬于這個Batch ID和小于這個Batch ID的所有record清除,不需要維護他們的狀態(tài)了,因為這些record已經(jīng)處理完了,并且MesgNotifier會把這些record通知給用戶。

如圖6中的標(biāo)號1所示,shard的某個instance將按順序依次發(fā)送batch1,源record(r1,r2,r3),batch2,源record(r4,r5)給它連接的agent Node進程;進程中的top1和top2的agent PN和Mesg Notifier都會接收到所有的這些數(shù)據(jù),Mesg Notifier會保存這些數(shù)據(jù)到內(nèi)存中,直到通知給用戶,其他agent PN會將這些數(shù)據(jù)處理完后把生成的新record和原始batch ID發(fā)送給子節(jié)點。

如圖6中的標(biāo)號2所示,在某一時刻每個topology會依次處理完r1,r2,r3對應(yīng)的record tree,在這過程中會把r1,r2,r3的record tree葉子節(jié)點中的ackval依次發(fā)送給Acker Node做異或運算。當(dāng)batch1中所有record都處理完 成了,topology的所有葉子節(jié)點會把batch1End消息發(fā)送給BBS單點。

如圖6中的標(biāo)號3所示,top1的r1,r2,r3的record tree的所有ackval都發(fā)送給了Acker Node,top2的r2,r3的record tree的所有ackval都發(fā)送給了Acker Node,而top2的r1的record tree的所有葉子節(jié)點的ackval在發(fā)往Acker Node的過程中由于網(wǎng)絡(luò)等原因可能丟失了一部分,因此到最后Acker Node通過異或運算后,只能得到r2和r3的ackval為0,r1的值不為0,因此AckerNode只會把r2,r3告知Mesg Notifier通知給用戶,至于r1則需要另外的機制即Batch機制來保證通知給用戶。

當(dāng)BBS接受完了所有topology的所有葉子PN的Batch1 End結(jié)束的消息后,則生成Global Batch1 End的消息,到此時為止,batch1所有的record已經(jīng)被處理完畢,因此這個Global Batch1 End會被發(fā)往mesg Notifier和Acker Node。

如圖6中的標(biāo)號4所示,Mesg Notifier先接收到Acker Node發(fā)送過來的r2,r3,通知用戶這兩條record已處理完成,如圖6中的標(biāo)號5所示,此時batch1還有r1還沒有通知用戶,當(dāng)Mesg Notifier接受到BBS發(fā)送過來的Global Batch1 End的消息后,再把r1通知給用戶,到現(xiàn)在為止,batch1中所有的record已經(jīng)發(fā)送給了用戶,沒有丟失任何一條record。當(dāng)Acker Node接受到Global Batch1 End的消息后,則會清理r1對應(yīng)ackval狀態(tài),不需要再維護它了,節(jié)省內(nèi)存資源。

本申請通過邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則對接收的信息和將要發(fā)送的信息中的ID進行比較,并將比較結(jié)果發(fā)送給下組邏輯節(jié)點中的一個繼續(xù)比較,當(dāng)邏輯節(jié)點在接收到信息后不再產(chǎn)生信息的信息時將最后的ID的比較結(jié)果發(fā)送給服務(wù)器,由服務(wù)器根據(jù)預(yù)設(shè)規(guī)則判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,本申請通過比較信息中的ID達(dá)到判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,并達(dá)到通知用戶的目的,這樣的處理方式由系統(tǒng)中的各個邏輯節(jié)點和服務(wù)器共同完成,并且比較的是信息中的ID,不會占用某一設(shè)備過多的資源,從而使消息通知機制能夠達(dá)到比較高的性能,并且不用獲知每個邏輯節(jié)點上信息處理的狀態(tài)節(jié)省了大量的網(wǎng)絡(luò)資源。

基于與上述方法同樣的申請構(gòu)思,本申請還提出了一種邏輯節(jié)點設(shè)備,如圖7所述,該設(shè)備包括:

添加模塊71,用于為發(fā)送的每個信息添加一個唯一ID,其中,所述邏輯節(jié)點發(fā)送每個攜帶有唯一ID的信息只能被下組邏輯節(jié)點中的一個獲取;

比較模塊72,用于根據(jù)預(yù)設(shè)規(guī)則用將要發(fā)送的信息和接收的信息中的ID進行比較;

第一發(fā)送模塊73,用于將比較結(jié)果發(fā)送給下組邏輯節(jié)點中的一個,以使接收所述比較結(jié)果的邏輯節(jié)點用接收的信息和將要發(fā)送的信息中的ID與所述比較結(jié)果進行比較;

第二發(fā)送模塊74,當(dāng)所述邏輯節(jié)點對接收的信息進行處理后沒有產(chǎn)生新的信息時,用于將接收的信息中的ID進行比較后的結(jié)果發(fā)送給所述服務(wù)器,以使所述服務(wù)器根據(jù)所述預(yù)設(shè)規(guī)則判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

當(dāng)所述邏輯節(jié)點為根邏輯節(jié)點時,所述根邏輯節(jié)點接收的信息為所述用戶發(fā)送的數(shù)據(jù)信息;

其中,所述用戶發(fā)送的數(shù)據(jù)信息中沒有添加ID。

所述設(shè)備還包括:

接收模塊,在所述邏輯節(jié)點接收到用戶發(fā)送的數(shù)據(jù)信息后,用于接收所述服務(wù)器發(fā)送的與所述用戶發(fā)送的相同的數(shù)據(jù)信息,以使所述服務(wù)器根據(jù)所述預(yù)設(shè)規(guī)則對所述邏輯節(jié)點返回的比較結(jié)果進行判斷,并根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

奇于與上述方法同樣的申請構(gòu)思,本申請還提出了一種服務(wù)器設(shè)備,如圖8所述,該設(shè)備包括:

第一接收模塊81,用于接收邏輯節(jié)點發(fā)送的用接收的信息和將要發(fā)送的信息中的ID進行比較后的結(jié)果;

第一判斷模塊82,用于在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對接收的比較結(jié)果進行判斷;

通知模塊83,用于在判斷出用戶發(fā)送的數(shù)據(jù)信息處理完成后通知所述用戶;

其中,所述邏輯節(jié)點為不會在根據(jù)接收的信息產(chǎn)生新信息的邏輯節(jié)點。

所述預(yù)設(shè)規(guī)則為當(dāng)有偶數(shù)個相同的ID時,則刪除所述偶數(shù)個相同的ID;

當(dāng)有奇數(shù)個相同的ID時,則只保留所述奇數(shù)個相同ID中的一個。

所述第一判斷模塊81,具體用于:

在預(yù)設(shè)時間內(nèi)判斷接收的比較結(jié)果中相同ID的個數(shù),如果相同ID的個數(shù)為偶數(shù)個,所述服務(wù)器刪除所述偶數(shù)個相同的ID,當(dāng)所述服務(wù)器中不存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)信息處理完成;

如果相同ID的個數(shù)為奇數(shù)個,所述服務(wù)器保留所述奇數(shù)個相同ID中的一個,并繼續(xù)接收比較結(jié)果,當(dāng)在預(yù)定時間內(nèi)所述服務(wù)器中還存在ID時則表示所述用戶發(fā)送的數(shù)據(jù)沒有處理完成,直到所述預(yù)設(shè)時間結(jié)束前所述服務(wù)器中不存在ID時通知所述用戶其發(fā)送的出局信息處理完成。

所述設(shè)備還包括:

發(fā)送模塊,在用戶向邏輯節(jié)點發(fā)送數(shù)據(jù)信息后,用于向所述邏輯節(jié)點發(fā)送與所述用戶發(fā)送的相同的數(shù)據(jù)信息;

第二接收模塊,用于接收所述邏輯節(jié)點返回的比較結(jié)果;

第二判斷模塊,用于在預(yù)設(shè)時間內(nèi)根據(jù)預(yù)設(shè)規(guī)則對所述比較結(jié)果進行判斷,以使所述服務(wù)器根據(jù)判斷結(jié)果判斷所述用戶發(fā)送的數(shù)據(jù)信息是否處理完成。

本申請通過邏輯節(jié)點根據(jù)預(yù)設(shè)規(guī)則對接收的信息和將要發(fā)送的信息中的ID進行比較,并將攜帶有比較結(jié)果的信息發(fā)送給下組邏輯節(jié)點中的一個繼續(xù)比較,當(dāng)邏輯節(jié)點在接收到信息后不再產(chǎn)生新的信息時將最后的ID的比較結(jié)果攜帶在發(fā)送給服務(wù)器的信息中,由服務(wù)器根據(jù)預(yù)設(shè)規(guī)則判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,本申請通過比較信息中的ID達(dá)到判斷用戶發(fā)送的數(shù)據(jù)信息是否處理完成,并達(dá)到通知用戶的目的,這樣的處理方式由系統(tǒng)中的各個邏輯節(jié)點和服務(wù)器共同完成,并且比較的是信息中的ID,不會占用某一設(shè)備過多的資源,從而使消息通知機制能夠達(dá)到比較高的性能。

通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請可借助軟件加必需的通用硬件平臺的方式來實現(xiàn),當(dāng)然也可以通過硬件,但很多情況下前者是更佳的實施方式?;谶@樣的理解,本申請的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺終端設(shè)備(可以是手機,個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請各個實施例所述的方法。

以上所述僅是本申請的優(yōu)選實施方式,應(yīng)當(dāng)指出,對于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本申請原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應(yīng)視本申請的保護范圍。

本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分布于實施例的裝置中,也可以進行相應(yīng)變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以集成于一體,也可以分離部署;可以合并為一個模塊,也可以進一步拆分成多個子模塊。上述本申請實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。

以上公開的僅為本申請的幾個具體實施例,但是,本申請并非局限于此,任何本領(lǐng)域的技術(shù)人員能思之的變化都應(yīng)落入本申請的保護范圍。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
伊川县| 五华县| 许昌县| 富源县| 绥化市| 蛟河市| 安吉县| 太谷县| 德格县| 大洼县| 谢通门县| 太和县| 保靖县| 安康市| 饶河县| 红安县| 井研县| 柞水县| 北流市| 怀集县| 盈江县| 盐边县| 大埔县| 洛川县| 成都市| 盘锦市| 肃宁县| 周口市| 炉霍县| 铜陵市| 会东县| 乐业县| 宜州市| 洱源县| 西华县| 玛多县| 寻乌县| 巧家县| 寻甸| 上蔡县| 双牌县|