本技術實施例涉及計算機,尤其涉及一種數(shù)據(jù)處理方法及相關裝置。
背景技術:
1、在計算機流式分析處理業(yè)務技術領域,基于流數(shù)據(jù)的計算業(yè)務(比如在線金融量化分析或云視頻處理等業(yè)務)中往往會有頻繁的函數(shù)間流數(shù)據(jù)傳輸。例如,函數(shù)a不斷地生產(chǎn)有序無界的流數(shù)據(jù),而函數(shù)b則需要不斷地對函數(shù)a所生產(chǎn)的流數(shù)據(jù)進行處理。
2、為了實現(xiàn)函數(shù)間的流數(shù)據(jù)傳輸,業(yè)界普遍采用如下方法:通過云平臺的函數(shù)即服務(function?as?aservice,faas)來實現(xiàn)計算業(yè)務,并通過后端即服務(backend?as?aservice,baas)來存儲faas所生產(chǎn)的數(shù)據(jù)。這樣一來,faas中作為數(shù)據(jù)生產(chǎn)方的函數(shù)可以將生產(chǎn)得到的流數(shù)據(jù)傳輸給baas,并由baas進行存儲和管理;faas中作為數(shù)據(jù)使用方的函數(shù)可以隨時從baas中獲取所需要的流數(shù)據(jù)。
3、然而,相關技術中基于faas和baas來實現(xiàn)函數(shù)間的流數(shù)據(jù)傳輸,實際上是跨服務來搬運數(shù)據(jù),數(shù)據(jù)搬運的時延較大,導致數(shù)據(jù)的流轉(zhuǎn)性能較差,容易影響業(yè)務的正常運行。
技術實現(xiàn)思路
1、本技術提供了一種數(shù)據(jù)處理方法,能夠提高數(shù)據(jù)的流轉(zhuǎn)性能。
2、本技術第一方面提供一種數(shù)據(jù)處理方法,該方法應用于第一計算節(jié)點中的第一數(shù)據(jù)流緩存實例。其中,第一計算節(jié)點是用于執(zhí)行基于流數(shù)據(jù)的計算業(yè)務。該方法具體包括:第一數(shù)據(jù)流緩存實例首先獲取數(shù)據(jù)訂閱關系,數(shù)據(jù)訂閱關系用于指示第一對象為數(shù)據(jù)生產(chǎn)方且第二對象為數(shù)據(jù)使用方,即第二對象需要使用由第一對象所生產(chǎn)的數(shù)據(jù)。其中,第一對象所生產(chǎn)的數(shù)據(jù)實際上是指由第一對象生成的數(shù)據(jù)。
3、然后,第一數(shù)據(jù)流緩存實例獲取第一對象發(fā)送的第一通知消息,第一通知消息用于指示第一對象生產(chǎn)的第一數(shù)據(jù)在第一內(nèi)存中的第一位置,且第一內(nèi)存為第一對象和第二對象均能夠訪問的共享內(nèi)存。也就是說,第一對象是在生產(chǎn)第一數(shù)據(jù)后則將第一數(shù)據(jù)存儲至第一內(nèi)存中,并且將第一數(shù)據(jù)的存儲位置通知給第一數(shù)據(jù)流緩存實例。
4、最后,第一數(shù)據(jù)流緩存實例向第二對象發(fā)送第二通知消息,第二通知消息用于指示第二對象從第一內(nèi)存中的第一位置獲取第一數(shù)據(jù)?;诘诙ㄖ?,第二對象能夠從第一內(nèi)存中獲取到第一對象所生產(chǎn)的數(shù)據(jù)。
5、本方案中,通過獲取預先建立的數(shù)據(jù)訂閱關系,明確數(shù)據(jù)生產(chǎn)對象以及數(shù)據(jù)使用對象。并且,由數(shù)據(jù)生產(chǎn)對象將生產(chǎn)得到的數(shù)據(jù)存儲至共享內(nèi)存中,進而通過向數(shù)據(jù)使用對象通知已生產(chǎn)的數(shù)據(jù)在共享內(nèi)存中的位置,即可實現(xiàn)數(shù)據(jù)使用對象從共享內(nèi)存中獲取所需的數(shù)據(jù),避免了數(shù)據(jù)的搬運,有效地降低了數(shù)據(jù)傳輸?shù)臅r延,提高了數(shù)據(jù)的流轉(zhuǎn)性能。
6、在一種可能的實現(xiàn)方式中,第一對象和第二對象位于第一計算節(jié)點,且第一內(nèi)存為第一計算節(jié)點中的共享內(nèi)存。也就是說,第一對象、第二對象和第一數(shù)據(jù)流緩存實例都是位于同一個計算節(jié)點上,第一對象和第二對象是通過同一個計算節(jié)點上的共享內(nèi)存來實現(xiàn)數(shù)據(jù)的流轉(zhuǎn)。
7、本方案中,通過利用計算節(jié)點上的空閑內(nèi)存來作為共享內(nèi)存供數(shù)據(jù)生產(chǎn)對象和數(shù)據(jù)使用對象共享使用,能夠避免數(shù)據(jù)從數(shù)據(jù)生產(chǎn)對象所維護的內(nèi)存空間搬運到數(shù)據(jù)使用對象所維護的內(nèi)存空間,減少了繁瑣的數(shù)據(jù)搬運過程,能夠有效地提高數(shù)據(jù)流轉(zhuǎn)效率。
8、在一種可能的實現(xiàn)方式中,數(shù)據(jù)訂閱關系還用于指示第三對象為數(shù)據(jù)使用方,第三對象位于第二計算節(jié)點。即,位于第二計算節(jié)點上的第三對象也訂閱了位于第一計算節(jié)點上的第一對象所生產(chǎn)的數(shù)據(jù)。
9、在獲得第一對象發(fā)送的第一通知消息后,第一數(shù)據(jù)流緩存實例根據(jù)第一通知消息從第一內(nèi)存中獲取第一數(shù)據(jù),并向第二計算節(jié)點中的第二數(shù)據(jù)流緩存實例發(fā)送第一數(shù)據(jù)。其中,第二數(shù)據(jù)流緩存實例與第一數(shù)據(jù)流緩存實例的作用類似,第二數(shù)據(jù)流緩存實例具體用于為第三對象提供由第一對象生產(chǎn)的數(shù)據(jù)。
10、本方案中,在數(shù)據(jù)生產(chǎn)對象和數(shù)據(jù)使用對象位于不同節(jié)點的情況下,通過在每個節(jié)點上設置數(shù)據(jù)流緩存實例,并由數(shù)據(jù)流緩存實例基于預先獲取的數(shù)據(jù)訂閱關系來自動實現(xiàn)跨節(jié)點的數(shù)據(jù)推送,能夠避免數(shù)據(jù)使用對象和數(shù)據(jù)生產(chǎn)對象間跨節(jié)點的數(shù)據(jù)請求過程,保證數(shù)據(jù)流轉(zhuǎn)的效率。
11、在一種可能的實現(xiàn)方式中,第三對象包括位于第二計算節(jié)點的多個對象,第二數(shù)據(jù)流緩存實例用于緩存第一數(shù)據(jù)流緩存實例所發(fā)送的數(shù)據(jù)并為多個對象提供所緩存的數(shù)據(jù)。其中,第二計算節(jié)點是用于執(zhí)行基于流數(shù)據(jù)的計算業(yè)務。
12、例如,第二數(shù)據(jù)流緩存實例可以是將第二計算節(jié)點上的一片空閑內(nèi)存分配為供多個對象訪問的共享內(nèi)存。這樣,第二數(shù)據(jù)流緩存實例可以將接收到的第一數(shù)據(jù)緩存至第二內(nèi)存中(即第二數(shù)據(jù)流緩存實例所分配的共享內(nèi)存),并向第三對象所包括的多個對象發(fā)送第四通知消息。第三對象所包括的多個對象在接收到第四通知消息后,則可以基于第四通知消息從第二內(nèi)存中獲取到由第一對象所生產(chǎn)的第一數(shù)據(jù)。
13、本方案中,通過數(shù)據(jù)流緩存實例來緩存其他節(jié)點上的數(shù)據(jù)生產(chǎn)對象所生產(chǎn)的數(shù)據(jù),并由數(shù)據(jù)流緩存實例向同節(jié)點上的多個數(shù)據(jù)使用對象提供所緩存的數(shù)據(jù)(即數(shù)據(jù)收發(fā)過程都經(jīng)過節(jié)點上的緩存服務),能夠保證同一個數(shù)據(jù)生產(chǎn)對象所生產(chǎn)的數(shù)據(jù)只需要跨節(jié)點傳輸一次,而無需針對不同的數(shù)據(jù)使用對象反復傳輸相同的數(shù)據(jù),避免了數(shù)據(jù)的重復傳輸,提高了數(shù)據(jù)的流轉(zhuǎn)效率。
14、在一種可能的實現(xiàn)方式中,第一數(shù)據(jù)為第一對象生產(chǎn)的流數(shù)據(jù)中的部分數(shù)據(jù)。即,第一對象在運行期間是不斷地生產(chǎn)流數(shù)據(jù)的,而第一數(shù)據(jù)僅僅是第一對象所生產(chǎn)的流數(shù)據(jù)中的一部分數(shù)據(jù)。
15、其中,流數(shù)據(jù)是指隨時間延續(xù)而無限增長的動態(tài)數(shù)據(jù)集合。
16、在一種可能的實現(xiàn)方式中,第一數(shù)據(jù)流緩存實例還可以獲取數(shù)據(jù)游標,該數(shù)據(jù)游標用于指示第二對象已使用完畢的最后一部分數(shù)據(jù)在流數(shù)據(jù)中的位置。這樣,第一數(shù)據(jù)流緩存實例可以是基于數(shù)據(jù)游標,向第二對象發(fā)送第二通知消息,其中第一數(shù)據(jù)在流數(shù)據(jù)中的位置位于數(shù)據(jù)游標所指示的位置之后。也就是說,第一數(shù)據(jù)流緩存實例向第二對象所發(fā)送的第二通知消息中所指示的數(shù)據(jù)在流數(shù)據(jù)中的位置必須是位于數(shù)據(jù)游標所指示的位置后,即第二通知消息中所指示的數(shù)據(jù)是第二對象未使用過的。
17、本方案中,通過數(shù)據(jù)游標來記錄數(shù)據(jù)使用對象已使用完畢的數(shù)據(jù)在流數(shù)據(jù)中的位置,能夠確保數(shù)據(jù)流緩存實例確認每個數(shù)據(jù)使用對象針對于流數(shù)據(jù)的數(shù)據(jù)使用進度,從而保證數(shù)據(jù)流緩存實例向數(shù)據(jù)使用對象反饋的通知消息中所指示的數(shù)據(jù)是數(shù)據(jù)使用對象未使用的數(shù)據(jù),保證數(shù)據(jù)使用對象能夠有序地獲取并處理流數(shù)據(jù)中的每部分數(shù)據(jù)。
18、在一種可能的實現(xiàn)方式中,在第二對象成功從第一內(nèi)存中獲取第一數(shù)據(jù)后,第一數(shù)據(jù)流緩存實例可以獲取第二對象發(fā)送的第三通知消息,第三通知消息用于指示第二對象已使用完畢第一數(shù)據(jù)。基于第三通知消息,第一數(shù)據(jù)流緩存實例可以更新第二對象對應的數(shù)據(jù)游標。并且,在基于第三通知消息確認所有的數(shù)據(jù)使用對象均使用完畢第一數(shù)據(jù)后,第一數(shù)據(jù)流緩存實例可以回收第一內(nèi)存中用于存儲第一數(shù)據(jù)的內(nèi)存區(qū)域,即釋放存儲第一數(shù)據(jù)的內(nèi)存空間,以便于將原先用于存儲第一數(shù)據(jù)的內(nèi)存空間分配給數(shù)據(jù)生產(chǎn)對象來存儲新的數(shù)據(jù)。
19、本方案中,數(shù)據(jù)使用對象在使用完畢數(shù)據(jù)后向數(shù)據(jù)流緩存實例返回數(shù)據(jù)使用完畢的通知消息,使得數(shù)據(jù)流緩存實例能夠獲知各個數(shù)據(jù)使用對象對于內(nèi)存中所存儲的流數(shù)據(jù)的使用情況,進而保證數(shù)據(jù)流緩存實例能夠及時地回收存儲著已被所有數(shù)據(jù)使用對象使用完畢的數(shù)據(jù)的內(nèi)存區(qū)域,避免內(nèi)存中存儲著過多無用的數(shù)據(jù),提高了內(nèi)存資源的利用率,同時能夠有效地節(jié)省流數(shù)據(jù)所占用的內(nèi)存空間。
20、在一種可能的實現(xiàn)方式中,數(shù)據(jù)訂閱關系是第一數(shù)據(jù)流緩存實例通過接收第一對象發(fā)送的生產(chǎn)方創(chuàng)建消息以及第二對象發(fā)送的數(shù)據(jù)訂閱消息獲取得到的。其中,生產(chǎn)方創(chuàng)建消息用于指示第一對象生產(chǎn)對應于第一流標識的數(shù)據(jù),數(shù)據(jù)訂閱消息用于指示第二對象訂閱對應于第一流標識的數(shù)據(jù)。
21、在一種可能的實現(xiàn)方式中,第一對象和第二對象均包括一個或多個對象。即,作為數(shù)據(jù)生產(chǎn)方的對象可以包括一個或多個,作為數(shù)據(jù)使用方的對象也可以是包括一個或多個。在第一對象包括多個對象的情況下,該多個對象所生產(chǎn)的數(shù)據(jù)共同構成供數(shù)據(jù)使用方所使用的數(shù)據(jù),第二對象所包括的一個或多個對象則訂閱使用由第一對象所包括的多個對象所生產(chǎn)的數(shù)據(jù)。
22、本方案中,在具有多個數(shù)據(jù)使用對象的情況下,基于共享內(nèi)存來實現(xiàn)數(shù)據(jù)的流轉(zhuǎn),可以保證一份數(shù)據(jù)能夠供多個數(shù)據(jù)使用對象訪問并獲取,避免數(shù)據(jù)生產(chǎn)對象反復向不同的數(shù)據(jù)使用對象發(fā)送相同的數(shù)據(jù),提高數(shù)據(jù)流轉(zhuǎn)性能。并且,通過數(shù)據(jù)流緩存實例來維護不同對象間的數(shù)據(jù)訂閱關系,可以使得數(shù)據(jù)生產(chǎn)對象以及數(shù)據(jù)使用對象均不需要維護數(shù)據(jù)訂閱關系。這樣一來,數(shù)據(jù)生產(chǎn)對象可以專注于將生產(chǎn)得到的數(shù)據(jù)存儲至第一內(nèi)存中,而數(shù)據(jù)使用對象也無需主動請求獲取來自于數(shù)據(jù)生產(chǎn)對象的數(shù)據(jù),保證在數(shù)據(jù)流轉(zhuǎn)過程中不涉及數(shù)據(jù)訂閱關系的交互,提高了數(shù)據(jù)流轉(zhuǎn)的效率。
23、在一種可能的實現(xiàn)方式中,第一對象和第二對象為進程、線程、超線程或函數(shù)。
24、本技術第二方面提供一種數(shù)據(jù)處理裝置,包括:獲取模塊,用于獲取數(shù)據(jù)訂閱關系,數(shù)據(jù)訂閱關系用于指示第一對象為數(shù)據(jù)生產(chǎn)方且第二對象為數(shù)據(jù)使用方;獲取模塊,還用于獲取第一對象發(fā)送的第一通知消息,第一通知消息用于指示第一對象生產(chǎn)的第一數(shù)據(jù)在第一內(nèi)存中的第一位置,第一內(nèi)存為第一對象和第二對象均能夠訪問的共享內(nèi)存;發(fā)送模塊,用于向第二對象發(fā)送第二通知消息,第二通知消息用于指示第二對象從第一內(nèi)存中的第一位置獲取第一數(shù)據(jù)。
25、在一種可能的實現(xiàn)方式中,該數(shù)據(jù)處理裝置運行有第一計算節(jié)點中的第一數(shù)據(jù)流緩存實例,第一對象和第二對象位于第一計算節(jié)點,且第一內(nèi)存為第一計算節(jié)點中的共享內(nèi)存。
26、在一種可能的實現(xiàn)方式中,數(shù)據(jù)訂閱關系還用于指示第三對象為數(shù)據(jù)使用方,第三對象位于第二計算節(jié)點;發(fā)送模塊,還用于向第二計算節(jié)點中的第二數(shù)據(jù)流緩存實例發(fā)送第一數(shù)據(jù),第二數(shù)據(jù)流緩存實例用于為第三對象提供由第一對象生產(chǎn)的數(shù)據(jù)。
27、在一種可能的實現(xiàn)方式中,第三對象包括位于第二計算節(jié)點的多個對象,第二數(shù)據(jù)流緩存實例用于緩存第一數(shù)據(jù)流緩存實例所發(fā)送的數(shù)據(jù)并為多個對象提供所緩存的數(shù)據(jù)。
28、在一種可能的實現(xiàn)方式中,第一數(shù)據(jù)為第一對象生產(chǎn)的流數(shù)據(jù)中的部分數(shù)據(jù)。
29、在一種可能的實現(xiàn)方式中,獲取模塊,還用于獲取數(shù)據(jù)游標,數(shù)據(jù)游標用于指示第二對象已使用完畢的最后一部分數(shù)據(jù)在流數(shù)據(jù)中的位置;
30、發(fā)送模塊,還用于基于數(shù)據(jù)游標,向第二對象發(fā)送第二通知消息,其中第一數(shù)據(jù)在流數(shù)據(jù)中的位置位于數(shù)據(jù)游標所指示的位置之后。
31、在一種可能的實現(xiàn)方式中,獲取模塊,還用于獲取第二對象發(fā)送的第三通知消息,第三通知消息用于指示第二對象已使用完畢第一數(shù)據(jù);
32、裝置還包括:處理模塊,用于回收第一內(nèi)存中用于存儲第一數(shù)據(jù)的內(nèi)存區(qū)域。
33、在一種可能的實現(xiàn)方式中,數(shù)據(jù)訂閱關系是通過接收第一對象發(fā)送的生產(chǎn)方創(chuàng)建消息以及第二對象發(fā)送的數(shù)據(jù)訂閱消息獲取得到的,生產(chǎn)方創(chuàng)建消息用于指示第一對象生產(chǎn)對應于第一流標識的數(shù)據(jù),數(shù)據(jù)訂閱消息用于指示第二對象訂閱對應于第一流標識的數(shù)據(jù)。
34、在一種可能的實現(xiàn)方式中,第一對象和第二對象均包括一個或多個對象。
35、在一種可能的實現(xiàn)方式中,第一對象和第二對象為進程、線程、超線程或函數(shù)。
36、本技術第三方面提供一種數(shù)據(jù)處理裝置,該數(shù)據(jù)處理裝置包括:存儲器和處理器;該存儲器存儲有代碼,該處理器被配置為執(zhí)行代碼,當代碼被執(zhí)行時,所述數(shù)據(jù)處理裝置執(zhí)行如第一方面中的任意一種實現(xiàn)方式的方法。
37、本技術第四方面提供一種計算機可讀存儲介質(zhì),該計算機可讀存儲介質(zhì)中存儲有計算機程序,當其在計算機上運行時,使得計算機執(zhí)行如第一方面中的任意一種實現(xiàn)方式的方法。
38、本技術第五方面提供一種計算機程序產(chǎn)品,當其在計算機上運行時,使得計算機執(zhí)行如第一方面中的任意一種實現(xiàn)方式的方法。
39、本技術第六方面提供一種芯片,包括一個或多個處理器。處理器中的部分或全部用于讀取并執(zhí)行存儲器中存儲的計算機程序,以執(zhí)行上述第一方面中的任意一種實現(xiàn)方式中的方法。
40、可選地,該芯片該包括存儲器,該存儲器與該處理器通過電路或電線與存儲器連接??蛇x地,該芯片還包括通信接口,處理器與該通信接口連接。通信接口用于接收需要處理的數(shù)據(jù)和/或信息,處理器從該通信接口獲取該數(shù)據(jù)和/或信息,并對該數(shù)據(jù)和/或信息進行處理,并通過該通信接口輸出處理結果。該通信接口可以是輸入輸出接口。本技術提供的方法可以由一個芯片實現(xiàn),也可以由多個芯片協(xié)同實現(xiàn)。
41、其中,第二方面至第六方面中任一種設計方式所帶來的技術效果可參見上述第一方面中不同實現(xiàn)方式所帶來的技術效果,在此不再贅述。