種分布式數(shù)據(jù)流處理裝置,包括:
[0051]接收模塊,用于接收第一節(jié)點(diǎn)發(fā)送的包含設(shè)定鍵值的狀態(tài)信息遷出指示,并將所述狀態(tài)信息遷出指示傳輸至發(fā)送模塊;
[0052]發(fā)送模塊,用于根據(jù)所述接收模塊接收的狀態(tài)信息遷出指示,確定本地生成的所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息,并將確定的所述第一狀態(tài)信息發(fā)送給管理各工作節(jié)點(diǎn)的協(xié)調(diào)器。
[0053]第六方面,提供一種分布式數(shù)據(jù)流處理裝置,包括:
[0054]接收模塊,用于接收第一節(jié)點(diǎn)發(fā)送的包含設(shè)定鍵值的狀態(tài)信息遷入指示,并將所述狀態(tài)信息遷入指示傳輸至獲取模塊;
[0055]獲取模塊,用于根據(jù)所述接收模塊接收的狀態(tài)信息遷入指示,從管理各工作節(jié)點(diǎn)的協(xié)調(diào)器中獲取所述第二節(jié)點(diǎn)發(fā)送到協(xié)調(diào)器中的所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息,并將獲取的所述第一狀態(tài)信息與本地生成的對(duì)應(yīng)所述鍵值的數(shù)據(jù)流的第二狀態(tài)信息進(jìn)行
I=I TT O
[0056]采用上述第一方面提供的分布式數(shù)據(jù)流處理方法,第一節(jié)點(diǎn)可以在確定下游的第二節(jié)點(diǎn)滿足設(shè)定的負(fù)載遷移條件后,將第二節(jié)點(diǎn)負(fù)責(zé)處理的鍵值對(duì)應(yīng)的數(shù)據(jù)流遷移至當(dāng)前累計(jì)負(fù)載較小的第三節(jié)點(diǎn)進(jìn)行處理,并指示第二節(jié)點(diǎn)和第三節(jié)點(diǎn)進(jìn)行狀態(tài)信息同步,從而可以針對(duì)同一鍵值的數(shù)據(jù)流進(jìn)行負(fù)載均衡處理。
【附圖說明】
[0057]圖1為本發(fā)明實(shí)施例一進(jìn)行分布式數(shù)據(jù)流處理的方法流程圖;
[0058]圖2為本發(fā)明實(shí)施例二進(jìn)行分布式數(shù)據(jù)流處理的方法流程圖;
[0059]圖3為本發(fā)明實(shí)施例三進(jìn)行分布式數(shù)據(jù)流處理的方法流程圖;
[0060]圖4為本發(fā)明實(shí)施例的分布式系統(tǒng)中各工作節(jié)點(diǎn)及每個(gè)工作節(jié)點(diǎn)的功能單元分布示意圖;
[0061]圖5為本發(fā)明實(shí)施例中第一節(jié)點(diǎn)進(jìn)行負(fù)載遷移的方法流程圖;
[0062]圖6為本發(fā)明實(shí)施例中工作節(jié)點(diǎn)間進(jìn)行狀態(tài)信息同步的示意圖;
[0063]圖7為與圖6相對(duì)應(yīng)的本發(fā)明實(shí)施例中進(jìn)行狀態(tài)信息同步的方法流程圖;
[0064]圖8本發(fā)明實(shí)施例的分布式系統(tǒng)中工作節(jié)點(diǎn)進(jìn)行過載反饋的示意圖;
[0065]圖9為與圖8相對(duì)應(yīng)的本發(fā)明實(shí)施例的分布式系統(tǒng)中工作節(jié)點(diǎn)進(jìn)行過載反饋的方法流程圖;
[0066]圖10為本發(fā)明實(shí)施例一提供的分布式數(shù)據(jù)流處理裝置示意圖;
[0067]圖11為本發(fā)明實(shí)施例二提供的分布式數(shù)據(jù)流處理裝置示意圖;
[0068]圖12為本發(fā)明實(shí)施例三提供的分布式數(shù)據(jù)流處理裝置示意圖;
[0069]圖13為本發(fā)明實(shí)施例四提供的分布式數(shù)據(jù)流處理裝置示意圖;
[0070]圖14為本發(fā)明實(shí)施例五提供的分布式數(shù)據(jù)流處理裝置示意圖;
[0071]圖15為本發(fā)明實(shí)施例六提供的分布式數(shù)據(jù)流處理裝置示意圖。
【具體實(shí)施方式】
[0072]下面結(jié)合說明書附圖對(duì)本發(fā)明實(shí)施例作進(jìn)一步詳細(xì)描述。
[0073]如圖1所示,為本發(fā)明實(shí)施例一進(jìn)行分布式數(shù)據(jù)流處理的方法流程圖,包括以下步驟:
[0074]SlOl:第一節(jié)點(diǎn)根據(jù)需要分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流的鍵值,確定第二節(jié)點(diǎn)為處理所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的下一跳工作節(jié)點(diǎn);
[0075]S102:所述第一節(jié)點(diǎn)在確定所述第二節(jié)點(diǎn)滿足設(shè)定的負(fù)載遷移條件后,將所述需要分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流從所述第二節(jié)點(diǎn)遷移至第三節(jié)點(diǎn)進(jìn)行處理,并指示所述第二節(jié)點(diǎn)和第三節(jié)點(diǎn)同步所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的狀態(tài)信息;
[0076]其中,所述第二節(jié)點(diǎn)和第三節(jié)點(diǎn)屬于所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合,所述第三節(jié)點(diǎn)的累計(jì)負(fù)載小于所述第二節(jié)點(diǎn)的累計(jì)負(fù)載。
[0077]采用上述方法,第一節(jié)點(diǎn)可以在確定下游的第二節(jié)點(diǎn)滿足設(shè)定的負(fù)載遷移條件后,將第二節(jié)點(diǎn)負(fù)責(zé)處理的鍵值對(duì)應(yīng)的數(shù)據(jù)流遷移至當(dāng)前累計(jì)負(fù)載較小的第三節(jié)點(diǎn)進(jìn)行處理,并指示第二節(jié)點(diǎn)和第三節(jié)點(diǎn)進(jìn)行狀態(tài)信息同步,從而可以針對(duì)同一鍵值的數(shù)據(jù)流進(jìn)行負(fù)載均衡處理。
[0078]可選地,所述第三節(jié)點(diǎn)為當(dāng)前所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合中具有最小累計(jì)負(fù)載的工作節(jié)點(diǎn)。
[0079]可選地,所述方法還包括:
[0080]第一節(jié)點(diǎn)根據(jù)需要分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流的鍵值,在確定當(dāng)前不存在處理該鍵值對(duì)應(yīng)的數(shù)據(jù)流的下一跳工作節(jié)點(diǎn)時(shí),將所述需要分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流分配給當(dāng)前所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合中具有最小累計(jì)負(fù)載的工作節(jié)點(diǎn)進(jìn)行處理。
[0081]在具體實(shí)施過程中,第一節(jié)點(diǎn)分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流可以是本地生成的初始數(shù)據(jù)流,也可以是轉(zhuǎn)發(fā)的其它工作節(jié)點(diǎn)生成的數(shù)據(jù)流;第一節(jié)點(diǎn)根據(jù)需要分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流的鍵值,判斷該鍵值對(duì)應(yīng)的數(shù)據(jù)流是否已經(jīng)被分配到某個(gè)下一跳工作節(jié)點(diǎn),若確定該鍵值對(duì)應(yīng)的數(shù)據(jù)流已經(jīng)被分配到第二節(jié)點(diǎn),則判斷第二節(jié)點(diǎn)是否已滿足負(fù)載遷移條件,若滿足,則將該鍵值對(duì)應(yīng)的數(shù)據(jù)流遷移至當(dāng)前累計(jì)負(fù)載比第一節(jié)點(diǎn)的累計(jì)負(fù)載小的第三節(jié)點(diǎn)進(jìn)行處理,這里的第三節(jié)點(diǎn)具體可以是當(dāng)前第一節(jié)點(diǎn)的所有下一跳工作節(jié)點(diǎn)中具有最小累計(jì)負(fù)載的工作節(jié)點(diǎn);若不滿足,則繼續(xù)將該鍵值對(duì)應(yīng)的數(shù)據(jù)流分配給第二節(jié)點(diǎn)進(jìn)行處理;若該鍵值對(duì)應(yīng)的數(shù)據(jù)流還沒有被分配到任何一個(gè)下一跳工作節(jié)點(diǎn),則將該數(shù)據(jù)流分配給當(dāng)前具有最小累計(jì)負(fù)載的工作節(jié)點(diǎn)進(jìn)行處理;其中,每個(gè)鍵值對(duì)應(yīng)的數(shù)據(jù)流可以稱為一個(gè)數(shù)據(jù)項(xiàng)目。
[0082]可選地,所述設(shè)定的負(fù)載遷移條件包括以下條件中的一種或多種:
[0083]第一個(gè)條件:所述第二節(jié)點(diǎn)的累計(jì)負(fù)載超過設(shè)定閾值;
[0084]第二個(gè)條件:所述第二節(jié)點(diǎn)的累計(jì)負(fù)載與第三節(jié)點(diǎn)的累計(jì)負(fù)載的比值和/或差值超過設(shè)定閾值;
[0085]除此,負(fù)載遷移條件除包括上述兩個(gè)條件中的一個(gè)或兩個(gè)之外,還可以包括:
[0086]第三個(gè)條件:當(dāng)前時(shí)間與所述第一節(jié)點(diǎn)最近一次進(jìn)行數(shù)據(jù)流遷移處理的時(shí)間的時(shí)間間隔不小于設(shè)定閾值。
[0087]本發(fā)明實(shí)施例中,可以在以上第一個(gè)和/或第二個(gè)條件滿足時(shí),將所述鍵值對(duì)應(yīng)的數(shù)據(jù)流從所述第二節(jié)點(diǎn)遷移至當(dāng)前具有最小累計(jì)負(fù)載的第三節(jié)點(diǎn)進(jìn)行處理;在具體實(shí)施中,為了兼顧系統(tǒng)開銷,可以在以上第一個(gè)和/或第二個(gè)條件滿足時(shí),查看當(dāng)前時(shí)間與所述第一節(jié)點(diǎn)最近一次進(jìn)行數(shù)據(jù)流遷移處理的時(shí)間的時(shí)間間隔是否小于設(shè)定閾值,若達(dá)到或超過設(shè)定閾值,再將所述鍵值對(duì)應(yīng)的數(shù)據(jù)流從所述第二節(jié)點(diǎn)遷移至當(dāng)前具有最小累計(jì)負(fù)載的第三節(jié)點(diǎn)進(jìn)行處理。
[0088]上述第二節(jié)點(diǎn)及第三節(jié)點(diǎn)的累計(jì)負(fù)載可根據(jù)以下公式進(jìn)行計(jì)算:
[0089]可選地,所述第一節(jié)點(diǎn)根據(jù)以下公式確定設(shè)定時(shí)間段內(nèi)所述第一節(jié)點(diǎn)的任意一個(gè)下一跳工作節(jié)點(diǎn)的累計(jì)負(fù)載W:
[0090]W=cXW' +(l-c)Xy;
[0091]其中,y為所述第一節(jié)點(diǎn)在所述設(shè)定時(shí)間段內(nèi)分配給所述任意一個(gè)下一跳工作節(jié)點(diǎn)的負(fù)載,r為所述任意一個(gè)下一跳工作節(jié)點(diǎn)在所述設(shè)定時(shí)間段的前一個(gè)時(shí)間段結(jié)束時(shí)的累計(jì)負(fù)載,c為常數(shù),且O < c < I。
[0092]比如,針對(duì)上述第二節(jié)點(diǎn),上述公式中,y為第一節(jié)點(diǎn)在設(shè)定時(shí)間段內(nèi)分配給第二節(jié)點(diǎn)的負(fù)載,該負(fù)載可以包括一個(gè)鍵值對(duì)應(yīng)的數(shù)據(jù)流,也可以包括多個(gè)鍵值對(duì)應(yīng)的數(shù)據(jù)流;針對(duì)其中任意一個(gè)鍵值,也即任意一個(gè)數(shù)據(jù)項(xiàng)目,假設(shè)在該設(shè)定時(shí)間段開始時(shí)該數(shù)據(jù)項(xiàng)目對(duì)應(yīng)的負(fù)載為W,在該設(shè)定時(shí)間段內(nèi),該數(shù)據(jù)項(xiàng)目新增的負(fù)載為V,則在該設(shè)定時(shí)間段結(jié)束時(shí),將該數(shù)據(jù)項(xiàng)目對(duì)應(yīng)的負(fù)載更新為W = cXw' +(1-C) Xv。
[0093]可選地,所述第一節(jié)點(diǎn)指示所述第二節(jié)點(diǎn)和第三節(jié)點(diǎn)同步所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的狀態(tài)信息,包括:
[0094]所述第一節(jié)點(diǎn)向所述第二節(jié)點(diǎn)發(fā)送包含所述鍵值的狀態(tài)信息遷出指示,以及,向所述第三節(jié)點(diǎn)發(fā)送包含所述鍵值的狀態(tài)信息遷入指示;
[0095]其中,所述狀態(tài)信息遷出指示用于指示所述第二節(jié)點(diǎn)將本地生成的所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息發(fā)送給管理各工作節(jié)點(diǎn)的協(xié)調(diào)器;所述狀態(tài)信息遷入指示用于指示所述第三節(jié)點(diǎn)從管理各工作節(jié)點(diǎn)的協(xié)調(diào)器中獲取所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息,并將獲取的所述第一狀態(tài)信息與本地生成的對(duì)應(yīng)所述鍵值的數(shù)據(jù)流的第二狀態(tài)信息進(jìn)行合并。
[0096]在具體實(shí)施過程中,第一節(jié)點(diǎn)在將第二節(jié)點(diǎn)當(dāng)前處理的所述鍵值對(duì)應(yīng)的數(shù)據(jù)流,也即數(shù)據(jù)項(xiàng)目,遷移至第三節(jié)點(diǎn)進(jìn)行處理的同時(shí),需要針對(duì)該數(shù)據(jù)項(xiàng)目,同步第一節(jié)點(diǎn)和第三節(jié)點(diǎn)間的狀態(tài)信息;具體地,本發(fā)明實(shí)施例中采用管理各工作節(jié)點(diǎn)的協(xié)調(diào)器作為兩節(jié)點(diǎn)間狀態(tài)信息同步的中轉(zhuǎn)站,第二節(jié)點(diǎn)將之前存儲(chǔ)的該數(shù)據(jù)項(xiàng)目的第一狀態(tài)信息發(fā)送給協(xié)調(diào)器,以使第三節(jié)點(diǎn)可以從該協(xié)調(diào)器獲取該第一狀態(tài)信息,第三節(jié)點(diǎn)在獲取該第一狀態(tài)信息后,可以將該第一狀態(tài)信息與第三節(jié)點(diǎn)新生成的對(duì)應(yīng)該數(shù)據(jù)項(xiàng)目的第二狀態(tài)信息進(jìn)行合并,如此完成了對(duì)遷移的數(shù)據(jù)項(xiàng)目的狀態(tài)信息同步。在具體實(shí)施中,第一節(jié)點(diǎn)可以向第二節(jié)點(diǎn)和第三節(jié)點(diǎn)分別發(fā)送狀態(tài)信息遷出指示和狀態(tài)信息遷入指示,該指示可以顯式指示第二節(jié)點(diǎn)和第三節(jié)點(diǎn)進(jìn)行狀態(tài)信息同步,也可以隱式指示第二節(jié)點(diǎn)和第三節(jié)點(diǎn)進(jìn)行狀態(tài)信息同步,比如,第一節(jié)點(diǎn)可以直接通知第二節(jié)點(diǎn)將設(shè)定鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息遷出,并發(fā)送給協(xié)調(diào)器,也可以通知第二節(jié)點(diǎn)所述第一節(jié)點(diǎn)已經(jīng)將所述鍵值對(duì)應(yīng)的數(shù)據(jù)流從該第二節(jié)點(diǎn)遷移到了其它工作節(jié)點(diǎn)進(jìn)行處理,第二節(jié)點(diǎn)在接收到該通知后,根據(jù)各工作節(jié)點(diǎn)間的預(yù)先約定,將本地生成的該鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息發(fā)送至協(xié)調(diào)器;相應(yīng)地,第一節(jié)點(diǎn)可以直接通知第三節(jié)點(diǎn)從協(xié)調(diào)器遷入設(shè)定鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息,并將該第一狀態(tài)信息與第三節(jié)點(diǎn)新生成的第二狀態(tài)信息合并,也可以通知第三節(jié)點(diǎn)所述第一節(jié)點(diǎn)已經(jīng)將所述鍵值對(duì)應(yīng)的數(shù)據(jù)流從其它工作節(jié)點(diǎn)遷移到了第三節(jié)點(diǎn)進(jìn)行處理,第三節(jié)點(diǎn)在接收到該通知后,根據(jù)各工作節(jié)點(diǎn)間的預(yù)先約定,從協(xié)調(diào)器獲取所述第一狀態(tài)信息,并將所述第一狀態(tài)信息與本地生成的該鍵值對(duì)應(yīng)的數(shù)據(jù)流的第二狀態(tài)信息