一種分布式數(shù)據(jù)流處理方法及裝置的制造方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,尤其涉及一種分布式數(shù)據(jù)流處理方法及裝置。
【背景技術(shù)】
[0002]數(shù)據(jù)流處理技術(shù)廣泛應(yīng)用在眾多領(lǐng)域,比如金融管理、網(wǎng)絡(luò)監(jiān)視、通信數(shù)據(jù)管理、Web應(yīng)用、傳感器網(wǎng)絡(luò)數(shù)據(jù)處理等。這些應(yīng)用中有一個(gè)典型的特點(diǎn):數(shù)據(jù)流處理量極大,具有相當(dāng)高的突發(fā)性,當(dāng)數(shù)據(jù)到達(dá)的速度超出系統(tǒng)的處理能力時(shí),系統(tǒng)會(huì)出現(xiàn)過(guò)載并且性能下降。所以,負(fù)載管理均成為數(shù)據(jù)流處理中研究的熱點(diǎn)與重點(diǎn)。
[0003]數(shù)據(jù)流處理技術(shù)包括集中式數(shù)據(jù)流處理技術(shù)和分布式數(shù)據(jù)流處理技術(shù);在集中式數(shù)據(jù)流處理技術(shù)中,檢測(cè)到系統(tǒng)發(fā)生超載時(shí),會(huì)選擇性地丟掉一些數(shù)據(jù)元組來(lái)保證系統(tǒng)的正常運(yùn)行,顯然,采用這種方式是以犧牲數(shù)據(jù)元組為代價(jià),對(duì)系統(tǒng)性能影響較大。由于流數(shù)據(jù)源及應(yīng)用本身存在分布式的特點(diǎn),目前,分布式流處理技術(shù)成為流處理研究的熱點(diǎn),采用分布式流處理技術(shù),可以將負(fù)載分布到各個(gè)處理節(jié)點(diǎn),保持系統(tǒng)中各個(gè)節(jié)點(diǎn)之間的負(fù)載平衡。
[0004]在分布式流處理技術(shù)中,針對(duì)無(wú)狀態(tài)對(duì)象,主要采用輪詢(xún)方式將數(shù)據(jù)元組分配到相應(yīng)的處理節(jié)點(diǎn)上,對(duì)無(wú)狀態(tài)對(duì)象的處理過(guò)程屬于一次性操作,不會(huì)保存任何狀態(tài)信息,處理過(guò)程比較簡(jiǎn)單;針對(duì)有狀態(tài)對(duì)象,通常將具有同樣鍵值(Key)的數(shù)據(jù)流分配到同樣的節(jié)點(diǎn)進(jìn)行處理。
[0005]在實(shí)際網(wǎng)絡(luò)中,流量的分布具有很大的傾斜性,對(duì)應(yīng)同一鍵值的數(shù)據(jù)流有可能會(huì)貢獻(xiàn)相當(dāng)大的流量,這就需要對(duì)具有同一鍵值的數(shù)據(jù)流也進(jìn)行負(fù)載均衡處理,而上述分布式流處理技術(shù)顯然無(wú)法針對(duì)這種情況進(jìn)行負(fù)載均衡處理。
【發(fā)明內(nèi)容】
[0006]本發(fā)明實(shí)施例提供一種分布式數(shù)據(jù)流處理方法及裝置,用以解決分布式流處理技術(shù)無(wú)法對(duì)具有同一鍵值的數(shù)據(jù)流進(jìn)行負(fù)載均衡處理的問(wèn)題。
[0007]第一方面,提供一種分布式數(shù)據(jù)流處理方法,包括:
[0008]第一節(jié)點(diǎn)根據(jù)需要分配給下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流的鍵值,確定第二節(jié)點(diǎn)為處理所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的下一跳工作節(jié)點(diǎn);
[0009]所述第一節(jié)點(diǎn)在確定所述第二節(jié)點(diǎn)滿(mǎ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)信息;
[0010]其中,所述第二節(jié)點(diǎn)和第三節(jié)點(diǎn)屬于所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合,所述第三節(jié)點(diǎn)的累計(jì)負(fù)載小于所述第二節(jié)點(diǎn)的累計(jì)負(fù)載。
[0011]結(jié)合第一方面,在第一種可能的實(shí)現(xiàn)方式中,所述第三節(jié)點(diǎn)為當(dāng)前所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合中具有最小累計(jì)負(fù)載的工作節(jié)點(diǎn)。
[0012]結(jié)合第一方面,或第一方面的第一種可能的實(shí)現(xiàn)方式中,在第二種可能的實(shí)現(xiàn)方式中,所述設(shè)定的負(fù)載遷移條件包括:
[0013]所述第二節(jié)點(diǎn)的累計(jì)負(fù)載超過(guò)設(shè)定閾值;和/或,
[0014]所述第二節(jié)點(diǎn)的累計(jì)負(fù)載與第三節(jié)點(diǎn)的累計(jì)負(fù)載的比值和/或差值超過(guò)設(shè)定閾值。
[0015]結(jié)合第一方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述設(shè)定的負(fù)載遷移條件還包括:
[0016]當(dāng)前時(shí)間與所述第一節(jié)點(diǎn)最近一次進(jìn)行數(shù)據(jù)流遷移處理的時(shí)間的時(shí)間間隔不小于設(shè)定閾值。
[0017]結(jié)合第一方面,或第一方面的第一至三種任意一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述第一節(jié)點(diǎn)根據(jù)以下公式確定設(shè)定時(shí)間段內(nèi)所述第一節(jié)點(diǎn)的任意一個(gè)下一跳工作節(jié)點(diǎn)的累計(jì)負(fù)載W:
[0018]W=cXW' +(l-c)Xy;
[0019]其中,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。
[0020]結(jié)合第一方面,或第一方面的第一至四種任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述第一節(jié)點(diǎn)指示所述第二節(jié)點(diǎn)和第三節(jié)點(diǎn)同步所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的狀態(tài)信息,包括:
[0021]所述第一節(jié)點(diǎn)向所述第二節(jié)點(diǎn)發(fā)送包含所述鍵值的狀態(tài)信息遷出指示,以及,向所述第三節(jié)點(diǎn)發(fā)送包含所述鍵值的狀態(tài)信息遷入指示;
[0022]其中,所述狀態(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)行合并。
[0023]結(jié)合第一方面,或第一方面的第一至五種任意一種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述第一節(jié)點(diǎn)在確定所述第二節(jié)點(diǎn)滿(mǎn)足設(shè)定的負(fù)載遷移條件之前,還包括:
[0024]所述第一節(jié)點(diǎn)在接收到管理各工作節(jié)點(diǎn)的協(xié)調(diào)器發(fā)送的指示所述第二節(jié)點(diǎn)過(guò)載的信息后,調(diào)整設(shè)定的所述負(fù)載遷移條件。
[0025]結(jié)合第一方面,或第一方面的第一至六種任意一種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xiàn)方式中,所述方法還包括:
[0026]第一節(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)行處理。
[0027]第二方面,提供一種分布式數(shù)據(jù)流處理方法,包括:
[0028]第二節(jié)點(diǎn)接收第一節(jié)點(diǎn)發(fā)送的包含設(shè)定鍵值的狀態(tài)信息遷出指示;
[0029]所述第二節(jié)點(diǎn)根據(jù)所述狀態(tài)信息遷出指示,確定本地生成的所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的第一狀態(tài)信息,并將確定的所述第一狀態(tài)信息發(fā)送給管理各工作節(jié)點(diǎn)的協(xié)調(diào)器。
[0030]第三方面,提供一種分布式數(shù)據(jù)流處理方法,包括:
[0031]第三節(jié)點(diǎn)接收第一節(jié)點(diǎn)發(fā)送的包含設(shè)定鍵值的狀態(tài)信息遷入指示;
[0032]所述第三節(jié)點(diǎn)根據(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)行合并。
[0033]第四方面,提供一種分布式數(shù)據(jù)流處理裝置,該裝置屬于第一節(jié)點(diǎn),包括:
[0034]確定模塊,用于根據(jù)需要分配給所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)的數(shù)據(jù)流的鍵值,確定第二節(jié)點(diǎn)為處理所述鍵值對(duì)應(yīng)的數(shù)據(jù)流的下一跳工作節(jié)點(diǎn);
[0035]遷移模塊,用于在確定所述第二節(jié)點(diǎn)滿(mǎ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)信息;
[0036]其中,所述第二節(jié)點(diǎn)和第三節(jié)點(diǎn)屬于所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合,所述第三節(jié)點(diǎn)的累計(jì)負(fù)載小于所述第二節(jié)點(diǎn)的累計(jì)負(fù)載。
[0037]結(jié)合第四方面,在第一種可能的實(shí)現(xiàn)方式中,所述第三節(jié)點(diǎn)為當(dāng)前所述第一節(jié)點(diǎn)的下一跳工作節(jié)點(diǎn)集合中具有最小累計(jì)負(fù)載的工作節(jié)點(diǎn)。
[0038]結(jié)合第四方面,或第四方面的第一種可能的實(shí)現(xiàn)方式,在第二種可能的實(shí)現(xiàn)方式中,所述設(shè)定的負(fù)載遷移條件包括:
[0039]所述第二節(jié)點(diǎn)的累計(jì)負(fù)載超過(guò)設(shè)定閾值;和/或,
[0040]所述第二節(jié)點(diǎn)的累計(jì)負(fù)載與第三節(jié)點(diǎn)的累計(jì)負(fù)載的比值和/或差值超過(guò)設(shè)定閾值。
[0041]結(jié)合第四方面的第二種可能的實(shí)現(xiàn)方式,在第三種可能的實(shí)現(xiàn)方式中,所述設(shè)定的負(fù)載遷移條件還包括:
[0042]當(dāng)前時(shí)間與所述裝置最近一次進(jìn)行數(shù)據(jù)流遷移處理的時(shí)間的時(shí)間間隔不小于設(shè)定閾值。
[0043]結(jié)合第四方面,或第四方面的第一至三種任意一種可能的實(shí)現(xiàn)方式,在第四種可能的實(shí)現(xiàn)方式中,所述遷移模塊具體用于根據(jù)以下公式確定設(shè)定時(shí)間段內(nèi)所述第一節(jié)點(diǎn)的任意一個(gè)下一跳工作節(jié)點(diǎn)的累計(jì)負(fù)載W:
[0044]W=cXW' +(l-c)Xy;
[0045]其中,y為所述裝置在所述設(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。
[0046]結(jié)合第四方面,或第四方面的第一至四種任意一種可能的實(shí)現(xiàn)方式,在第五種可能的實(shí)現(xiàn)方式中,所述遷移模塊具體用于,向所述第二節(jié)點(diǎn)發(fā)送包含所述鍵值的狀態(tài)信息遷出指示,以及,向所述第三節(jié)點(diǎn)發(fā)送包含所述鍵值的狀態(tài)信息遷入指示;
[0047]其中,所述狀態(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)行合并。
[0048]結(jié)合第四方面,或第四方面的第一至五種任意一種可能的實(shí)現(xiàn)方式,在第六種可能的實(shí)現(xiàn)方式中,所述遷移模塊還用于,在確定所述第二節(jié)點(diǎn)滿(mǎn)足設(shè)定的負(fù)載遷移條件之前,若接收到管理各工作節(jié)點(diǎn)的協(xié)調(diào)器發(fā)送的指示所述第二節(jié)點(diǎn)過(guò)載的信息,則調(diào)整設(shè)定的所述負(fù)載遷移條件。
[0049]結(jié)合第四方面,或第四方面的第一至六種任意一種可能的實(shí)現(xiàn)方式,在第七種可能的實(shí)現(xià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)行處理。
[0050]第五方面,提供一