本發(fā)明涉及大數(shù)據(jù)軟件技術(shù)領(lǐng)域,具體地說,本發(fā)明涉及一種大數(shù)據(jù)RPC(RPC全稱為Remote Procedure Call Protocol,即遠(yuǎn)程過程調(diào)用)的處理方法。
背景技術(shù):
當(dāng)前大數(shù)據(jù)應(yīng)用與技術(shù)處于高速發(fā)展時期,為應(yīng)對大數(shù)據(jù)的處理需求,構(gòu)建分布式軟件系統(tǒng)在所難免。分布式軟件系統(tǒng)是支持分布式處理的軟件系統(tǒng),它通常是在由通信網(wǎng)絡(luò)互聯(lián)的多處理機(jī)體系結(jié)構(gòu)上執(zhí)行任務(wù)的系統(tǒng)。例如,在分布式計算機(jī)操作系統(tǒng)中,一個分布式程序由若干個可以獨立執(zhí)行的程序模塊組成,它們分布于一個分布式處理系統(tǒng)的多臺計算機(jī)上被同時執(zhí)行。而分布式文件系統(tǒng)具有執(zhí)行遠(yuǎn)程文件存取的能力,并以透明方式對分布在網(wǎng)絡(luò)上的文件進(jìn)行管理和存取。分布式數(shù)據(jù)庫系統(tǒng)由分布于多個計算機(jī)結(jié)點上的若干個數(shù)據(jù)庫系統(tǒng)組成,它提供有效的存取手段來操縱這些結(jié)點上的子數(shù)據(jù)庫。分布式數(shù)據(jù)庫在使用上可視為一個完整的數(shù)據(jù)庫,而實際上它是分布在地理分散的各個結(jié)點上。當(dāng)然,分布在各個結(jié)點上的子數(shù)據(jù)庫在邏輯上是相關(guān)的。
現(xiàn)有技術(shù)中,很多分布式軟件系統(tǒng)是基于RPC協(xié)議(即Remote Procedure Call Protocol)構(gòu)建的。例如,分布式操作系統(tǒng)的進(jìn)程間通訊是操作系統(tǒng)必須提供的基本設(shè)施之一,分布式操作系統(tǒng)必須提供分布于異構(gòu)的結(jié)點機(jī)上進(jìn)程間的通訊機(jī)制,而RPC協(xié)議是實現(xiàn)消息傳送模式的分布式進(jìn)程間通訊的手段之一。再例如,在分布式數(shù)據(jù)庫系統(tǒng)中,數(shù)據(jù)庫一般駐存在服務(wù)器上,客戶機(jī)通過遠(yuǎn)程數(shù)據(jù)庫服務(wù)功能訪問數(shù)據(jù)庫服務(wù)器,而現(xiàn)有的遠(yuǎn)程數(shù)據(jù)庫服務(wù)是使用RPC模式的。再例如,RPC機(jī)制與RPC工具為分布式應(yīng)用程序設(shè)計提供了手段和方便,用戶可以無需知道網(wǎng)絡(luò)結(jié)構(gòu)和協(xié)議細(xì)節(jié)而直接使用RPC工具設(shè)計分布式應(yīng)用程序。
RPC的主要目的是為組件提供一種相互通信的方式,使這些組件之間能夠相互發(fā)出請求并傳遞這些請求的結(jié)果。基于RPC機(jī)制,程序可以請求網(wǎng)絡(luò)中另一臺計算機(jī)上某程序的服務(wù)而不需知道網(wǎng)絡(luò)細(xì)節(jié)。在RPC協(xié)議中,使用客戶端/服務(wù)器模型(即client/server模型)。請求程序是客戶端(client),而服務(wù)提供程序則為服務(wù)器(server)。就像一般的本地過程調(diào)用一樣,RPC是一個同步操作,直到遠(yuǎn)程過程結(jié)果返回請求程序才可以掛起。盡管如此,使用輕質(zhì)進(jìn)程或線程時,它們共享同一地址空間,是允許多個RPC并發(fā)執(zhí)行的。當(dāng)使用RPC的程序語句被編譯成可執(zhí)行程序時,一個存根(stub)將會被包括在編譯的代碼中,它相當(dāng)于遠(yuǎn)程過程代碼(有時也稱為具體實現(xiàn)代碼)的代表。當(dāng)程序運行,過程調(diào)用發(fā)生,存根收到請求并將其轉(zhuǎn)發(fā)給本地計算機(jī)中的一個客戶端運行時刻程序。這個客戶端運行時刻程序知道如何訪問遠(yuǎn)程計算機(jī)及服務(wù)器的應(yīng)用程序,它將向網(wǎng)絡(luò)發(fā)送請求遠(yuǎn)程過程的消息。類似地,服務(wù)器也包括一個運行時刻程序及與遠(yuǎn)程過程連接的存根程序,結(jié)果將以相同方式返回。以下是一個遠(yuǎn)程過程調(diào)用(RPC)的示例,它包括:
1.調(diào)用客戶端句柄;執(zhí)行傳送參數(shù)。
2.調(diào)用本地系統(tǒng)內(nèi)核發(fā)送網(wǎng)絡(luò)消息。
3.消息傳送到遠(yuǎn)程主機(jī)。
4.服務(wù)器句柄得到消息并取得參數(shù)。
5.執(zhí)行遠(yuǎn)程過程。
6.執(zhí)行的過程將結(jié)果返回服務(wù)器句柄。
7.服務(wù)器句柄返回結(jié)果,調(diào)用遠(yuǎn)程系統(tǒng)內(nèi)核。
8.消息傳回本地主機(jī)。
9.客戶端句柄由內(nèi)核接收消息。
10.客戶端接收句柄返回的數(shù)據(jù)。
綜上所述,RPC協(xié)議已被廣泛應(yīng)用到分布式軟件系統(tǒng)中,并且該協(xié)議具有諸多優(yōu)點,例如用戶可以無需知道網(wǎng)絡(luò)結(jié)構(gòu)和協(xié)議細(xì)節(jié)而直接使用RPC工具設(shè)計分布式應(yīng)用程序。然而,當(dāng)前對于大數(shù)據(jù)處理的需求越來越多,而現(xiàn)有的基于RPC協(xié)議的分布式軟件系統(tǒng)在處理大數(shù)據(jù)時暴露出了反應(yīng)速度慢,用戶體驗不佳等諸多問題。而另一方面,專門針對大數(shù)據(jù)的處理來開發(fā)全新的分布式軟件系統(tǒng)成本十分高昂,并且難以滿足用戶對于兼容性要求。
因此,當(dāng)前迫切需要一種兼容性好并且能夠提升反應(yīng)速度和用戶體驗的基于大數(shù)據(jù)的遠(yuǎn)程過程調(diào)用解決方案。
技術(shù)實現(xiàn)要素:
本發(fā)明的任務(wù)是提供一種兼容性好并且能夠提升反應(yīng)速度和用戶體驗的基于大數(shù)據(jù)的遠(yuǎn)程過程調(diào)用解決方案。
本發(fā)明提供了一種大數(shù)據(jù)RPC的處理方法,涉及客戶端和服務(wù)器端,包括下列步驟:
1)客戶端將待處理的大體積數(shù)據(jù)切分為簡單數(shù)據(jù)和剩余數(shù)據(jù)兩部分,基于所述簡單數(shù)據(jù)通過RPC機(jī)制構(gòu)建請求頭并在請求頭的結(jié)尾加入大數(shù)據(jù)標(biāo)識;
2)客戶端通過RPC底層鏈路向服務(wù)器端發(fā)送所述請求頭,并在所述請求頭發(fā)送完畢后,利用同一RPC底層鏈路以數(shù)據(jù)流的形式直接發(fā)送未做打包處理的所述剩余數(shù)據(jù);
3)服務(wù)端通過RPC底層鏈路接收數(shù)據(jù)并進(jìn)行解析,當(dāng)識別出所述大數(shù)據(jù)標(biāo)識時,立即對請求頭中攜帶的簡單數(shù)據(jù)進(jìn)行處理;同時繼續(xù)接收數(shù)據(jù)流形式的剩余數(shù)據(jù)并由所述遠(yuǎn)程服務(wù)代碼對剩余數(shù)據(jù)進(jìn)行處理;
4)服務(wù)端在獲得簡單數(shù)據(jù)的返回值后,立即基于該簡單數(shù)據(jù)的返回值通過RPC機(jī)制構(gòu)造響應(yīng)頭并在響應(yīng)頭的結(jié)尾加入大數(shù)據(jù)標(biāo)識;
5)服務(wù)端通過RPC底層鏈路將響應(yīng)頭返回給客戶端。
其中,所述客戶端包括調(diào)用者、代理對象和客戶端RPC庫;
所述步驟1)包括下列子步驟:
11)調(diào)用者將待處理的大體積數(shù)據(jù)切分為簡單數(shù)據(jù)和剩余數(shù)據(jù)兩部分,然后根據(jù)所需的處理方法調(diào)用對應(yīng)的代理對象;
12)代理對象基于所述簡單數(shù)據(jù)通過RPC機(jī)制構(gòu)建請求頭并在請求頭的結(jié)尾加入大數(shù)據(jù)標(biāo)識;
所述步驟2)包括下列子步驟:
21)代理對象調(diào)用客戶端RPC庫通過RPC底層鏈路向服務(wù)端發(fā)送所述請求頭;
22)客戶端RPC庫將請求頭發(fā)送完畢后利用同一RPC底層鏈路以數(shù)據(jù)流的形式直接發(fā)送未做打包處理的所述剩余數(shù)據(jù)。
其中,所述服務(wù)器端包括服務(wù)器端RPC庫、存根和遠(yuǎn)程服務(wù)代碼;
所述步驟3)包括下列子步驟:
31)服務(wù)端RPC庫通過RPC底層鏈路接收數(shù)據(jù)并對所接收的數(shù)據(jù)進(jìn)行解析;
32)服務(wù)端RPC庫當(dāng)識別出所述大數(shù)據(jù)標(biāo)識時,判定先前所接收的數(shù)據(jù)為請求大數(shù)據(jù)處理的請求頭,此時立即根據(jù)請求頭中攜帶信息調(diào)用對應(yīng)的存根;與此同時,服務(wù)端RPC庫繼續(xù)接收數(shù)據(jù)流形式的剩余數(shù)據(jù);
33)所述存根立即調(diào)用遠(yuǎn)程服務(wù)代碼對請求頭中攜帶的簡單數(shù)據(jù)進(jìn)行處理。
其中,所述步驟4)包括下列子步驟:
41)遠(yuǎn)程服務(wù)代碼獲得簡單數(shù)據(jù)的返回值后,立即將該簡單數(shù)據(jù)的返回值返回給所述存根;
42)所述存根立即基于該簡單數(shù)據(jù)的返回值通過RPC機(jī)制構(gòu)造響應(yīng)頭并在響應(yīng)頭的結(jié)尾加入大數(shù)據(jù)標(biāo)識。
其中,所述步驟5)包括下列子步驟:
51)所述存根構(gòu)造響應(yīng)頭完畢后立即調(diào)用服務(wù)器端RPC庫;
52)服務(wù)器端RPC庫通過RPC底層鏈路將響應(yīng)頭返回給客戶端。
其中,所述步驟41)還包括:遠(yuǎn)程服務(wù)代碼在處理完簡單數(shù)據(jù)后,繼續(xù)讀取來自于同一RPC底層鏈路的后續(xù)數(shù)據(jù)流并對后續(xù)數(shù)據(jù)流進(jìn)行處理;
所述大數(shù)據(jù)RPC的處理方法還包括步驟:
6)遠(yuǎn)程服務(wù)代碼在得到所述剩余數(shù)據(jù)的返回值后,利用服務(wù)器端RPC庫以數(shù)據(jù)流的形式向客戶端返回所述剩余數(shù)據(jù)的返回值。
其中,所述步驟6)包括下列子步驟:
61)所述服務(wù)器端RPC庫在傳輸所述響應(yīng)頭完畢后繼續(xù)維持所使用的RPC底層鏈路;
62)遠(yuǎn)程服務(wù)代碼在得到所述剩余數(shù)據(jù)的返回值后調(diào)用存根,所述存根不對所述剩余數(shù)據(jù)的返回值做打包處理,直接調(diào)用所述服務(wù)器端RPC庫;
63)所述RPC庫通過傳送所述響應(yīng)頭的RPC底層鏈路,將所述剩余數(shù)據(jù)的返回值傳輸給客戶端。
其中,所述的大數(shù)據(jù)RPC的處理方法還包括步驟:
7)客戶端RPC庫接收并解析數(shù)據(jù),當(dāng)識別出所述大數(shù)據(jù)標(biāo)識時,立即將響應(yīng)頭中攜帶的簡單數(shù)據(jù)的返回值傳送給調(diào)用者;同時客戶端RPC庫繼續(xù)接收數(shù)據(jù)流形式的剩余數(shù)據(jù)的返回值;調(diào)用者在獲得簡單數(shù)據(jù)的返回值后,繼續(xù)讀取數(shù)據(jù)流形式的剩余數(shù)據(jù)的返回值。
其中,所述大體積數(shù)據(jù)是超過預(yù)設(shè)的數(shù)據(jù)量閾值的數(shù)據(jù)文件;所述簡單數(shù)據(jù)包括大體積數(shù)據(jù)的元數(shù)據(jù);所述簡單數(shù)據(jù)的數(shù)據(jù)量遠(yuǎn)遠(yuǎn)小于所述剩余數(shù)據(jù)的數(shù)據(jù)量。
其中,所述剩余數(shù)據(jù)和所述剩余數(shù)據(jù)的返回值均以既定字節(jié)序發(fā)送。
本發(fā)明還提供了另一種大數(shù)據(jù)RPC的即時處理方法,包括下列步驟:
1)RPC調(diào)用分成兩個階段,并且不打包請求/響應(yīng),按照既定的字節(jié)序發(fā)送數(shù)據(jù);
2)第一個階段由RPC庫自身處理簡單數(shù)據(jù);
3)第二個階段由具體實現(xiàn)/調(diào)用者處理大數(shù)據(jù)流。
4)即時處理:不用等待所有數(shù)據(jù)完全傳輸完畢就可進(jìn)行處理。
其中,所述步驟1)中,RPC在調(diào)用過程中,不對請求/響應(yīng)進(jìn)行打包,這樣做時因為并不能對大數(shù)據(jù)進(jìn)行打包,而是按照既定的字節(jié)序直接發(fā)送。同樣,在做數(shù)據(jù)解析時,也是按照既定的字節(jié)序進(jìn)行解析。在此場景下,把簡單數(shù)據(jù)放于頭部,最后跟大數(shù)據(jù)流。
其中,所述步驟3)中,調(diào)用過程分為兩個階段,大數(shù)據(jù)的處理留給具體實現(xiàn)/調(diào)用者處理;第一個階段按照字節(jié)序讀取數(shù)據(jù)流的頭部數(shù)據(jù),并做解析;第二個階段是大數(shù)據(jù)RPC的即時處理方法的關(guān)鍵所在,即:處理大數(shù)據(jù)階段。
其中,所述步驟4)中,為達(dá)到即時處理的目的,只需從數(shù)據(jù)流的頭部讀取解析出必要的簡單數(shù)據(jù)(通常只有十幾個字節(jié))即可開始處理。在開始處理后,剩余的大數(shù)據(jù)部分可能仍在發(fā)送當(dāng)中。
與現(xiàn)有技術(shù)相比,本發(fā)明具有下列技術(shù)效果:
1、本發(fā)明適用于大數(shù)據(jù)場景下的遠(yuǎn)程過程調(diào)用。
2、本發(fā)明在有大數(shù)據(jù)傳輸?shù)那闆r下也能達(dá)到即時處理的效果,能夠提升用戶體驗。
3、本發(fā)明兼容傳統(tǒng)RPC。
4、本發(fā)明的整個調(diào)用過程簡單清晰,職責(zé)分明。
附圖說明
以下,結(jié)合附圖來詳細(xì)說明本發(fā)明的實施例,其中:
圖1示出了本發(fā)明一個實施例的大數(shù)據(jù)RPC的即時處理方法的流程示意圖。
具體實施方式
經(jīng)研究發(fā)現(xiàn),傳統(tǒng)RPC在大數(shù)據(jù)場景的瓶頸在于打包和解包。針對這個問題,發(fā)明人把請求/響應(yīng)分成了兩部分,數(shù)據(jù)讀取(處理)分成兩個階段。第一階段,由RPC庫按照既定的字節(jié)序從頭部讀取/解析簡單數(shù)據(jù)類型,然后調(diào)用具體實現(xiàn)/返回調(diào)用者,第二階段把讀取(處理)大數(shù)據(jù)的工作交由具體實現(xiàn)/調(diào)用者去完成。第一階段所需數(shù)據(jù)通常非常小,因此可以達(dá)到即刻處理請求目的。
根據(jù)本發(fā)明的一個實施例,提供了一種大數(shù)據(jù)RPC的即時處理方法,該方法所涉及的實體包括調(diào)用者、具體實現(xiàn)、存根以及RPC庫。其中,調(diào)用者是客戶端需要調(diào)用遠(yuǎn)程過程的程序或應(yīng)用。具體實現(xiàn)就是具體的遠(yuǎn)程過程代碼。存根相當(dāng)于遠(yuǎn)程過程代碼的代表,在Java語言中,存根一般以接口的形式出現(xiàn)。在客戶端,具有與存根對應(yīng)的代理對象,該代理對象可以通過RPC庫獲取。在Java語言中,該代理對象可以使用JDK(Java Development Kit)的動態(tài)代理或者其他字節(jié)庫獲取。本實施例中,存根是調(diào)用者、具體實現(xiàn)、RPC庫的接口信息紐帶,同時也是如何構(gòu)建請求頭/響應(yīng)頭的依據(jù)。RPC庫在網(wǎng)絡(luò)傳輸以及調(diào)用協(xié)議上做支持。調(diào)用者在調(diào)用方法時,通過RPC庫的底層鏈接,把最終調(diào)用導(dǎo)向具體實現(xiàn),具體實現(xiàn)的返回值,再次通過RPC庫的底層鏈接,返回給調(diào)用者。
本實施例中,大數(shù)據(jù)RPC的即時處理方法包括下列步驟:
步驟1:客戶端的調(diào)用者讀取大體積數(shù)據(jù),調(diào)用本地的代理對象。
步驟2:代理對象根據(jù)它所對應(yīng)的存根構(gòu)造請求頭并調(diào)用客戶端的RPC庫。其中,從所述大體積數(shù)據(jù)提取元數(shù)據(jù)信息并將其作為簡單數(shù)據(jù),然后基于簡單數(shù)據(jù),根據(jù)所對應(yīng)的存根構(gòu)造請求頭。該請求頭中含有根據(jù)存根和簡單數(shù)據(jù)生成的請求參數(shù),并且在請求頭的結(jié)尾具有大數(shù)據(jù)標(biāo)識。
步驟3:客戶端的RPC庫通過RPC庫的底層鏈接將請求頭傳輸給服務(wù)器端,在請求頭傳輸完畢后,直接利用已建立的傳輸請求頭的鏈接向客戶端以數(shù)據(jù)流的形式傳輸原大體積數(shù)據(jù)的剩余數(shù)據(jù)。在傳輸剩余數(shù)據(jù)時,按照既定字節(jié)序發(fā)送。
步驟4:服務(wù)器端的RPC庫接收并解析所接收的數(shù)據(jù)。在接收到請求頭時,服務(wù)器端的RPC庫可以解析出相應(yīng)的指令和簡單數(shù)據(jù)的請求參數(shù),當(dāng)解析出大數(shù)據(jù)標(biāo)識時,請求頭解析完畢。
步驟5:服務(wù)器端的RPC庫根據(jù)所解析出的請求頭后立即調(diào)用相應(yīng)的存根。當(dāng)解析到結(jié)尾部分時,服務(wù)器端的RPC庫可以識別出大數(shù)據(jù)標(biāo)識,此時該RPC庫繼續(xù)保持原有鏈接(即傳輸請求頭的鏈接)并接收后續(xù)的數(shù)據(jù)流,同時將后續(xù)的數(shù)據(jù)流轉(zhuǎn)發(fā)給存根。數(shù)據(jù)流的轉(zhuǎn)發(fā)僅是邏輯上的轉(zhuǎn)發(fā),在實際實現(xiàn)上,RPC庫可以僅將用于緩存數(shù)據(jù)流的緩存空間的起始地址傳遞給存根。
步驟6:存根啟動后立即調(diào)用具體實現(xiàn),即立即調(diào)用具體的遠(yuǎn)程過程代碼(或者稱為遠(yuǎn)程服務(wù)代碼)。具體實現(xiàn)基于請求頭的指令和請求參數(shù)進(jìn)行相應(yīng)數(shù)據(jù)處理(即服務(wù)所包含的各項數(shù)據(jù)處理),然后得到對應(yīng)于簡單數(shù)據(jù)的返回值。
步驟7:在獲得簡單數(shù)據(jù)的返回值后,具體實現(xiàn)根據(jù)存根傳遞的起始地址繼續(xù)讀取數(shù)據(jù)流,并對繼續(xù)對數(shù)據(jù)流進(jìn)行相應(yīng)數(shù)據(jù)處理。
步驟8:在獲得簡單數(shù)據(jù)的返回值后,具體實現(xiàn)立即將該返回值返回給存根。在獲得后續(xù)數(shù)據(jù)流的返回值時,也立即將后續(xù)數(shù)據(jù)流的返回值返回給存根。
步驟9:存根在獲得返回值后立即將其返回給RPC庫。
步驟10:RPC庫接收到具體實現(xiàn)的簡單數(shù)據(jù)的返回值后,首先構(gòu)建響應(yīng)頭(按照既定字節(jié)序發(fā)送),并在響應(yīng)頭的尾部標(biāo)識是否攜帶大數(shù)據(jù)流。然后通過RPC庫的底層鏈接將響應(yīng)頭返回至客戶端。并且,在響應(yīng)頭傳遞完畢后,繼續(xù)保留原RPC庫底層鏈接,并在接收到后續(xù)的大數(shù)據(jù)流的返回值時,使用原有底層鏈接將該返回值以數(shù)據(jù)流的形式返回給客戶端。
步驟11:客戶端的RPC庫接收服務(wù)端返回的數(shù)據(jù)并進(jìn)行解析。當(dāng)接收并解析出響應(yīng)頭時,客戶端的RPC庫能夠得出簡單數(shù)據(jù)的返回值(這個返回值通常也是簡單數(shù)據(jù))。在解析到大數(shù)據(jù)標(biāo)識時,可認(rèn)定響應(yīng)頭接收完畢后,繼續(xù)接收后續(xù)的大數(shù)據(jù)流返回值。
步驟12:當(dāng)響應(yīng)頭接收完畢時,客戶端的RPC庫立即將簡單數(shù)據(jù)的返回值返回給代理對象。同時,RPC庫將后續(xù)大數(shù)據(jù)流返回值的緩存地址提供給代理對象。
步驟13:代理對象將簡單數(shù)據(jù)的返回值返回給調(diào)用者,同時,將后續(xù)大數(shù)據(jù)流返回值的緩存地址提供給調(diào)用者。
步驟14:調(diào)用者獲取簡單數(shù)據(jù)的返回值,其后根據(jù)緩存地址讀取后續(xù)的大數(shù)據(jù)流返回值。
通過以上步驟就完成了一次RPC調(diào)用。
本實施例與傳統(tǒng)RPC實現(xiàn)辦法不同,它的客戶端RPC庫不會把大體積數(shù)據(jù)的請求參數(shù)等信息完全打包發(fā)送,服務(wù)器端也不會等待完全讀取網(wǎng)絡(luò)數(shù)據(jù)后再進(jìn)行解包。這能夠避免打包和解包過程中需要獲取全部數(shù)據(jù),降低了對計算機(jī)內(nèi)存的要求,同時提高了遠(yuǎn)程過程的響應(yīng)速度。
本實施例中,為達(dá)到即時處理的目的,只需從數(shù)據(jù)流的頭部讀取解析出必要的簡單數(shù)據(jù)(通常只有十幾個字節(jié))即可開始處理。在開始處理后,剩余的大數(shù)據(jù)部分可能仍在發(fā)送當(dāng)中。也就是說,本發(fā)明在有大數(shù)據(jù)傳輸?shù)那闆r下也能達(dá)到即時處理的效果,能夠提升用戶體驗。而另一方面,本實施例具有很好的兼容性,對現(xiàn)有的RPC機(jī)制不需要做大量的改動,有利于對已有的海量的分布式程序(應(yīng)用)進(jìn)行移植,使之能夠適應(yīng)大數(shù)據(jù)處理的需求。
上述實施例中,請求頭的構(gòu)造方法與現(xiàn)有的RPC機(jī)制中的請求消息的構(gòu)造方法是一致的,區(qū)別僅在于:a)本發(fā)明實施例的大數(shù)據(jù)RPC即時處理方法中,在構(gòu)造請求頭時輸入的是簡單數(shù)據(jù)而不是全部數(shù)據(jù);以及b)本發(fā)明實施例的大數(shù)據(jù)RPC即時處理方法中,在請求頭的結(jié)尾處打上了大數(shù)據(jù)標(biāo)識。因此,在客戶端,僅需要將原始的大體積數(shù)據(jù)替換成簡單數(shù)據(jù)輸入,然后直接調(diào)用現(xiàn)有的RPC機(jī)制的請求消息構(gòu)造模塊,即可生成請求頭的主體部分,然后再在請求頭的結(jié)尾處加入大數(shù)據(jù)標(biāo)識,即可得到所需的請求頭。這個請求頭在在服務(wù)器端可被視為請求消息,可以直接作為請求消息進(jìn)行解析和處理,因此與現(xiàn)有的RPC機(jī)制是完全兼容的。另一方面,客戶端還增加了以數(shù)據(jù)流的形式直接傳輸剩余數(shù)據(jù)的操作,這個數(shù)據(jù)流是緊接著請求頭的,使用同一RPC底層鏈接。在服務(wù)器端,RPC庫僅需要增加識別大數(shù)據(jù)標(biāo)識的步驟,并在識別出大數(shù)據(jù)標(biāo)識時,繼續(xù)保持RPC底層鏈路并繼續(xù)接收數(shù)據(jù)流;以及為遠(yuǎn)程服務(wù)代碼提供該RPC底層鏈路傳送的后續(xù)數(shù)據(jù)流的緩存地址或指針,讓遠(yuǎn)程服務(wù)代碼處理完請求頭后繼續(xù)對后續(xù)數(shù)據(jù)流進(jìn)行處理即可。此時,遠(yuǎn)程服務(wù)代碼可直接讀取后續(xù)數(shù)據(jù)流,避免了數(shù)據(jù)流中數(shù)據(jù)的打包和解包操作。因此,上述改進(jìn)后的機(jī)制能夠在兼容現(xiàn)有RPC機(jī)制的基礎(chǔ)上,使用較小的改造,即可大幅提高遠(yuǎn)程調(diào)用的響應(yīng)速度,特別適應(yīng)大數(shù)據(jù)分布式處理的需要。
在實際應(yīng)用時,調(diào)用者通常是可執(zhí)行程序,例如exe程序。一臺運行主程序的主機(jī)可以利用本發(fā)明的RPC機(jī)制遠(yuǎn)程調(diào)用多個其他主機(jī)來執(zhí)行該主程序的各個子進(jìn)程,從而加快數(shù)據(jù)處理速度。而本發(fā)明能夠很好地克服在處理大數(shù)據(jù)時主程序與遠(yuǎn)程子進(jìn)程之間參數(shù)傳遞的延遲問題,從而提高了分布式大數(shù)據(jù)處理的響應(yīng)速度。
在一個實施例中,代理對象和存根可合并成一個模塊,稱為代理存根,此時,分布式系統(tǒng)中的各個節(jié)點既可以作為客戶端調(diào)用其他遠(yuǎn)程服務(wù)器,可以作為服務(wù)器端被其他客戶端調(diào)用。
在一個實施例中,大體積數(shù)據(jù)可以用數(shù)據(jù)量閾值來判定,例如某數(shù)據(jù)文件的數(shù)據(jù)量大于某一預(yù)設(shè)的數(shù)據(jù)量閾值時,則判定該數(shù)據(jù)文件為大體積數(shù)據(jù)。大體積數(shù)據(jù)可以是大尺寸視頻、音頻、書籍等各種類型的數(shù)據(jù)文件,也可以是記錄了海量用戶行為特征的數(shù)據(jù)文件。
在一個實施例中,簡單數(shù)據(jù)是所述大體積數(shù)據(jù)的元數(shù)據(jù)。元數(shù)據(jù)是關(guān)于數(shù)據(jù)的組織、數(shù)據(jù)域及其關(guān)系的信息,簡言之,元數(shù)據(jù)就是關(guān)于數(shù)據(jù)的數(shù)據(jù)。剩余數(shù)據(jù)則是除去元數(shù)據(jù)以外的其它數(shù)據(jù)。
在另一個實施例中,簡單數(shù)據(jù)可以是元數(shù)據(jù)加上少量的其它數(shù)據(jù)。這里其它數(shù)據(jù)是指含有主要的待處理內(nèi)容的數(shù)據(jù)。優(yōu)選地,簡單數(shù)據(jù)包括元數(shù)據(jù)加上其它數(shù)據(jù)的少量的開頭部分。這樣的優(yōu)勢是在某些應(yīng)用場合調(diào)用者可以較快地獲得響應(yīng),并向用戶呈現(xiàn)開頭部分的處理結(jié)果,從而提升用戶體驗。
最后應(yīng)說明的是,以上實施例僅用以描述本發(fā)明的技術(shù)方案而不是對本技術(shù)方法進(jìn)行限制,本發(fā)明在應(yīng)用上可以延伸為其它的修改、變化、應(yīng)用和實施例,并且因此認(rèn)為所有這樣的修改、變化、應(yīng)用、實施例都在本發(fā)明的精神和教導(dǎo)范圍內(nèi)。