本發(fā)明涉及數(shù)據(jù)處理領域,尤其涉及一種能夠減少延時的數(shù)據(jù)傳輸方法。
背景技術:
隨著信息技術的飛速發(fā)展,基于數(shù)據(jù)處理和數(shù)據(jù)分析的應用受到了廣泛的歡迎和關注。大量信息源帶來了數(shù)據(jù)規(guī)模的爆發(fā)式增長,因此對海量數(shù)據(jù)進行復雜計算已經(jīng)遠遠超過單臺計算機的處理能力,由此推動了對分布式系統(tǒng)及其關鍵技術的研究。分布式計算中把需要進行復雜計算的海量數(shù)據(jù)切分成小塊后分交由多臺計算機并行處理,并將局部計算結果整合得出最終結果。
在一般意義上的數(shù)據(jù)傳輸模式中,由客戶端向服務器端發(fā)起資源請求,服務器端響應建立傳輸控制協(xié)議(transmissioncontrolprotocol,簡稱tcp)連接而后開始向客戶端傳輸數(shù)據(jù);但在分布式計算系統(tǒng)中,由于數(shù)據(jù)是實時傳輸?shù)?,上游?shù)據(jù)流的傳送無法由下游節(jié)點的請求來驅(qū)動,因為數(shù)據(jù)流是不間斷、流速波動的數(shù)據(jù)集,下游節(jié)點無法預知上游數(shù)據(jù)流到來的時間點,不僅如此,還會因為對下游節(jié)點請求的確認和解析增加系統(tǒng)延時,因此,數(shù)據(jù)的傳輸所需時間較長。
技術實現(xiàn)要素:
本發(fā)明所要解決的技術問題在于提供一種能夠減少延時的數(shù)據(jù)傳輸方法,能夠解決因為對下游節(jié)點請求的確認和解析增加的系統(tǒng)延時。
為解決上述技術問題,本發(fā)明采用如下技術方案:
本發(fā)明提供了一種能夠減少延時的數(shù)據(jù)傳輸方法,該數(shù)據(jù)傳輸方法包括:
上游節(jié)點向下游節(jié)點發(fā)送數(shù)據(jù)連接請求;
所述下游節(jié)點獲取所述數(shù)據(jù)連接請求,建立與所述上游節(jié)點的數(shù)據(jù)連接;
所述下游節(jié)點向所述上游節(jié)點發(fā)送所需數(shù)據(jù)內(nèi)容;
所述上游節(jié)點調(diào)取并向所述下游節(jié)點發(fā)送所述所需數(shù)據(jù)內(nèi)容。
優(yōu)選的,該數(shù)據(jù)傳輸方法還包括:
所述下游節(jié)點在指定端口監(jiān)聽連接請求。
優(yōu)選的,所述下游節(jié)點獲取所述數(shù)據(jù)連接請求,建立與所述上游節(jié)點的連接包括:
當所述下游節(jié)點從所述指定端口監(jiān)聽到所述連接請求,打開對應的數(shù)據(jù)管道,建立與所述上游節(jié)點的數(shù)據(jù)連接。
優(yōu)選的,所述下游節(jié)點向所述上游節(jié)點發(fā)送所需數(shù)據(jù)內(nèi)容包括:
所述下游節(jié)點獲取待處理任務所訂閱的數(shù)據(jù)流名,向所述上游節(jié)點發(fā)送。
優(yōu)選的,所述上游節(jié)點調(diào)取并向所述下游節(jié)點發(fā)送所述所需數(shù)據(jù)內(nèi)容包括:
所述上游節(jié)點獲取來自所述下游節(jié)點的數(shù)據(jù)流名;
所述上游節(jié)點根據(jù)所述輸出數(shù)據(jù)流和下游節(jié)點的訂閱關系,將所述輸出數(shù)據(jù)流發(fā)送到與所述下游節(jié)點一一對應的共享內(nèi)存隊列上;
所述上游節(jié)點發(fā)送所述共享內(nèi)存隊列內(nèi)的數(shù)據(jù)流。
優(yōu)選的,所述上游節(jié)點調(diào)取并向所述下游節(jié)點發(fā)送所述所需數(shù)據(jù)內(nèi)容之前,還包括:
所述上游節(jié)點持久化備份所述所需數(shù)據(jù)內(nèi)容。
優(yōu)選的,所述連接請求為數(shù)據(jù)流名。
優(yōu)選的,所述下游節(jié)點在指定端口監(jiān)聽連接請求包括:
所述下游節(jié)點監(jiān)聽指定端口,并將所述指定端口加入到epoll句柄中;
當所述下游節(jié)點接收到來自所述上游節(jié)點的輸出數(shù)據(jù)流名時,以閱讀標志打開有名管道;
所述下游節(jié)點將所述有名管道的文件描述符加入到epoll循環(huán)中;
所述下游節(jié)點從所述有名管道中循環(huán)讀取來自上游節(jié)點的輸出數(shù)據(jù)流。
優(yōu)選的,所述上游節(jié)點持久化備份所述所需數(shù)據(jù)內(nèi)容包括:
所述共享內(nèi)存隊列中的數(shù)據(jù)項以主鍵形式儲存。
本發(fā)明實施例提供了一種能夠減少延時的數(shù)據(jù)傳輸方法,該數(shù)據(jù)傳輸方法是由上游節(jié)點請求向下游節(jié)點發(fā)送數(shù)據(jù),當下游節(jié)點接收上游節(jié)點的請求之后,可向上游節(jié)點發(fā)送所需的數(shù)據(jù)內(nèi)容,上游節(jié)點處理之后將對應的數(shù)據(jù)內(nèi)容傳送給下游節(jié)點。這樣的數(shù)據(jù)傳輸方法能夠有效解決因為對下游節(jié)點請求的確認和解析增加的系統(tǒng)延時,達到減少數(shù)據(jù)傳輸延時的效果。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明實施例提供的數(shù)據(jù)傳輸方法的流程示意圖。
具體實施方式
下面將結合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領域普通技術人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明提供了一種能夠減少延時的數(shù)據(jù)傳輸方法,如圖1所示,該數(shù)據(jù)傳輸方法大致包括以下步驟:
步驟s1、上游節(jié)點向下游節(jié)點發(fā)送數(shù)據(jù)連接請求。
步驟s2、下游節(jié)點獲取數(shù)據(jù)連接請求,建立與上游節(jié)點的數(shù)據(jù)連接。
步驟s3、下游節(jié)點向上游節(jié)點發(fā)送所需數(shù)據(jù)內(nèi)容。
步驟s4、上游節(jié)點調(diào)取并向下游節(jié)點發(fā)送所需數(shù)據(jù)內(nèi)容。
顯然,對于本發(fā)明實施例而言,在分布式機選系統(tǒng)中,上游數(shù)據(jù)流的傳送并不是由下游節(jié)點的請求來驅(qū)動,因為數(shù)據(jù)流是不間斷、流速波動的數(shù)據(jù)集,下游節(jié)點無法預知上游數(shù)據(jù)流到來的時間點。不僅如此,還會因為對下游節(jié)點請求的確認和解析增加系統(tǒng)延時,所以本發(fā)明提供的數(shù)據(jù)傳輸?shù)姆绞绞巧嫌喂?jié)點向下游節(jié)點“推送”而不是下游節(jié)點向上游節(jié)點“牽拉”,即客戶端(上游節(jié)點)向服務器(下游節(jié)點)請求發(fā)送數(shù)據(jù),雙方通過自定義的協(xié)議確定數(shù)據(jù)的內(nèi)容后,由客戶端主動推送數(shù)據(jù),最大程度地減小了延時。
對于分布式計算系統(tǒng)而言,其通常具有多個涉及處理、計算的節(jié)點,每個節(jié)點對于其他節(jié)點而言都可能是輸入/輸出(input/output,簡稱i/o)數(shù)據(jù)源。因此,在同一個分布式計算系統(tǒng)而言,每個節(jié)點在整個系統(tǒng)中時而扮演客戶端(即下游節(jié)點)的角色,時而扮演服務器端(即上游節(jié)點)的角色,但其讀寫都是可以通過epoll事件循環(huán)統(tǒng)一調(diào)度的。
具體的,在本發(fā)明實施例中,下游節(jié)點通過長期監(jiān)聽一個指定端口并加入到epoll句柄中,當接收到上游節(jié)點發(fā)送的輸出數(shù)據(jù)流名(outstreamname)時,以閱讀(read)標志打開有名管道(fifo管道),并將管道文件描述符加入到epoll循環(huán)中。
進一步的,很多流式計算系統(tǒng)不支持斷點續(xù)傳的功能,因為假設了數(shù)據(jù)流一次性通過系統(tǒng),當節(jié)點故障或者計算邏輯出錯時,只能讓原始的數(shù)據(jù)流重新通過系統(tǒng)再執(zhí)行一次計算,不僅浪費了資源,特別是在數(shù)據(jù)流有唯一性且不可重現(xiàn)時,最后的輸出結果將不包含這部分數(shù)據(jù)流,系統(tǒng)的準確性大大降低。因此,本發(fā)明實施例中,針對這一弊端加入了持久化備份,用以支持斷點續(xù)傳、差錯重傳的功能。
本發(fā)明實施例中,持久化備份還可提供斷點續(xù)傳和差錯重傳的功能。在現(xiàn)有的數(shù)據(jù)流計算系統(tǒng)中,數(shù)據(jù)流一次性、完全地經(jīng)過系統(tǒng)內(nèi)存,由于數(shù)據(jù)無法恢復和重現(xiàn),所以對故障非常敏感,容錯性較差。這就要求參與數(shù)據(jù)傳送的雙方在正式傳送數(shù)據(jù)流前進行一次協(xié)議,下游節(jié)點通知上游節(jié)點前一次數(shù)據(jù)流傳送終止的位置。本發(fā)明實施例中可以通過定位傳輸協(xié)議用以定位數(shù)據(jù)流曾經(jīng)的傳輸位置,并從持久化備份中取出相應位置的數(shù)據(jù),從而實現(xiàn)數(shù)據(jù)流的恢復。
具體的,在步驟s1的基礎上,從指定管道中持續(xù)讀取上游節(jié)點處理完畢的輸出數(shù)據(jù)流,存入以輸出數(shù)據(jù)流命名的磁盤隊列中,進行持久化備份。磁盤隊列中的數(shù)據(jù)項以主鍵形式儲存,key值是數(shù)據(jù)項的時間戳,這樣方便差錯重傳時從硬盤隊列中快速定位數(shù)據(jù)項。根據(jù)epoll異步讀寫的特點,實現(xiàn)一個狀態(tài)機,一個簡單的類似tcp/ip的數(shù)據(jù)傳輸協(xié)議,為數(shù)據(jù)的斷點續(xù)傳提供支持,保證數(shù)據(jù)的準確性和真實性。
上游節(jié)點通過查詢輸出數(shù)據(jù)流與下游節(jié)點的訂閱關系,將已經(jīng)在磁盤隊列中備份好的數(shù)據(jù)發(fā)送到以下游節(jié)點(node)命名的共享內(nèi)存隊列中,顯然,每個下游節(jié)點都對應有唯一一個共享內(nèi)存隊列。為了保證接收和發(fā)送數(shù)據(jù)時的一致性,本發(fā)明實施例中可將下游節(jié)點名封裝成任務放到上游節(jié)點的任務隊列中,通過解析任務類型為“內(nèi)部”(從上游節(jié)點接收數(shù)據(jù)為“外部”任務,從共享內(nèi)存隊列取數(shù)據(jù)是“內(nèi)部”任務),取出任務中的下游節(jié)點名,從相應的共享內(nèi)存隊列中取出數(shù)據(jù),并根據(jù)zookeeper中對應的下游節(jié)點的配置(ip)發(fā)送數(shù)據(jù)。共享消息隊列也是類unix系統(tǒng)中進程間通信(ipc)的一種方式,多個進程可以讀取或添加隊列中的消息。消息隊列是隨內(nèi)核持續(xù)的消息鏈表,其中的消息具有規(guī)定的格式、特定的類型和相應的優(yōu)先級。
最后,上游節(jié)點找到共享內(nèi)存隊列內(nèi)的數(shù)據(jù)流分別對應的下游節(jié)點之后,即可將共享內(nèi)存隊列內(nèi)的數(shù)據(jù)發(fā)送。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應以所述權利要求的保護范圍為準。