本發(fā)明涉及通信領域,尤其涉及一種中間數(shù)據(jù)傳輸方法及系統(tǒng)、分布式系統(tǒng)。
背景技術:
在分布式系統(tǒng)中,用戶任務通??梢员环纸鉃閹准壊煌淖尤蝿铡_@些子任務之間存在依賴關系,一些子任務的輸出結果會作為另一些子任務的輸入數(shù)據(jù)。這就涉及到了子任務之間的數(shù)據(jù)傳遞,這些在子任務之間傳遞的數(shù)據(jù)稱為中間數(shù)據(jù)。
目前,在相關技術中,中間數(shù)據(jù)的傳輸是通過分布式存儲系統(tǒng)來完成的,其過程是:產(chǎn)生中間數(shù)據(jù)的上級子任務通過分布式存儲系統(tǒng)的接口將中間數(shù)據(jù)以文件的形式寫到分布式存儲系統(tǒng)的磁盤上;需要將該中間數(shù)據(jù)作為輸入數(shù)據(jù)的下級子任務從分布式存儲系統(tǒng)的磁盤中讀取該中間數(shù)據(jù),以做進一步處理。
以最常見的mapreduce任務為例。mapreduce任務可以被分解為maptask和reducetask這兩級子任務。當通過mapreduce任務完成數(shù)據(jù)排序時,maptask可以在不同的機器上同時啟動若干個進程,每個進程分別讀取一部分輸入數(shù)據(jù),并對這部分數(shù)據(jù)進行排序,然后將排序的結果輸出。這些輸出數(shù)據(jù)會作為reducetask的輸入,做進一步排序,以達到全局有序。這一過程中,在maptask和reducetask這兩級子任務之間傳遞的數(shù)據(jù)是排序過程中產(chǎn)生的中間計算結果,是不需要被呈現(xiàn)給用戶的。
圖1為相關技術中maptask和reducetask之間的中間數(shù)據(jù)傳輸過程示意圖。如圖1所示,相關技術中,maptask和reducetask之間的中間數(shù)據(jù)傳輸過程如下:
maptask輸出中間數(shù)據(jù),通過分布式存儲系統(tǒng)的用戶接口將中間數(shù)據(jù)以文件形式寫入分布式存儲系統(tǒng),分布式存儲系統(tǒng)將中間數(shù)據(jù)存儲到一個 或多個存儲節(jié)點中,即將這些中間數(shù)據(jù)持久化到一臺或多臺機器的磁盤上;
reducetask通過分布式存儲系統(tǒng)的用戶接口,從存儲中間數(shù)據(jù)的存儲節(jié)點中讀取中間數(shù)據(jù)。
相關技術中,分布式系統(tǒng)的中間數(shù)據(jù)傳輸存在如下問題:
1、中間數(shù)據(jù)傳輸需要經(jīng)過磁盤的讀寫來實現(xiàn),而傳統(tǒng)機械硬盤的平均讀寫速率只能達到100mb/s左右。因此,這種中間數(shù)據(jù)傳輸方式嚴重受到磁盤io(輸入輸出)速率的影響,傳輸速率低,導致用戶任務執(zhí)行效率低下。
2、分布式存儲系統(tǒng)中可能會出現(xiàn)單個存儲節(jié)點不可用的情況,為了保證數(shù)據(jù)不會丟失,分布式存儲系統(tǒng)通常會為一個文件生成多份拷貝,并存放到不同的存儲節(jié)點上,這一過程造成了同樣的數(shù)據(jù)會在網(wǎng)絡中進行多次傳輸,占用網(wǎng)絡帶寬。
技術實現(xiàn)要素:
本發(fā)明的目的在于提供一種中間數(shù)據(jù)傳輸方法及系統(tǒng)、分布式系統(tǒng),提高分布式系統(tǒng)的中間數(shù)據(jù)傳輸速率。
為實現(xiàn)上述目的,本發(fā)明提出了一種中間數(shù)據(jù)傳輸方法,用于分布式系統(tǒng),所述分布式系統(tǒng)的用戶任務包括多級子任務,所述子任務中產(chǎn)生中間數(shù)據(jù)的子任務稱為上級子任務,所述子任務中依賴所述中間數(shù)據(jù)進行處理的子任務稱為下級子任務,所述方法包括:
確定所述上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù);
從所述下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口中選擇需要接收所述待傳數(shù)據(jù)的網(wǎng)絡端口,記為接收端口;
將所述待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給所述接收端口。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸方法,中間數(shù)據(jù)的傳輸不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。
為實現(xiàn)上述目的,本發(fā)明還提出了一種中間數(shù)據(jù)傳輸系統(tǒng),用于分布式系統(tǒng),所述分布式系統(tǒng)的用戶任務包括多級子任務,所述子任務中產(chǎn)生 中間數(shù)據(jù)的子任務稱為上級子任務,所述子任務中依賴所述中間數(shù)據(jù)進行處理的子任務稱為下級子任務,所述中間數(shù)據(jù)傳輸系統(tǒng)包括:
確定模塊,用于確定所述上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù);
選擇模塊,用于從所述下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口中選擇需要接收所述待傳數(shù)據(jù)的網(wǎng)絡端口,記為接收端口;
傳輸模塊,用于將所述確定模塊確定的待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給所述選擇模塊選擇的接收端口。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸系統(tǒng),中間數(shù)據(jù)的傳輸不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。
為實現(xiàn)上述目的,本發(fā)明還提出了一種分布式系統(tǒng),包括前述任一項所述的中間數(shù)據(jù)傳輸系統(tǒng)。
本發(fā)明實施例中的分布式系統(tǒng),中間數(shù)據(jù)的傳輸不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。
附圖說明
圖1為相關技術中maptask和reducetask之間的中間數(shù)據(jù)傳輸過程示意圖。
圖2為本發(fā)明實施例一中中間數(shù)據(jù)傳輸方法的流程圖。
圖3為根據(jù)圖2所示的中間數(shù)據(jù)傳輸方法進行傳輸時maptask和reducetask之間的中間數(shù)據(jù)傳輸過程示意圖之一。
圖4為根據(jù)圖2所示的中間數(shù)據(jù)傳輸方法進行傳輸時maptask和reducetask之間的中間數(shù)據(jù)傳輸過程示意圖之二。
圖5為本發(fā)明實施例二中中間數(shù)據(jù)傳輸方法的流程圖。
圖6為本發(fā)明實施例三中中間數(shù)據(jù)傳輸方法的流程圖。
圖7為本發(fā)明實施例四中中間數(shù)據(jù)傳輸方法的流程圖。
圖8為本發(fā)明實施例五中中間數(shù)據(jù)傳輸系統(tǒng)的結構框圖。
圖9為本發(fā)明實施例六中中間數(shù)據(jù)傳輸系統(tǒng)的結構框圖。
圖10為本發(fā)明實施例七中中間數(shù)據(jù)傳輸系統(tǒng)的傳輸模塊的結構框圖。
圖11為本發(fā)明實施例八中中間數(shù)據(jù)傳輸系統(tǒng)的傳輸模塊的結構框圖。
圖12為本發(fā)明實施例九中分布式系統(tǒng)的結構框圖。
具體實施方式
以下結合附圖對本發(fā)明的原理和特征進行描述,所舉實施例只用于解釋本發(fā)明,并非用于限定本發(fā)明的范圍。對于本領域普通技術人員來講,在不付出創(chuàng)造性勞動的前提下,根據(jù)本發(fā)明精神所獲得的所有實施例,都屬于本發(fā)明的保護范圍。
需要說明的是,本發(fā)明各實施例中的中間數(shù)據(jù)傳輸方法和中間數(shù)據(jù)傳輸系統(tǒng)均用于分布式系統(tǒng),該分布式系統(tǒng)的用戶任務包括多級子任務,其中,將這些子任務中產(chǎn)生中間數(shù)據(jù)的子任務稱為上級子任務,將這些子任務中依賴中間數(shù)據(jù)進行處理的子任務稱為下級子任務。上級子任務和下級子任務是相對而言的。例如,在具有多級子任務的用戶任務中,一個子任務對于子任務a來說是下級子任務,但對于子任務b來說是卻可能是下級子任務。
其中,用戶任務可以是mapreduce任務、dag(directedacyclicgraph,有向無環(huán)圖)任務等。
圖2為本發(fā)明實施例一中中間數(shù)據(jù)傳輸方法的流程圖。如圖2所示,本實施例中,中間數(shù)據(jù)傳輸方法可以包括如下步驟:
步驟s201,確定上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù);
在上級子任務有多個進程的情況下,上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù)(也即待傳數(shù)據(jù))可以是上級子任務的一個進程產(chǎn)生的中間數(shù)據(jù),也可以是上級子任務的多個或全部進程產(chǎn)生的中間數(shù)據(jù)。
步驟s202從下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口中選擇需要接收待傳數(shù)據(jù)的網(wǎng)絡端口,記為接收端口;
下級子任務用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口用來接收上級子任務發(fā)送的待傳數(shù)據(jù)。
下級子任務可以根據(jù)需要設置網(wǎng)絡端口。比如,下級子任務可以為每個進程分別設置一個網(wǎng)絡端口,也可以為所有進程設置一個或多個共同網(wǎng) 絡端口。
步驟s203,將待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給接收端口。
也就是說,將待傳數(shù)據(jù)由上級子任務所在的網(wǎng)絡通過網(wǎng)絡直接傳輸?shù)较氯蝿账诘木W(wǎng)絡,中間不再像背景技術中提到的相關技術那樣經(jīng)過分布式存儲系統(tǒng)的寫入和讀取過程。
以mapreduce任務為例。mapreduce任務的兩級子任務maptask和reducetask之間的中間數(shù)據(jù)傳輸過程如圖3所示。
在此基礎上,用戶可以根據(jù)需要制定具體的傳輸策略。
例如,傳輸策略之一可以是:為上級子任務的每個進程分別設置一個第一網(wǎng)絡端口,為下級子任務的每個進程分別設置一個第二網(wǎng)絡端口,將待傳數(shù)據(jù)由產(chǎn)生待傳數(shù)據(jù)的一個或多個進程對應的第一網(wǎng)絡端口分別傳輸?shù)剿械牡诙W(wǎng)絡端口。也即,將中間數(shù)據(jù)由產(chǎn)生中間數(shù)據(jù)的進程直接發(fā)送給下級子任務的所有進程。仍以mapreduce任務為例。按照此傳輸策略,mapreduce任務的兩級子任務maptask和reducetask之間的中間數(shù)據(jù)傳遞過程如圖4所示。
傳輸策略之二可以是:為上級子任務的所有進程設置一個或多個第一共同網(wǎng)絡端口,為下級子任務的所有進程設置一個或多個第二共同網(wǎng)絡端口,將上級子任務的各個進程產(chǎn)生的中間數(shù)據(jù)由第一共同網(wǎng)絡端口通過網(wǎng)絡直接傳輸?shù)降诙餐W(wǎng)絡端口,第二共同網(wǎng)絡端口再將中間數(shù)據(jù)分發(fā)給下級子任務的各個進程。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸方法,將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。
圖5為本發(fā)明實施例二中中間數(shù)據(jù)傳輸方法的流程圖。如圖5所示,本實施例中,中間數(shù)據(jù)傳輸方法可以包括如下步驟:
步驟s501,啟動下級子任務,使下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口處于監(jiān)聽狀態(tài);
由于本發(fā)明實施例中,中間數(shù)據(jù)是由上級子任務通過網(wǎng)絡直接傳輸給下級子任務的,因此在啟動上級子任務產(chǎn)生中間數(shù)據(jù)前,下級子任務應處 于能夠接收中間數(shù)據(jù)的狀態(tài)。也就是說,下級子任務應當先于上級子任務啟動,這樣才能保證下級子任務能夠接收到上級子任務產(chǎn)生的中間數(shù)據(jù)。
步驟s502,將下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口的信息通知給上級子任務;
網(wǎng)絡端口的信息一般可以包括ip地址等。上級子任務可以根據(jù)下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口的信息確定中間數(shù)據(jù)的目的地址。
在具體應用中,下級子任務可以將網(wǎng)絡端口的信息先上報給調(diào)度器,調(diào)度器再將下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口信息發(fā)送給上級子任務。
步驟s503,在下級子任務啟動之后啟動上級子任務,產(chǎn)生中間數(shù)據(jù);
在下級子任務啟動后,下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口已經(jīng)處于監(jiān)聽狀態(tài)的情況下,再啟動上級子任務。即先啟動下級子任務啟動,后啟動上級子任務。
步驟s504,確定上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù);
步驟s505從下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口中選擇需要接收待傳數(shù)據(jù)的網(wǎng)絡端口,記為接收端口;
步驟s506,將待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給接收端口。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸方法,將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。再者,本發(fā)明實施例中的中間數(shù)據(jù)傳輸方法,下級子任務先于上級子任務啟動,以保證下級子任務能夠接收到上級子任務產(chǎn)生的中間數(shù)據(jù)。
圖6為本發(fā)明實施例三中中間數(shù)據(jù)傳輸方法的流程圖。如圖6所示,本實施例中,中間數(shù)據(jù)傳輸方法可以包括如下步驟:
步驟s601,確定上級子任務的單個進程本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù),其中,上級子任務的每個進程對應一個第一網(wǎng)絡端口;
本實施例中,以進程為單位進行中間數(shù)據(jù)的發(fā)送。上級子任務的每個進程各自確定自己要傳輸?shù)闹虚g數(shù)據(jù),然后將各自將自己要傳輸?shù)闹虚g數(shù)據(jù)通過網(wǎng)絡傳輸給下級子任務的所有進程。
步驟s602,下級子任務的每個進程對應一個第二網(wǎng)絡端口,將所有第二網(wǎng)絡端口均選為待傳數(shù)據(jù)的接收端口;
在本實施例中,上、下級子任務的每個進程都分別對應一個網(wǎng)絡端口。上級子任務的進程對應的第一網(wǎng)絡端口為中間數(shù)據(jù)的發(fā)送端口,下級子任務的進程對應的第二網(wǎng)絡端口為中間數(shù)據(jù)的接收端口。相應地,將上級子任務的進程稱為發(fā)送進程,將下級子任務的進程稱為接收進程。中間數(shù)據(jù)由發(fā)送端口通過網(wǎng)絡直接傳輸?shù)浇邮斩丝凇T搨鬏敺绞嚼缜笆鰣D4所示的中間數(shù)據(jù)傳輸方式。
步驟s603,將待傳數(shù)據(jù)由發(fā)送進程對應的第一網(wǎng)絡端口通過網(wǎng)絡直接傳輸給所有第二網(wǎng)絡端口,其中,發(fā)送進程為產(chǎn)生待傳數(shù)據(jù)的進程。
由上述步驟可見,本實施例中,中間數(shù)據(jù)由發(fā)送進程通過網(wǎng)絡直接傳輸?shù)浇邮者M程,不必經(jīng)由上級子任務收集各個發(fā)送進程產(chǎn)生的中間數(shù)據(jù)統(tǒng)一發(fā)送,也不必經(jīng)由下級子任務統(tǒng)一接收中間數(shù)據(jù)后再分別發(fā)給各個接收進程,因此可以進一步提高中間數(shù)據(jù)傳輸速率。不僅如此,接收進程可以在接收到中間數(shù)據(jù)后立即進行處理,而不必等到所有發(fā)送進程產(chǎn)生完中間數(shù)據(jù)并傳輸?shù)浇邮者M程后才能進行處理,因此,中間數(shù)據(jù)由發(fā)送進程通過網(wǎng)絡直接傳輸?shù)浇邮者M程,還可以讓接收進程在發(fā)送進程仍在產(chǎn)生中間數(shù)據(jù)的時候就能夠對已經(jīng)傳輸?shù)浇邮者M程的一部分中間數(shù)據(jù)先進行處理,也就是說,接收進程和發(fā)送進程可以并行運行,這顯著提高了上下級子任務之間的并行執(zhí)行能力,縮短了用戶任務整體的運行時間。
由于通過網(wǎng)絡傳輸數(shù)據(jù)本身會有一定的延時,如果發(fā)送進程每次只發(fā)送少量數(shù)據(jù),那么發(fā)送數(shù)據(jù)的次數(shù)就會變多,這樣由于網(wǎng)絡傳輸產(chǎn)生的overhead(間接成本)就會很大。另一方面,如果發(fā)送進程每次發(fā)送的數(shù)據(jù)量都較大,當需要接收進程比較多時,就會導致發(fā)送進程使用的內(nèi)存很高。為了解決發(fā)送進程何時發(fā)送中間數(shù)據(jù)的問題,在本發(fā)明其他實施例中,在步驟s603之前,也即在將待傳數(shù)據(jù)由發(fā)送進程對應的第一網(wǎng)絡端口通過網(wǎng)絡直接傳輸給所有第二網(wǎng)絡端口之前,還可以包括如下步驟:
判斷待傳數(shù)據(jù)是否大于或等于msgsize,msgsize表示發(fā)送進程每次傳輸中的發(fā)送數(shù)據(jù)長度;
在待傳數(shù)據(jù)大于或等于msgsize的情況下,啟動待傳數(shù)據(jù)的傳輸,并 確定待傳數(shù)據(jù)的發(fā)送數(shù)據(jù)長度為msgsize;
其中,msgsize=max(min(buffsize,maxmsgsize*n),minmsgsize*n)/n,
buffsize表示預設的發(fā)送進程的可用內(nèi)存上限,maxmsgsize表示預設的發(fā)送進程在一次發(fā)送中傳輸?shù)淖畲髷?shù)據(jù)長度,minmsgsize表示預設的發(fā)送進程在一次發(fā)送中傳輸?shù)淖钚?shù)據(jù)長度,n表示第二網(wǎng)絡端口的數(shù)量,“*”表示乘以運算,“/”表示除以運算。n的含義是接收進程的數(shù)量,在本實施例中,接收進程的數(shù)量等于接收端口的數(shù)量,也等于第二網(wǎng)絡端口的數(shù)量,因此,接收進程的數(shù)量就是第二網(wǎng)絡端口的數(shù)量。
上述步驟根據(jù)用戶任務的規(guī)模(指接收進程的數(shù)量)及每個發(fā)送進程可用的內(nèi)存大小計算發(fā)送進程每次傳輸中的發(fā)送數(shù)據(jù)長度,實現(xiàn)動態(tài)調(diào)節(jié),這樣就可以避免由于每次發(fā)送數(shù)據(jù)過少導致的間接成本過高的問題以及每次發(fā)送數(shù)據(jù)過大導致的內(nèi)存需求過高的問題。
待傳數(shù)據(jù)通常是以消息的形式發(fā)送的。在本發(fā)明實施例中,承載待傳數(shù)據(jù)的消息中可以攜帶第一進程標識和消息編號,其中,第一進程標識用于表明該消息的發(fā)送進程,消息編號用于表明該消息是該發(fā)送進程發(fā)送的第幾條消息。也就是說,第一進程標識用于說明消息是由“誰”發(fā)送的問題,消息編號是單調(diào)遞增的,它用于說明該消息在發(fā)送進程發(fā)送的所有消息中所處的位置問題或者說序號問題。
接收進程可以根據(jù)承載待傳數(shù)據(jù)的消息中攜帶的第一進程標識和消息編號判斷是否已經(jīng)接收到該消息,以便根據(jù)具體情況處理該消息。
第二網(wǎng)絡端口對應的進程可以記錄當前已經(jīng)從發(fā)送進程收到的最大消息編號,如果接收到的消息攜帶的消息編號大于該最大消息編號,說明接收進程第一次接收該消息,如果接收到的消息攜帶的消息編號小于或等于該最大消息編號,說明接收進程已經(jīng)收到過該消息。
據(jù)此,在本發(fā)明實施例中,在將待傳數(shù)據(jù)由發(fā)送進程對應的第一網(wǎng)絡端口通過網(wǎng)絡直接傳輸給所有第二網(wǎng)絡端口之后,還可以包括:
第二網(wǎng)絡端口接收到承載待傳數(shù)據(jù)的消息后,在該消息攜帶的消息編號大于第二網(wǎng)絡端口對應的進程記錄的當前已經(jīng)從該發(fā)送進程收到的最大消息編號的情況下,第二網(wǎng)絡端口對應的進程保存該待傳數(shù)據(jù),并將記錄的最大消息編號更新為該消息攜帶的消息編號。
或者,在本發(fā)明實施例中,在將待傳數(shù)據(jù)由發(fā)送進程對應的第一網(wǎng)絡端口通過網(wǎng)絡直接傳輸給所有第二網(wǎng)絡端口之后,還可以包括:第二網(wǎng)絡端口接收到承載待傳數(shù)據(jù)的消息后,在該消息攜帶的消息編號小于或等于第二網(wǎng)絡端口對應的進程記錄的當前已經(jīng)從該發(fā)送進程收到的最大消息編號的情況下,第二網(wǎng)絡端口對應的進程丟棄該消息,并維持記錄的最大消息編號不變。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸方法,將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。而且,本發(fā)明實施例的中間數(shù)據(jù)傳輸系統(tǒng),還顯著提高了上下級子任務之間的并行執(zhí)行能力,縮短了用戶任務整體的運行時間。
在中間數(shù)據(jù)采用圖6所示實施例中的由發(fā)送進程直接傳輸?shù)浇邮者M程的傳輸方式的情況下,可以采用超時重發(fā)機制應對可能出現(xiàn)的消息丟失(即發(fā)送進程發(fā)送的中間數(shù)據(jù)無法到達接收進程)現(xiàn)象。該超時重發(fā)機制的具體內(nèi)容可以是,發(fā)送進程向接收進程發(fā)送中間數(shù)據(jù)后,如果接收進程接收到該中間數(shù)據(jù),就向發(fā)送進程返回應答響應,告知發(fā)送進程該接收進程已經(jīng)接收到其發(fā)送的中間數(shù)據(jù);發(fā)送進程接收到應答響應后,就可以向返回應答響應的接收進程發(fā)送下一次的中間數(shù)據(jù)了。如果發(fā)送進程向接收進程發(fā)送中間數(shù)據(jù)后,接收進程沒有接收到該中間數(shù)據(jù),就不會向發(fā)送進程返回應答響應。發(fā)送進程在設定的時限內(nèi)沒有接收到應答響應,就認為沒有返回應答響應的接收進程沒有接收到該中間數(shù)據(jù),因此會向沒有返回應答響應的接收進程重發(fā)本次傳輸?shù)闹虚g數(shù)據(jù),而不會向沒有返回應答響應的接收進程發(fā)送下一次的中間數(shù)據(jù),直到發(fā)送進程接收到該接收進程返回的應答響應為止。這樣,既可以保證接收進程能夠接收到中間數(shù)據(jù),又可以使同樣的中間數(shù)據(jù)不會在網(wǎng)絡中進行多次傳輸,因此能夠節(jié)約網(wǎng)絡帶寬。
據(jù)此,本發(fā)明的中間數(shù)據(jù)傳輸方法可以采用圖7所示的流程。
圖7為本發(fā)明實施例四中中間數(shù)據(jù)傳輸方法的流程圖。如圖7所示,本實施例中,中間數(shù)據(jù)傳輸方法可以包括如下步驟:
步驟s701,確定上級子任務的單個進程本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù),其中,上級子任務的每個進程對應一個第一網(wǎng)絡端口;
步驟s702,下級子任務的每個進程對應一個第二網(wǎng)絡端口,將所有第二網(wǎng)絡端口均選為待傳數(shù)據(jù)的接收端口;
步驟s703,將待傳數(shù)據(jù)由發(fā)送進程對應的第一網(wǎng)絡端口通過網(wǎng)絡直接傳輸給所有第二網(wǎng)絡端口,其中,發(fā)送進程為產(chǎn)生待傳數(shù)據(jù)的進程;
步驟s704,在傳輸之后,判斷在設定時間內(nèi)發(fā)送進程是否接收到第二網(wǎng)絡端口對應的進程返回的應答響應,如果在設定時間內(nèi)發(fā)送進程接收到第二網(wǎng)絡端口對應的進程返回的應答響應,則執(zhí)行步驟s705,否則執(zhí)行步驟s706;
為了區(qū)分應答響應來自于哪一個接收進程,應答響應中可以攜帶第二進程標識,該第二進程標識用于表明發(fā)出該應答響應的接收進程,發(fā)送進程根據(jù)第二進程標識判斷發(fā)出該應答響應的接收進程。
步驟s705,允許發(fā)送進程通過網(wǎng)絡向返回應答響應的進程傳輸下一次的數(shù)據(jù);
步驟s706,發(fā)送進程再次將待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給未返回應答響應的一個或多個第二網(wǎng)絡端口,返回步驟s704。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸方法,將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。而且,本發(fā)明實施例的中間數(shù)據(jù)傳輸系統(tǒng),還顯著提高了上下級子任務之間的并行執(zhí)行能力,縮短了用戶任務整體的運行時間。同時,在本發(fā)明實施例中,同樣的中間數(shù)據(jù)不會在網(wǎng)絡中進行多次傳輸,因此本發(fā)明實施例的中間數(shù)據(jù)傳輸系統(tǒng),還能夠節(jié)約網(wǎng)絡帶寬。
本發(fā)明還提出了中間數(shù)據(jù)傳輸系統(tǒng),用以實施上述各實施例的中間數(shù)據(jù)傳輸方法。上述對中間數(shù)據(jù)傳輸方法的說明均適用于中間數(shù)據(jù)傳輸系統(tǒng)的相應部分。下面本發(fā)明各實施例中的中間數(shù)據(jù)傳輸系統(tǒng)都用于分布式系統(tǒng),該分布式系統(tǒng)的用戶任務包括多級子任務,這些子任務中產(chǎn)生中間數(shù)據(jù)的子任務稱為上級子任務,這些子任務中依賴中間數(shù)據(jù)進行處理的子任務稱為下級子任務。
圖8為本發(fā)明實施例五中中間數(shù)據(jù)傳輸系統(tǒng)的結構框圖。如圖8所示,本實施例中,中間數(shù)據(jù)傳輸系統(tǒng)800可以包括確定模塊810、選擇模塊820和傳輸模塊830。其中,確定模塊810用于確定上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù)。選擇模塊820用于從下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口中選擇需要接收待傳數(shù)據(jù)的網(wǎng)絡端口,記為接收端口。傳輸模塊830用于將確定模塊810確定的待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給選擇模塊820選擇的接收端口。
其中,在上級子任務有多個進程的情況下,確定模塊810所確定的待傳數(shù)據(jù)可以是上級子任務的一個進程產(chǎn)生的中間數(shù)據(jù),也可以是上級子任務的多個或全部進程產(chǎn)生的中間數(shù)據(jù)。
其中,選擇模塊820選擇的接收端口可以是下級子任務的單個進程對應的網(wǎng)絡端口,也可以為下級子任務的所有進程對應的一個或多個共同網(wǎng)絡端口。
其中,傳輸模塊830可以使用用戶根據(jù)需要制定的具體傳輸策略將待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給接收端口。例如前述本發(fā)明實施例一中列舉的傳輸策略。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸系統(tǒng),將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。
圖9為本發(fā)明實施例六中中間數(shù)據(jù)傳輸系統(tǒng)的結構框圖。如圖9所示,本實施例中,中間數(shù)據(jù)傳輸系統(tǒng)可以包括第一啟動模塊910、通知模塊920、第二啟動模塊930確定模塊940、選擇模塊950和傳輸模塊960。其中,第一啟動模塊910用于啟動下級子任務,使下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口處于監(jiān)聽狀態(tài)。通知模塊920與第一啟動模塊910相連,用于將下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口的信息通知給上級子任務。第二啟動模塊930分別與通知模塊920和確定模塊940相連,用于在下級子任務啟動之后啟動上級子任務,產(chǎn)生中間數(shù)據(jù)。確定模塊940用于確定上級子任務本次要傳輸?shù)闹虚g數(shù)據(jù),記為待傳數(shù)據(jù)。選擇模塊950用于從下級子任務的用于監(jiān)聽數(shù)據(jù)的網(wǎng)絡端口中選擇需要接收待傳數(shù)據(jù)的網(wǎng)絡端口,記 為接收端口。傳輸模塊960用于將確定模塊940確定的待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給選擇模塊950選擇的接收端口。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸系統(tǒng),將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。再者,本發(fā)明實施例中的中間數(shù)據(jù)傳輸系統(tǒng),下級子任務先于上級子任務啟動,以保證下級子任務能夠接收到上級子任務產(chǎn)生的中間數(shù)據(jù)。
圖10為本發(fā)明實施例七中中間數(shù)據(jù)傳輸系統(tǒng)的傳輸模塊的結構框圖。如圖10所示,本實施例中,中間數(shù)據(jù)傳輸系統(tǒng)的傳輸模塊1000可以包括進程間傳輸單元1010。進程間傳輸單元1010用于在待傳數(shù)據(jù)由上級子任務的單個進程產(chǎn)生,上級子任務的每個進程對應一個第一網(wǎng)絡端口,下級子任務的每個進程對應一個第二網(wǎng)絡端口,所有第二網(wǎng)絡端口均為接收端口的情況下,將待傳數(shù)據(jù)由發(fā)送進程對應的第一網(wǎng)絡端口通過網(wǎng)絡直接傳輸給所有第二網(wǎng)絡端口,其中,發(fā)送進程指產(chǎn)生待傳數(shù)據(jù)的進程。
本實施例中,中間數(shù)據(jù)由發(fā)送進程通過網(wǎng)絡直接傳輸?shù)浇邮者M程,不必經(jīng)由上級子任務收集各個發(fā)送進程產(chǎn)生的中間數(shù)據(jù)統(tǒng)一發(fā)送,也不必經(jīng)由下級子任務統(tǒng)一接收中間數(shù)據(jù)后再分別發(fā)給各個接收進程,因此可以進一步提高中間數(shù)據(jù)傳輸速率。不僅如此,接收進程可以在接收到中間數(shù)據(jù)后立即進行處理,而不必等到所有發(fā)送進程產(chǎn)生完中間數(shù)據(jù)并傳輸?shù)浇邮者M程后才能進行處理,因此,中間數(shù)據(jù)由發(fā)送進程通過網(wǎng)絡直接傳輸?shù)浇邮者M程,還可以讓接收進程在發(fā)送進程仍在產(chǎn)生中間數(shù)據(jù)的時候就能夠對已經(jīng)傳輸?shù)浇邮者M程的一部分中間數(shù)據(jù)先進行處理,也就是說,接收進程和發(fā)送進程可以并行運行,這顯著提高了上下級子任務之間的并行執(zhí)行能力,縮短了用戶任務整體的運行時間。
在圖10所示實施例的基礎上,傳輸模塊1000還可以進一步包括判斷單元和啟動單元。其中,判斷單元用于判斷待傳數(shù)據(jù)是否大于或等于msgsize,msgsize表示發(fā)送進程每次傳輸中的發(fā)送數(shù)據(jù)長度。啟動單元用于在判斷單元的判斷結果為待傳數(shù)據(jù)大于或等于msgsize的情況下,啟動進程間傳輸單元1010進行待傳數(shù)據(jù)的傳輸,并確定待傳數(shù)據(jù)的發(fā)送數(shù)據(jù) 長度為msgsize。其中,msgsize=max(min(buffsize,maxmsgsize*n),minmsgsize*n)/n,buffsize表示預設的發(fā)送進程的可用內(nèi)存上限,maxmsgsize表示預設的發(fā)送進程在一次發(fā)送中傳輸?shù)淖畲髷?shù)據(jù)長度,minmsgsize表示預設的發(fā)送進程在一次發(fā)送中傳輸?shù)淖钚?shù)據(jù)長度,n表示第二網(wǎng)絡端口的數(shù)量,“*”表示乘以運算,“/”表示除以運算。
上述判斷單元和啟動單元根據(jù)用戶任務的規(guī)模(指接收進程的數(shù)量)及每個發(fā)送進程可用的內(nèi)存大小計算發(fā)送進程每次傳輸中的發(fā)送數(shù)據(jù)長度,實現(xiàn)動態(tài)調(diào)節(jié),這樣就可以避免由于每次發(fā)送數(shù)據(jù)過少導致的間接成本過高的問題以及每次發(fā)送數(shù)據(jù)過大導致的內(nèi)存需求過高的問題。
在本發(fā)明實施例中,承載待傳數(shù)據(jù)的消息中可以攜帶第一進程標識和消息編號,其中,第一進程標識用于表明該消息的發(fā)送進程,消息編號用于表明該消息是該發(fā)送進程發(fā)送的第幾條消息。
接收進程可以根據(jù)承載待傳數(shù)據(jù)的消息中攜帶的第一進程標識和消息編號判斷是否已經(jīng)接收到該消息,以便根據(jù)具體情況處理該消息。
第二網(wǎng)絡端口對應的進程可以記錄當前已經(jīng)從發(fā)送進程收到的最大消息編號,如果接收到的消息攜帶的消息編號大于該最大消息編號,說明接收進程第一次接收該消息,如果接收到的消息攜帶的消息編號小于或等于該最大消息編號,說明接收進程已經(jīng)收到過該消息。
據(jù)此,在本發(fā)明實施例中,傳輸模塊1000可以包括保存單元。保存單元用于在第二網(wǎng)絡端口接收到承載待傳數(shù)據(jù)的消息后,在該消息攜帶的消息編號大于第二網(wǎng)絡端口對應的進程記錄的當前已經(jīng)從該發(fā)送進程(指發(fā)出待傳數(shù)據(jù)的進程)收到的最大消息編號的情況下,令第二網(wǎng)絡端口對應的進程保存待傳數(shù)據(jù),并將記錄的最大消息編號更新為該消息攜帶的消息編號。
在本發(fā)明實施例中,傳輸模塊1000還可以包括丟棄單元。丟棄單元用于在第二網(wǎng)絡端口接收到承載待傳數(shù)據(jù)的消息后,在消息攜帶的消息編號小于或等于第二網(wǎng)絡端口對應的進程記錄的當前已經(jīng)從發(fā)送進程(指發(fā)出待傳數(shù)據(jù)的進程)收到的最大消息編號的情況下,令第二網(wǎng)絡端口對應的進程丟棄該消息,并維持記錄的最大消息編號不變。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸系統(tǒng),將分布式系統(tǒng)中的中間數(shù)據(jù)由 產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。而且,本發(fā)明實施例的中間數(shù)據(jù)傳輸系統(tǒng),還顯著提高了上下級子任務之間的并行執(zhí)行能力,縮短了用戶任務整體的運行時間。
在中間數(shù)據(jù)采用圖10所示實施例中的進程間傳輸單元進行傳輸?shù)那闆r下,傳輸模塊可以采用超時重發(fā)機制應對可能出現(xiàn)的消息丟失(即發(fā)送進程發(fā)送的中間數(shù)據(jù)無法到達接收進程)現(xiàn)象。
據(jù)此,中間數(shù)據(jù)傳輸系統(tǒng)的傳輸模塊可以采用如圖11所示的結構。圖11為本發(fā)明實施例八中中間數(shù)據(jù)傳輸系統(tǒng)的傳輸模塊的結構框圖。如圖11所示,本實施例中,傳輸模塊1100可以包括進程間傳輸單元1110、響應接收單元1120。其中,進程間傳輸單元1110同前述的進程間傳輸單元1000的功能相同,此處不再贅述。響應接收單元1120用于在進程間傳輸單元1110進行傳輸之后,令發(fā)送進程接收第二網(wǎng)絡端口對應的進程返回的應答響應,該應答響應用于表示第二網(wǎng)絡端口對應的進程已經(jīng)接收到待傳數(shù)據(jù)。
參見圖11,傳輸模塊1110還可以包括許可單元1130。許可單元1130用于在響應接收單元1120接收到應答響應后,允許發(fā)送進程通過網(wǎng)絡向返回應答響應的進程傳輸下一次的數(shù)據(jù)。
參見圖11,傳輸模塊1110還可以包括重傳單元1140。重傳單元1140用于在進程間傳輸單元1110進行傳輸之后,在設定時間內(nèi)響應接收單元1120未接收到一個或多個第二網(wǎng)絡端口對應的進程返回的應答響應的情況下,令發(fā)送進程再次將待傳數(shù)據(jù)通過網(wǎng)絡直接傳輸給未返回應答響應的一個或多個第二網(wǎng)絡端口。
為了區(qū)分應答響應來自于哪一個接收進程,應答響應中可以攜帶第二進程標識,該第二進程標識用于表明發(fā)出該應答響應的接收進程,發(fā)送進程根據(jù)第二進程標識判斷發(fā)出該應答響應的接收進程。
本發(fā)明實施例中的中間數(shù)據(jù)傳輸系統(tǒng),將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響, 提高了中間數(shù)據(jù)傳輸速率。而且,本發(fā)明實施例的中間數(shù)據(jù)傳輸系統(tǒng),還顯著提高了上下級子任務之間的并行執(zhí)行能力,縮短了用戶任務整體的運行時間。同時,在本發(fā)明實施例中,同樣的中間數(shù)據(jù)不會在網(wǎng)絡中進行多次傳輸,因此本發(fā)明實施例的中間數(shù)據(jù)傳輸系統(tǒng)還能夠節(jié)約網(wǎng)絡帶寬。
圖12為本發(fā)明實施例九中分布式系統(tǒng)的結構框圖。如圖12所示,本實施例中,分布式系統(tǒng)1200可以包括中間數(shù)據(jù)傳輸系統(tǒng)。該中間數(shù)據(jù)傳輸系統(tǒng)可以是本發(fā)明前述實施例中的任一種中間數(shù)據(jù)傳輸系統(tǒng)。
本發(fā)明實施例中的分布式系統(tǒng)中包括中間數(shù)據(jù)傳輸系統(tǒng),將分布式系統(tǒng)中的中間數(shù)據(jù)由產(chǎn)生該中間數(shù)據(jù)的上級子任務通過網(wǎng)絡直接傳輸給下級子任務,中間不需要經(jīng)過分布式存儲系統(tǒng),避免了磁盤io速率對中間數(shù)據(jù)傳輸速率的影響,提高了中間數(shù)據(jù)傳輸速率。而且,本發(fā)明實施例的分布式系統(tǒng),還能夠顯著提高上下級子任務之間的并行執(zhí)行能力,縮短用戶任務整體的運行時間。同時,在本發(fā)明實施例中,同樣的中間數(shù)據(jù)不會在網(wǎng)絡中進行多次傳輸,因此本發(fā)明實施例的分布式系統(tǒng)還能夠節(jié)約網(wǎng)絡帶寬。
以上所述僅為本發(fā)明的較佳實施例,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應包含在本發(fā)明的保護范圍之內(nèi)。