本發(fā)明涉及通信領(lǐng)域,尤其涉及一種實(shí)時處理遠(yuǎn)程同步文件的方法及系統(tǒng)。
背景技術(shù):
為了分析用戶偏好以進(jìn)行營銷等,需要使用大量的用戶行為數(shù)據(jù),目前在公交車、購物中心、廣場等公共場所一般安裝wifi設(shè)備,提供免費(fèi)上網(wǎng)入口,從而得到用戶行為數(shù)據(jù)。盡管單臺移動上網(wǎng)設(shè)備接入到wifi設(shè)備產(chǎn)生的數(shù)據(jù)量不大,但在人流量大的公共場所,接入的移動上網(wǎng)設(shè)備多,導(dǎo)致需要處理的數(shù)據(jù)量也日益增加。因?yàn)閣ifi設(shè)備不僅要為接入的移動上網(wǎng)設(shè)備提供上網(wǎng)沖浪服務(wù),還要上傳用戶行為日志記錄,如果將wifi設(shè)備采集到的數(shù)據(jù)直接上傳到服務(wù)器,會對wifi設(shè)備的網(wǎng)絡(luò)帶寬有很高的要求,對于使用移動網(wǎng)絡(luò)提供上網(wǎng)服務(wù)的wifi設(shè)備而言,可用的帶寬資源就更加窘迫,為了能夠減少數(shù)據(jù)傳輸所需的帶寬和消耗的流量,提高數(shù)據(jù)上傳的速度,一般會在數(shù)據(jù)上傳之前對數(shù)據(jù)進(jìn)行壓縮打包處理。對數(shù)據(jù)壓縮打包解決了數(shù)據(jù)傳輸?shù)膯栴},但引來了新的問題。為了使用這些數(shù)據(jù),需要對壓縮文件進(jìn)行解壓以及相關(guān)的預(yù)處理,而為了提高數(shù)據(jù)的實(shí)時性,一般數(shù)據(jù)壓縮上傳的間隔設(shè)定比較短,如5分鐘,使得產(chǎn)生了大量需要待處理的壓縮文件。
現(xiàn)有的常用方案是等待當(dāng)天文件傳輸完畢后,啟動離線批處理的程序?qū)θ课募M(jìn)行一次性解壓,這種方法簡單,且無需做其他的特殊處理,但受到網(wǎng)絡(luò)的限制,等待文件同步完成常需要較長的時間,而這個時間點(diǎn)不可預(yù)知。等待所有文件傳輸完畢才能執(zhí)行操作,這使得數(shù)據(jù)利用有較大的時延;另一種方法是每間隔一段時間查找獲得當(dāng)前目錄下的文件列表,對比上一時間掃描得到的文件列表,對新增的文件進(jìn)行解壓,當(dāng)文件數(shù)量較少時,該方法可以做到接近實(shí)時,設(shè)置的關(guān)鍵在于間隔時長,但隨時間推移,文件數(shù)量增加,掃描的時間增長,對比需要花費(fèi)的時間也隨之增加,使得檢測新增文件消耗不少資源。
目前現(xiàn)有技術(shù)提供的方法是等待文件傳輸完畢執(zhí)行離線批處理或者通過間斷掃描目標(biāo)目錄對檢測到的新文件進(jìn)行處理。前者是一種較為直接的方法,但 只適合于對實(shí)時需求不高,且離線批處理性能較優(yōu)時使用。后者提供了一個接近實(shí)時的處理方法,但其伴隨產(chǎn)生了額外不斷增長的資源消耗。
技術(shù)實(shí)現(xiàn)要素:
提供一種實(shí)時處理遠(yuǎn)程同步文件的方法,其解決了現(xiàn)有技術(shù)的無法實(shí)時處理文件以及增加額外的資源消耗的缺點(diǎn)。
一方面,提供一種實(shí)時處理遠(yuǎn)程同步文件的方法,所述方法包括如下步驟:
從遠(yuǎn)程主機(jī)同步文件到指定目標(biāo)文件夾;
對所述目標(biāo)文件夾進(jìn)行文件操作監(jiān)控;
對目標(biāo)監(jiān)控行為進(jìn)行檢查,如檢查出被操作文件符合要求的,將文件路徑作為消息發(fā)送到消息系統(tǒng);
多個文件處理實(shí)例從消息系統(tǒng)獲取消息,所述消息包括:文件路徑,執(zhí)行具體的文件處理操作。
可選的,所述從遠(yuǎn)程主機(jī)同步到指定目標(biāo)文件夾具體,包括:
使用linux系統(tǒng)上的遠(yuǎn)程同步命令rsync將所述遠(yuǎn)程主機(jī)同步到指定目標(biāo)文件夾。
可選的,所述對所述目標(biāo)文件夾進(jìn)行文件操作監(jiān)控具體,包括:
使用基于linux系統(tǒng)上inotify功能開發(fā)的python庫pyinotify對所述目標(biāo)文件進(jìn)行操作監(jiān)控。
可選的,所述從遠(yuǎn)程主機(jī)同步到指定目標(biāo)文件夾具體,包括:
將每天的數(shù)據(jù)分別同步到對應(yīng)的指定目標(biāo)文件夾。
可選的,所述方法還包括:將日期作為主題,將該主題劃分成多個分塊。
可選的,所述多個文件處理實(shí)例從消息系統(tǒng)獲取消息具體,包括:
使用多個進(jìn)程從所述消息系統(tǒng)的一個主題的不同分塊獲取消息。
可選的,所述對目標(biāo)監(jiān)控行為進(jìn)行檢查,如檢查出被操作文件符合要求的,將文件路徑作為消息發(fā)送到消息系統(tǒng)具體,包括:
實(shí)時將被監(jiān)控文件夾內(nèi)的文件操作進(jìn)行條件判斷,將符合目標(biāo)要求的操作記錄的文件路徑發(fā)送到消息系統(tǒng)。
可選的,所述執(zhí)行具體的文件處理操作具體,包括:
使用并行算法執(zhí)行具體的文件處理操作。
本發(fā)明具體實(shí)施方式提供的技術(shù)方案從數(shù)據(jù)流架構(gòu)上實(shí)現(xiàn)了數(shù)據(jù)流的隔離劃分、從多個層次提高數(shù)據(jù)處理的并行化、解決數(shù)據(jù)處理速度慢導(dǎo)致消息隊(duì)列溢出的問題,以較高地效率完成了消息分發(fā)和文件處理的任務(wù)。
附圖說明
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明提供的一種實(shí)時處理遠(yuǎn)程同步文件的方法的流程圖;
圖2為本發(fā)明提供的文件操作的流程圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
參閱圖1,圖1為本發(fā)明第一較佳實(shí)施方式提供的一種實(shí)時處理遠(yuǎn)程同步文件的方法,該方法由數(shù)據(jù)處理服務(wù)器完成,該數(shù)據(jù)處理服務(wù)器可以為如計(jì)算機(jī)、服務(wù)器等具有邏輯處理功能的設(shè)備,該方法如圖1所示,包括如下步驟:
步驟s101、從遠(yuǎn)程主機(jī)同步到指定目標(biāo)文件夾;
步驟s101的實(shí)現(xiàn)方法具體可以包括:使用linux系統(tǒng)上的遠(yuǎn)程同步命令rsync實(shí)現(xiàn)數(shù)據(jù)接收服務(wù)器(即遠(yuǎn)程主機(jī))和數(shù)據(jù)處理服務(wù)器的文件同步功能。
參照圖2,在同步過程中,rsync的文件操作的方法如圖2所示,包括如下步驟:
步驟s201、創(chuàng)建臨時文件;
步驟s202、打開臨時文件;
步驟s203、向臨時文件寫入;
步驟s204、關(guān)閉臨時文件;
步驟s205、修改臨時文件屬性;
步驟s206、重命名臨時文件(即移動臨時文件)。
上述圖2中各個步驟的實(shí)現(xiàn)方法可以參見linux系統(tǒng)上遠(yuǎn)程同步命令rsync的介紹,這里不再贅述。
步驟s102、對目標(biāo)文件夾進(jìn)行文件操作監(jiān)控;
上述步驟s103的實(shí)現(xiàn)方法具體可以為:
文件監(jiān)控功能使用基于linux系統(tǒng)上inotify功能開發(fā)的python庫pyinotify,根據(jù)如圖2所示的描述,單個文件同步完成的標(biāo)志是文件移動(臨時文件重命名為目標(biāo)文件)指定監(jiān)控的文件夾后,對于文件的移動操作會觸發(fā)自定義的函數(shù),對文件進(jìn)行處理,對于文件夾同步,可以實(shí)現(xiàn)自動將子目錄下的文件夾自動添加到監(jiān)控文件夾列表中。由于文件處理速度一般比文件同步速度慢,隨著時間的推移,待處理的文件隊(duì)列很快就會溢出,因此本發(fā)明在處理函數(shù)中并不執(zhí)行實(shí)質(zhì)的處理操作,而是將文件路徑發(fā)送到消息系統(tǒng)。
s103、對目標(biāo)監(jiān)控行為進(jìn)行檢查,如檢查出被操作文件符合要求的,將文件路徑作為消息發(fā)送到消息系統(tǒng)。
上述步驟s103的實(shí)現(xiàn)方法具體可以為,消息系統(tǒng)功能使用kafka作為文件路徑的緩存,對遠(yuǎn)程同步文件夾進(jìn)行文件操作監(jiān)控。具體為,文件監(jiān)控功能使用基于linux系統(tǒng)上inotify功能開發(fā)的python庫pyinotify,根據(jù)所述s101中的描述,單個文件同步完成的標(biāo)志是文件移動(臨時文件重命名為目標(biāo)文件)。指定監(jiān)控的文件夾后,對于文件的移動操作會觸發(fā)自定義的函數(shù),對文件進(jìn)行處理。對于文件夾同步,可以實(shí)現(xiàn)自動將子目錄下的文件夾自動添加到監(jiān)控文件夾列表中。由于文件處理速度一般比文件同步速度慢,隨著時間的推移,待處理的文件隊(duì)列很快就會溢出,因此本發(fā)明在處理函數(shù)中并不執(zhí)行實(shí)質(zhì)的處理操作,而是將文件路徑發(fā)送到消息系統(tǒng)。kafka有主題、分塊、生產(chǎn)者、消費(fèi)者等概念:一個主題是消息發(fā)布到的一個類別或訂閱名稱;一個主題可以劃分為多個分區(qū),每個分區(qū)是一個不斷被追加的有序的消息序列;生產(chǎn)者負(fù)責(zé)將消息發(fā)布到自定義的主題中,包括選擇哪個消息分配給話題內(nèi)的哪個分區(qū);消費(fèi)者負(fù)責(zé)從指定的主題和分塊獲取消息。
為了便于維護(hù)和解除數(shù)據(jù)的耦合,以日期作為話題,文件監(jiān)控模塊作為生產(chǎn)者,每天對監(jiān)控到的文件路徑發(fā)布到消息系統(tǒng),提供作為消費(fèi)者的程序獲取。 為了提高文件的處理速度,考慮到python的多線程的限制,本發(fā)明使用多進(jìn)程對文件流處理,為此在消息系統(tǒng)中提高了話題的分塊數(shù)量,每個處理文件的進(jìn)程對接話題的一個分塊。
步驟s104、多個文件處理實(shí)例從消息系統(tǒng)獲取消息(即待處理文件的路徑),執(zhí)行具體處理操作。
上述步驟s104的實(shí)現(xiàn)方法具體可以為,文件處理的具體功能依照實(shí)際應(yīng)用需求,本發(fā)明實(shí)際應(yīng)用的一個例子是對壓縮文件解壓,同時在解壓出的文本的行末添加文件名信息,并根據(jù)數(shù)據(jù)的類型分類,由于對文件的處理流程一致,在python實(shí)現(xiàn)時可根據(jù)需要調(diào)用multiprocessing模塊,提高文件處理的并行度。
本發(fā)明具體實(shí)施方式提供的技術(shù)方案從數(shù)據(jù)流架構(gòu)上實(shí)現(xiàn)了數(shù)據(jù)流的隔離劃分、從多個層次提高數(shù)據(jù)處理的并行化、解決數(shù)據(jù)處理速度慢導(dǎo)致消息隊(duì)列溢出的問題,以較高地效率完成了消息分發(fā)和文件處理的任務(wù)。
可選的,上述從遠(yuǎn)程主機(jī)同步到指定目標(biāo)文件夾具體,包括:
將每天的數(shù)據(jù)分別同步到對應(yīng)的指定目標(biāo)文件夾。即以日期劃分,每天的數(shù)據(jù)分別同步到指定的目標(biāo)文件夾,這樣能降低數(shù)據(jù)的耦合度,便于調(diào)試和應(yīng)對故障恢復(fù)。
可選的,上述方法還包括:將日期作為主題,將該主題劃分成多個分塊。
可選的,上述多個文件處理實(shí)例從消息系統(tǒng)獲取消息具體,包括:
使用多個進(jìn)程從所述消息系統(tǒng)的一個主題的不同分塊獲取消息。
可選的,上述對目標(biāo)監(jiān)控行為進(jìn)行檢查,如檢查出被操作文件符合要求的,將文件路徑作為消息發(fā)送到消息系統(tǒng)具體,包括:
實(shí)時將被監(jiān)控文件夾內(nèi)的文件操作進(jìn)行條件判斷,將符合目標(biāo)要求的操作記錄的文件路徑發(fā)送到消息系統(tǒng)。
可選的,上述執(zhí)行具體的文件處理操作具體,包括:
使用并行算法執(zhí)行具體的文件處理操作。使得上述方案實(shí)現(xiàn)多級并行化,提高處理效率的機(jī)制。
需要說明的是,對于前述的各方法實(shí)施方式或?qū)嵤├瑸榱撕唵蚊枋?,故將其都表述為一系列的動作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受所描述的動作順序的限制,因?yàn)楦鶕?jù)本發(fā)明,某些步驟可以采用其他順序或者同時進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述實(shí)施方式或 實(shí)施例均屬于優(yōu)選實(shí)施例,所涉及的動作和單元并不一定是本發(fā)明所必須的。
在上述實(shí)施例中,對各個實(shí)施例的描述都各有側(cè)重,某個實(shí)施例中沒有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
本發(fā)明實(shí)施例方法中的步驟可以根據(jù)實(shí)際需要進(jìn)行順序調(diào)整、合并和刪減。
本發(fā)明實(shí)施例裝置中的單元可以根據(jù)實(shí)際需要進(jìn)行合并、劃分和刪減。本領(lǐng)域的技術(shù)人員可以將本說明書中描述的不同實(shí)施例以及不同實(shí)施例的特征進(jìn)行結(jié)合或組合。
通過以上的實(shí)施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可以用硬件實(shí)現(xiàn),或固件實(shí)現(xiàn),或它們的組合方式來實(shí)現(xiàn)。當(dāng)使用軟件實(shí)現(xiàn)時,可以將上述功能存儲在計(jì)算機(jī)可讀介質(zhì)中或作為計(jì)算機(jī)可讀介質(zhì)上的一個或多個指令或代碼進(jìn)行傳輸。計(jì)算機(jī)可讀介質(zhì)包括計(jì)算機(jī)存儲介質(zhì)和通信介質(zhì),其中通信介質(zhì)包括便于從一個地方向另一個地方傳送計(jì)算機(jī)程序的任何介質(zhì)。存儲介質(zhì)可以是計(jì)算機(jī)能夠存取的任何可用介質(zhì)。以此為例但不限于:計(jì)算機(jī)可讀介質(zhì)可以包括隨機(jī)存取存儲器(randomaccessmemory,ram)、只讀存儲器(read-onlymemory,rom)、電可擦可編程只讀存儲器(electricallyerasableprogrammableread-onlymemory,eeprom)、只讀光盤(compactdiscread-onlymemory,cd-rom)或其他光盤存儲、磁盤存儲介質(zhì)或者其他磁存儲設(shè)備、或者能夠用于攜帶或存儲具有指令或數(shù)據(jù)結(jié)構(gòu)形式的期望的程序代碼并能夠由計(jì)算機(jī)存取的任何其他介質(zhì)。此外。任何連接可以適當(dāng)?shù)某蔀橛?jì)算機(jī)可讀介質(zhì)。例如,如果軟件是使用同軸電纜、光纖光纜、雙絞線、數(shù)字用戶線(digitalsubscriberline,dsl)或者諸如紅外線、無線電和微波之類的無線技術(shù)從網(wǎng)站、服務(wù)器或者其他遠(yuǎn)程源傳輸?shù)?,那么同軸電纜、光纖光纜、雙絞線、dsl或者諸如紅外線、無線和微波之類的無線技術(shù)包括在所屬介質(zhì)的定影中。如本發(fā)明所使用的,盤(disk)和碟(disc)包括壓縮光碟(cd)、激光碟、光碟、數(shù)字通用光碟(dvd)、軟盤和藍(lán)光光碟,其中盤通常磁性的復(fù)制數(shù)據(jù),而碟則用激光來光學(xué)的復(fù)制數(shù)據(jù)。上面的組合也應(yīng)當(dāng)包括在計(jì)算機(jī)可讀介質(zhì)的保護(hù)范圍之內(nèi)。
總之,以上所述僅為本發(fā)明技術(shù)方案的較佳實(shí)施例而已,并非用于限定本發(fā)明的保護(hù)范圍。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。