欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種用于采集業(yè)務(wù)數(shù)據(jù)的方法和裝置與流程

文檔序號(hào):11154312閱讀:1631來(lái)源:國(guó)知局
一種用于采集業(yè)務(wù)數(shù)據(jù)的方法和裝置與制造工藝

本申請(qǐng)涉及數(shù)據(jù)采集領(lǐng)域,具體涉及一種用于采集業(yè)務(wù)數(shù)據(jù)的方法和裝置。本申請(qǐng)還涉及一種用于采集業(yè)務(wù)數(shù)據(jù)的系統(tǒng)。



背景技術(shù):

業(yè)務(wù)數(shù)據(jù)采集和監(jiān)控是對(duì)業(yè)務(wù)系統(tǒng)進(jìn)行性能優(yōu)化、或故障查找時(shí)普遍需要用到的技術(shù)手段。當(dāng)由于故障或設(shè)計(jì)缺陷導(dǎo)致業(yè)務(wù)失敗或性能低下時(shí),業(yè)務(wù)數(shù)據(jù)的采集和監(jiān)控能夠幫助業(yè)務(wù)人員快速定位問題的位置,從而盡快解決問題,提高業(yè)務(wù)系統(tǒng)性能,改善用戶體驗(yàn)。

現(xiàn)有的業(yè)務(wù)數(shù)據(jù)的采集監(jiān)控通常依賴于業(yè)務(wù)系統(tǒng)開始運(yùn)行前預(yù)先設(shè)計(jì)的業(yè)務(wù)數(shù)據(jù)采集監(jiān)控方案,業(yè)務(wù)數(shù)據(jù)采集監(jiān)控的數(shù)據(jù)源通常是采用硬編碼方式預(yù)先設(shè)定的輸出數(shù)據(jù)或數(shù)據(jù)庫(kù)數(shù)據(jù)等。

采用上述數(shù)據(jù)采集監(jiān)控方案的業(yè)務(wù)系統(tǒng)投入運(yùn)行后,如果由于運(yùn)行前設(shè)計(jì)時(shí)無(wú)法預(yù)知的原因?qū)е聵I(yè)務(wù)的故障甚至失敗、或性能不能達(dá)到預(yù)期時(shí),則無(wú)法設(shè)置新的數(shù)據(jù)采集位置,也無(wú)法對(duì)沒有包含在現(xiàn)有業(yè)務(wù)數(shù)據(jù)采集方案內(nèi)的其他數(shù)據(jù)進(jìn)行采集,也就無(wú)從發(fā)現(xiàn)導(dǎo)致故障、失敗或性能達(dá)不到預(yù)期的原因。

在這種情況下,如果想要對(duì)數(shù)據(jù)采集位置進(jìn)行變更或?qū)Σ杉臄?shù)據(jù)進(jìn)行變更,則需要中斷業(yè)務(wù)、并對(duì)業(yè)務(wù)系統(tǒng)的代碼進(jìn)行修改,例如,調(diào)整采集業(yè)務(wù)數(shù)據(jù)的位置或調(diào)整采集的業(yè)務(wù)數(shù)據(jù),修改完畢再重新啟動(dòng)整個(gè)系統(tǒng)的運(yùn)行。

顯然,現(xiàn)有的業(yè)務(wù)數(shù)據(jù)采集方式,在數(shù)據(jù)采集需求發(fā)生變更時(shí),處理效率低下,而且通常無(wú)法保證業(yè)務(wù)的連續(xù)性,影響用戶的使用體驗(yàn)。

申請(qǐng)內(nèi)容

本申請(qǐng)?zhí)峁┮环N用于采集業(yè)務(wù)數(shù)據(jù)的方法,以解決現(xiàn)有技術(shù)在數(shù)據(jù)采集需求發(fā)生變更時(shí),處理效率低下、無(wú)法保證業(yè)務(wù)的連續(xù)性、影響用戶的使用體驗(yàn)的問題。此外,本申請(qǐng)還提供一種用于采集業(yè)務(wù)數(shù)據(jù)的裝置、以及一種用于采集業(yè)務(wù)數(shù)據(jù)的系統(tǒng)。

本申請(qǐng)?zhí)峁┑囊环N用于采集業(yè)務(wù)數(shù)據(jù)的方法,包括以下步驟:

獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼;

根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

可選地,所述獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,包括:

按照設(shè)定的時(shí)間間隔從配置服務(wù)器下載所述代碼;或者,

接收配置服務(wù)器推送的所述代碼。

可選地,所述業(yè)務(wù)數(shù)據(jù)采集功能包括,采集所述業(yè)務(wù)程序中的預(yù)設(shè)方法的以下原始業(yè)務(wù)數(shù)據(jù)之一或者任意組合:入口參數(shù)值、返回值、拋出的異常。

可選地,所述業(yè)務(wù)數(shù)據(jù)采集功能還包括:根據(jù)采集到的原始業(yè)務(wù)數(shù)據(jù)采用預(yù)設(shè)算法生成數(shù)據(jù)采集結(jié)果。

可選地,所述根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能包括:

與所述正在運(yùn)行的業(yè)務(wù)程序建立通信通道;

通過(guò)所述通信通道執(zhí)行所述更新操作。

可選地,所述正在運(yùn)行的業(yè)務(wù)程序是采用Java編寫的;

所述與所述正在運(yùn)行的業(yè)務(wù)程序建立通信通道包括:利用JVM提供的attach功能,建立所述通信通道;

所述通過(guò)所述通信通道執(zhí)行所述更新操作,包括:利用JVMTI提供的instrument機(jī)制,執(zhí)行所述更新操作。

可選地,所述正在運(yùn)行的業(yè)務(wù)程序是采用Java編寫的,所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼包括:更新了業(yè)務(wù)數(shù)據(jù)采集功能的Java類文件;

所述通過(guò)所述通信通道執(zhí)行所述更新操作,包括:用所述Java類文件所包含的類替換所述正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)Java類。

可選地,所述正在運(yùn)行的業(yè)務(wù)程序是采用Java編寫的,所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼包括:更新了業(yè)務(wù)數(shù)據(jù)采集功能的Java源代碼;

所述根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能還包括:根據(jù)所述Java源代碼生成Java類文件;

所述通過(guò)所述通信通道執(zhí)行所述更新操作,包括:用所述生成的Java類文 件所包含的類替換所述正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)Java類。

可選地,所述根據(jù)所述Java源代碼生成Java類文件包括:利用groovy腳本將所述Java源代碼編譯成Java類文件。

可選地,還包括以下步驟:

獲取更新指令;

所述根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能包括:

按照更新指令的指示,根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

可選地,所述更新指令包括:待更新的正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼的標(biāo)識(shí)。

可選地,所述更新指令包括:預(yù)設(shè)的更新時(shí)間。

可選地,所述方法在提供物流服務(wù)的節(jié)點(diǎn)上實(shí)施,所述提供物流服務(wù)的節(jié)點(diǎn)包括:創(chuàng)建訂單節(jié)點(diǎn)、發(fā)貨節(jié)點(diǎn)、攬收節(jié)點(diǎn)、或者簽收節(jié)點(diǎn)。

本申請(qǐng)?zhí)峁┑囊环N用于采集業(yè)務(wù)數(shù)據(jù)的裝置,包括:

代碼獲取單元,用于獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼;

代碼更新單元,用于根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

可選地,所述代碼獲取單元,具體用于:

按照設(shè)定的時(shí)間間隔從配置服務(wù)器下載所述代碼;或者,

接收配置服務(wù)器推送的所述代碼。

可選地,所述代碼更新單元,包括:

通道建立子單元,用于與正在運(yùn)行的業(yè)務(wù)程序建立通信通道;

更新執(zhí)行子單元,用于通過(guò)所述通信通道執(zhí)行所述更新操作。

可選地,所述正在運(yùn)行的業(yè)務(wù)程序是采用Java編寫的;

所述通道建立子單元,具體用于利用JVM提供的attach功能,建立所述通信通道;

所述更新執(zhí)行子單元,具體用于利用JVMTI提供的instrument機(jī)制,執(zhí)行 所述更新操作。

可選地,所述正在運(yùn)行的業(yè)務(wù)程序是采用Java編寫的,所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼包括:更新了業(yè)務(wù)數(shù)據(jù)采集功能的Java類文件;

所述更新執(zhí)行子單元,具體用于用所述Java類文件所包含的類替換所述正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)Java類。

可選地,所述正在運(yùn)行的業(yè)務(wù)程序是采用Java編寫的,所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼包括:更新了業(yè)務(wù)數(shù)據(jù)采集功能的Java源代碼;所述更新單元還包括:

類文件生成子單元,用于將所述Java源代碼生成Java類文件;

所述更新執(zhí)行子單元,具體用于用所述生成的Java類文件所包含的類替換所述正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)Java類。

可選地,還包括:

指令獲取單元,用于獲取更新指令;

所述代碼更新單元,具體用于按照所述指令的指示,根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

可選地,該裝置部署于用于提供物流服務(wù)的節(jié)點(diǎn)上,所述用于提供物流服務(wù)的節(jié)點(diǎn)包括:創(chuàng)建訂單節(jié)點(diǎn)、發(fā)貨節(jié)點(diǎn)、攬收節(jié)點(diǎn)、或者簽收節(jié)點(diǎn)。

本申請(qǐng)?zhí)峁┑囊环N用于采集業(yè)務(wù)數(shù)據(jù)的系統(tǒng),包括配置服務(wù)器和客戶端,配置服務(wù)器和客戶端之間通過(guò)網(wǎng)絡(luò)相連;其特征在于,

所述配置服務(wù)器用于存儲(chǔ)更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼;

所述客戶端用于從配置服務(wù)器獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,并根據(jù)所述代碼更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

可選地,所述客戶端具體用于按照設(shè)定的時(shí)間間隔,通過(guò)網(wǎng)絡(luò)從配置服務(wù)器下載所述代碼,并用所述代碼更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

可選地,所述配置服務(wù)器還用于通過(guò)網(wǎng)絡(luò)推送更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼到所述客戶端。

可選地,所述配置服務(wù)器還用于向客戶端下達(dá)指令,指示客戶端根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼;

所述客戶端還用于接收配置服務(wù)器下達(dá)的指令,并按照指令實(shí)現(xiàn)所述用更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼的功能。

與現(xiàn)有技術(shù)相比,本申請(qǐng)具有以下優(yōu)點(diǎn):

本申請(qǐng)的技術(shù)方案針對(duì)運(yùn)行中的業(yè)務(wù)系統(tǒng),根據(jù)獲取的更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼更新正在運(yùn)行的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

本申請(qǐng)的技術(shù)方案通過(guò)動(dòng)態(tài)、實(shí)時(shí)地更新正在運(yùn)行的業(yè)務(wù)程序的業(yè)務(wù)數(shù)據(jù)采集代碼,從而在不中斷業(yè)務(wù)系統(tǒng)服務(wù)的情況下,隨時(shí)按照業(yè)務(wù)的需要,自由地對(duì)業(yè)務(wù)的相關(guān)數(shù)據(jù)進(jìn)行采集監(jiān)控。不僅能夠增加查找業(yè)務(wù)系統(tǒng)故障點(diǎn)的手段、提高解決業(yè)務(wù)系統(tǒng)存在問題的效率,而且可以達(dá)到進(jìn)一步提升用戶體驗(yàn)的效果。

附圖說(shuō)明

圖1是本申請(qǐng)的第一實(shí)施例提供的一種用于采集業(yè)務(wù)數(shù)據(jù)方法的流程示意圖;

圖2是本申請(qǐng)的第一實(shí)施例提供的一種用于采集業(yè)務(wù)數(shù)據(jù)方法的步驟S102的流程示意圖;

圖3是本申請(qǐng)的第一實(shí)施例提供的一種用于采集業(yè)務(wù)數(shù)據(jù)方法應(yīng)用于物流服務(wù)系統(tǒng)的示意圖;

圖4是本申請(qǐng)的第二實(shí)施例提供的一種用于采集業(yè)務(wù)數(shù)據(jù)裝置的結(jié)構(gòu)框圖;

圖5是本申請(qǐng)的第三實(shí)施例提供的一種用于采集業(yè)務(wù)數(shù)據(jù)系統(tǒng)的結(jié)構(gòu)框圖。

具體實(shí)施方式

在下面的描述中闡述了很多具體細(xì)節(jié)以便于充分理解本申請(qǐng)。但是本申請(qǐng)能夠以很多不同于在此描述的其它方式來(lái)實(shí)施,本領(lǐng)域技術(shù)人員可以在不違背本申請(qǐng)內(nèi)涵的情況下做類似推廣,因此本申請(qǐng)不受下面公開的具體實(shí)施的限制。

本申請(qǐng)的第一實(shí)施例,一種用于采集業(yè)務(wù)數(shù)據(jù)的方法的實(shí)施例,流程示意圖如圖1所示,所述方法包括以下步驟:

步驟S101,獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。

為了便于對(duì)業(yè)務(wù)處理過(guò)程進(jìn)行監(jiān)控,業(yè)務(wù)程序的代碼中除了包含實(shí)現(xiàn)業(yè)務(wù)功能的代碼,通常還包含實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)采集功能的代碼,系統(tǒng)維護(hù)人員可以根據(jù)業(yè)務(wù)數(shù)據(jù)采集需求的變化,更新這部分代碼,從而生成所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。

本步驟的任務(wù)即為獲取所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,其獲取方式可以有多種,例如,系統(tǒng)維護(hù)人員可以將更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,復(fù)制到實(shí)施了本申請(qǐng)方法的業(yè)務(wù)節(jié)點(diǎn)上,那么本步驟可以通過(guò)讀取本地存儲(chǔ)的所述代碼,從而獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。

考慮到在很多應(yīng)用中,具備業(yè)務(wù)數(shù)據(jù)采集功能的業(yè)務(wù)節(jié)點(diǎn)可能有多個(gè),為了減少系統(tǒng)維護(hù)人員的工作量,并且實(shí)現(xiàn)多業(yè)務(wù)節(jié)點(diǎn)的集中管理,本實(shí)施例提供從配置服務(wù)器獲取所述代碼的優(yōu)選實(shí)施方式,即:由系統(tǒng)維護(hù)人員通過(guò)配置服務(wù)器的控制臺(tái)或者其他人機(jī)交互界面,輸入所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,并將所述代碼存儲(chǔ)在配置服務(wù)器上,實(shí)施了本申請(qǐng)所提供方法的業(yè)務(wù)節(jié)點(diǎn)可以通過(guò)如下所述的兩種方式獲取所述代碼:

方式一,按照設(shè)定的時(shí)間間隔從配置服務(wù)器下載所述的更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。例如,按照設(shè)定的時(shí)間間隔訪問配置服務(wù)器用于存放所述代碼的目錄,通過(guò)版本號(hào)等信息判斷其中存放的所述代碼是否被更新過(guò),若更新過(guò),則可以下載所述代碼。

方式二,接收由配置服務(wù)器推送來(lái)的所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。例如,業(yè)務(wù)節(jié)點(diǎn)與配置服務(wù)器可以建立TCP長(zhǎng)連接,當(dāng)系統(tǒng)維護(hù)人員更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼后,配置服務(wù)器可以主動(dòng)將所述代碼通過(guò)長(zhǎng)連接推送給相應(yīng)的業(yè)務(wù)節(jié)點(diǎn)。

所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,其實(shí)現(xiàn)的業(yè)務(wù)數(shù)據(jù)采集功能包括,對(duì)業(yè)務(wù)程序中的某個(gè)或者某些預(yù)設(shè)方法(也可以稱為函數(shù))的入口參數(shù)值,返回值,或程序執(zhí)行異常時(shí)拋出的異常信息進(jìn)行采集,采集得到的結(jié)果可以在顯示設(shè)備上輸出、存儲(chǔ)在本地存儲(chǔ)介質(zhì)中、或者直接上傳到用于對(duì)采集到的數(shù)據(jù)進(jìn)行監(jiān)控分析的服務(wù)端,從而為系統(tǒng)維護(hù)人員分析和查找問題提供幫助。

進(jìn)一步地,在實(shí)現(xiàn)上述基本采集功能的基礎(chǔ)上,所述代碼實(shí)現(xiàn)的業(yè)務(wù)數(shù)據(jù)采集功能還可以包含根據(jù)采集到的原始數(shù)據(jù),采用設(shè)定的算法生成特定格式的、 或者內(nèi)容更為豐富的業(yè)務(wù)相關(guān)數(shù)據(jù)作為采集結(jié)果,以便于與系統(tǒng)維護(hù)人員所采用的分析系統(tǒng)(例如日志分析系統(tǒng))對(duì)接,從而便于更進(jìn)一步地分析所述業(yè)務(wù)程序的運(yùn)行狀況、并解決可能存在的問題。

由此可見,本步驟獲取的更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,其中不僅可以對(duì)業(yè)務(wù)數(shù)據(jù)采集點(diǎn)進(jìn)行變更,而且可以對(duì)利用采集到的原始數(shù)據(jù)生成采集結(jié)果的算法進(jìn)行變更,從而能夠滿足業(yè)務(wù)數(shù)據(jù)采集需求的多樣化,靈活地實(shí)現(xiàn)各種所需的業(yè)務(wù)數(shù)據(jù)采集方案。

所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼既可以是業(yè)務(wù)程序的源代碼,也可以是源代碼經(jīng)過(guò)編譯后生成的運(yùn)行所需的代碼(也可以稱為目標(biāo)代碼)。例如,對(duì)于采用Java語(yǔ)言的業(yè)務(wù)程序來(lái)說(shuō),所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼可以是Java源代碼,這樣有利于系統(tǒng)維護(hù)人員閱讀、修改、管理業(yè)務(wù)數(shù)據(jù)采集功能;或者,所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼還可以是Java源代碼經(jīng)過(guò)編譯后產(chǎn)生的類文件,這樣集中編譯能夠簡(jiǎn)化后續(xù)步驟,提高效率。

需要說(shuō)明的是,在具體實(shí)施本方法時(shí),在執(zhí)行下述步驟S102之前,除了可以執(zhí)行本步驟獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,還可以執(zhí)行獲取更新指令的操作,例如,可以從配置服務(wù)器獲取更新正在運(yùn)行的業(yè)務(wù)程序相應(yīng)代碼的指令。所述指令中可以包含待更新的業(yè)務(wù)程序相應(yīng)代碼的標(biāo)識(shí),用以指定待更新的業(yè)務(wù)程序的相應(yīng)代碼,例如對(duì)于采用Java編寫的業(yè)務(wù)程序,所述標(biāo)識(shí)可以是待更新的類名稱,后續(xù)步驟S102則可以根據(jù)指定的類名稱,執(zhí)行相應(yīng)的更新操作;此外,所述指令還可以包含預(yù)設(shè)的執(zhí)行更新操作的時(shí)間,在這種情況下,可以在到達(dá)指定的時(shí)間點(diǎn)時(shí),觸發(fā)步驟S102的執(zhí)行。采用上述獲取更新指令的方式,可以靈活,方便地對(duì)步驟102執(zhí)行的更新操作進(jìn)行更為精細(xì)的控制,有助于實(shí)現(xiàn)更為完善的業(yè)務(wù)數(shù)據(jù)采集功能。

步驟S102,根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

本步驟的處理過(guò)程主要包括:與業(yè)務(wù)程序建立通信通道、通過(guò)通信通道實(shí)現(xiàn)用所述代碼更新業(yè)務(wù)程序相應(yīng)代碼的功能。如果在步驟S101中獲取的代碼為源代碼,則可以先通過(guò)編譯等方式生成可用于替換的目標(biāo)代碼。下面以獲取到的代碼是源代碼為例,對(duì)本步驟的處理過(guò)程作進(jìn)一步說(shuō)明。請(qǐng)參考附圖2,所述處理過(guò)程包括步驟S102-1至步驟S102-3:

步驟S102-1,根據(jù)更新了業(yè)務(wù)數(shù)據(jù)采集功能的源代碼生成運(yùn)行所需的目標(biāo)代碼。

本步驟根據(jù)已獲取的所述源代碼動(dòng)態(tài)生成目標(biāo)代碼,在具體實(shí)施中,可以利用與所述源代碼對(duì)應(yīng)的編譯器或者目標(biāo)代碼生成工具實(shí)現(xiàn)所述功能。

對(duì)于獲取的所述源代碼是Java源代碼的情況,可以采用多種方式實(shí)現(xiàn)根據(jù)Java源代碼動(dòng)態(tài)生成類文件的功能,例如:利用ASM字節(jié)碼生成工具或者采用動(dòng)態(tài)編譯方式。在本實(shí)施例中為了對(duì)動(dòng)態(tài)生成過(guò)程進(jìn)行靈活控制,采用了利用groovy腳本進(jìn)行編譯的實(shí)施方式:通過(guò)執(zhí)行預(yù)先編寫的groovy腳本,將已獲取的Java源代碼編譯為相應(yīng)的class類文件。

采用獲取源代碼、并動(dòng)態(tài)生成(例如通過(guò)編譯)運(yùn)行所需的目標(biāo)代碼的方式,可以靈活適應(yīng)運(yùn)行業(yè)務(wù)程序的系統(tǒng)平臺(tái)版本的差異,而無(wú)需額外管理針對(duì)不同系統(tǒng)平臺(tái)的不同代碼版本。

步驟S102-2,與正在運(yùn)行的業(yè)務(wù)程序建立通信通道。

本步驟與所述正在運(yùn)行的業(yè)務(wù)程序建立通信通道,即提供與所述業(yè)務(wù)程序之間的通信機(jī)制,為后續(xù)步驟S102-3執(zhí)行替換操作做準(zhǔn)備。

以運(yùn)行于Java虛擬機(jī)(JVM)上的業(yè)務(wù)程序?yàn)槔梢岳肑ava虛擬機(jī)提供的附著(attach)功能,使用com.sun.tools.attach包里面的attach方法,建立與虛擬機(jī)的通道,這樣就與正在運(yùn)行的業(yè)務(wù)程序建立了通信通道。

步驟S102-3,替換正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼。

本步驟基于已建立的通信通道,采用業(yè)務(wù)程序或者承載業(yè)務(wù)程序的平臺(tái)所支持的方式,用已生成的目標(biāo)代碼替換正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼。

仍以運(yùn)行于Java虛擬機(jī)上的業(yè)務(wù)程序?yàn)槔梢愿鶕?jù)Instrument機(jī)制構(gòu)建獨(dú)立于業(yè)務(wù)程序的代理程序(Agent),并調(diào)用loadAgent方法,在系統(tǒng)運(yùn)行過(guò)程中根據(jù)需要加載步驟S102-1生成的目標(biāo)代碼,即Java類文件所包含的類。

當(dāng)業(yè)務(wù)程序即將加載與編譯后的類文件的名稱相同的類時(shí),則會(huì)通過(guò)Instrument機(jī)制直接加載編譯后的類文件所包含的類,而不再加載業(yè)務(wù)程序原有的與編譯后的類文件名稱相同的類,也即實(shí)現(xiàn)了用編譯生成的類文件中的代碼替換業(yè)務(wù)程序中的相應(yīng)代碼的功能,從而更新了相應(yīng)的業(yè)務(wù)數(shù)據(jù)采集功能。

例如:系統(tǒng)維護(hù)人員針對(duì)業(yè)務(wù)程序中的Class A中的某個(gè)方法更新了業(yè)務(wù)數(shù)據(jù)采集功能,步驟S102-1將獲取的更新了業(yè)務(wù)數(shù)據(jù)采集功能的Class A的源代 碼,編譯得到新的A.class文件,那么當(dāng)業(yè)務(wù)程序需要加載名稱為A的類時(shí),則會(huì)直接加載編譯后生成的新的A.class類文件所包含的類,而不再加載業(yè)務(wù)程序原有的類A。

在具體實(shí)施時(shí),為了增加上述替換過(guò)程的靈活性與可控性,如果在步驟102之前已經(jīng)從更新指令中獲取了待更新目標(biāo)業(yè)務(wù)程序相應(yīng)代碼的標(biāo)識(shí),那么本步驟可以根據(jù)所述標(biāo)識(shí)執(zhí)行針對(duì)性的替換。仍以運(yùn)行于Java虛擬機(jī)上的業(yè)務(wù)程序?yàn)槔?,所述?biāo)識(shí)可以為:所述業(yè)務(wù)程序中的待更新類的名稱,當(dāng)業(yè)務(wù)程序即將加載所述待更新類時(shí),直接加載編譯后的類文件所包含的類,而不再加載業(yè)務(wù)系統(tǒng)原有的、所述更新指令中所指定的待更新類。采用上述方式可以控制對(duì)JVM加載的任意類進(jìn)行動(dòng)態(tài)替換,從而增加實(shí)施本方法的靈活性。

通過(guò)上述步驟S102-1至S102-3,用所述的更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼替換了正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,達(dá)到更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼、以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能的目的。

需要說(shuō)明的是,對(duì)于步驟S101獲取到的代碼不是源代碼、而是運(yùn)行所需的目標(biāo)代碼(例如編譯后生成的類文件)的情況,可以通過(guò)與業(yè)務(wù)程序建立的通信通道,直接用該代碼替換正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼。這樣無(wú)需生成目標(biāo)代碼,也即上述步驟中的S102-1無(wú)需執(zhí)行,從而可以簡(jiǎn)化實(shí)施步驟,提高執(zhí)行效率。

綜上所述,本申請(qǐng)?zhí)峁┑募夹g(shù)方案通過(guò)動(dòng)態(tài)、實(shí)時(shí)地更新正在運(yùn)行的業(yè)務(wù)程序的業(yè)務(wù)數(shù)據(jù)采集代碼,從而在不中斷業(yè)務(wù)系統(tǒng)服務(wù)的情況下,隨時(shí)按照業(yè)務(wù)的需要,自由地對(duì)業(yè)務(wù)的相關(guān)數(shù)據(jù)進(jìn)行采集監(jiān)控。不僅能夠增加查找業(yè)務(wù)系統(tǒng)故障點(diǎn)的手段、提高解決業(yè)務(wù)系統(tǒng)存在問題的效率,而且可以達(dá)到進(jìn)一步提升用戶體驗(yàn)的效果。

在具體實(shí)施時(shí),本申請(qǐng)?zhí)峁┑募夹g(shù)方案可以應(yīng)用于需要?jiǎng)討B(tài)更新業(yè)務(wù)數(shù)據(jù)采集功能的各業(yè)務(wù)領(lǐng)域中,下面以應(yīng)用于物流服務(wù)履行系統(tǒng)為例作進(jìn)一步說(shuō)明。

在現(xiàn)實(shí)的物流服務(wù)履行過(guò)程中,如果按照現(xiàn)有通常的做法,對(duì)于線上系統(tǒng)眾多的操作要做全鏈路的監(jiān)控,首先需要對(duì)業(yè)務(wù)進(jìn)行全面的梳理,然后對(duì)各個(gè)提供物流服務(wù)的節(jié)點(diǎn)通過(guò)編寫硬代碼的高耦合方式進(jìn)行埋點(diǎn),以輸出可供監(jiān)控的日志,如果出現(xiàn)業(yè)務(wù)分析不是很完善的情況,通常需要中斷系統(tǒng)的運(yùn)行,升級(jí)系統(tǒng)重新更新埋點(diǎn),這種方式是非常低效的。在這種情況下,在提供物流服 務(wù)的業(yè)務(wù)節(jié)點(diǎn)上采用本申請(qǐng)?zhí)峁┑挠糜诓杉瘶I(yè)務(wù)數(shù)據(jù)的方法,則可以有效解決物流履行過(guò)程中存在的上述問題。

本申請(qǐng)所述的用于采集業(yè)務(wù)數(shù)據(jù)的方法,可以實(shí)施在提供物流服務(wù)的節(jié)點(diǎn)上,包括創(chuàng)建訂單節(jié)點(diǎn)、發(fā)貨節(jié)點(diǎn)、攬收節(jié)點(diǎn)、或者簽收節(jié)點(diǎn)等。所述節(jié)點(diǎn)是指運(yùn)行所述物流服務(wù)程序的設(shè)備(如計(jì)算機(jī))。

以物流服務(wù)履行系統(tǒng)中的業(yè)務(wù)節(jié)點(diǎn):發(fā)貨節(jié)點(diǎn)為例,該發(fā)貨節(jié)點(diǎn)運(yùn)行基于Java虛擬機(jī)的發(fā)貨業(yè)務(wù)程序,本申請(qǐng)?zhí)峁┑挠糜诟聵I(yè)務(wù)數(shù)據(jù)采集功能的方法,以獨(dú)立的JVM進(jìn)程的形式在該業(yè)務(wù)節(jié)點(diǎn)上實(shí)施,請(qǐng)參考圖3。

運(yùn)行于發(fā)貨節(jié)點(diǎn)的發(fā)貨業(yè)務(wù)程序中的class A中包括如下的發(fā)貨方法:

發(fā)貨(快遞公司,發(fā)貨地址){

發(fā)貨邏輯

}

根據(jù)業(yè)務(wù)監(jiān)控需求,需要統(tǒng)計(jì)一下不同的快遞公司的運(yùn)單量。以下為實(shí)施了本申請(qǐng)所述的用于采集業(yè)務(wù)數(shù)據(jù)的方法的發(fā)貨節(jié)點(diǎn)所進(jìn)行的操作:

從配置服務(wù)器獲取到包含更新了發(fā)貨方法的Java源代碼,所述源代碼中的類包含更新了的發(fā)貨方法,所述更新了的發(fā)貨方法為:

發(fā)貨(快遞公司,發(fā)貨地址){

記錄下使用了哪個(gè)快遞公司

發(fā)貨邏輯

}

從配置服務(wù)器獲取到更新指令,所述更新指令指定了正在運(yùn)行的發(fā)貨業(yè)務(wù)程序中的待更新的class為class A。

使用Groovy腳本對(duì)所述包含更新了發(fā)貨方法的Java源代碼進(jìn)行編譯。

利用Java虛擬機(jī)工具接口JVMTI提供的attach功能,使用com.sun.tools.attach包里面的attach方法,建立與虛擬機(jī)的通道,這樣就與正在運(yùn)行的發(fā)貨業(yè)務(wù)程序建立了通信通道。

使用Instrument機(jī)制,構(gòu)建獨(dú)立于發(fā)貨業(yè)務(wù)程序的代理程序(Agent),即將所述編譯了的代碼屬性設(shè)置為Agent-class,生成包含了所述編譯了的代碼的jar文件。

使用attach功能包的loadAgent方法,加載所述的jar文件,在發(fā)貨業(yè)務(wù)程 序運(yùn)行過(guò)程中將所述的編譯后的代碼所包含的class(也即正在運(yùn)行的發(fā)貨業(yè)務(wù)程序的class A的代理class)加載。所述被加載的class中包含了更新了的發(fā)貨方法。

至此,發(fā)貨節(jié)點(diǎn)上運(yùn)行的業(yè)務(wù)程序的class A中的發(fā)貨方法增加了新的物流業(yè)務(wù)數(shù)據(jù)采集功能(即“記錄下使用了哪個(gè)快遞公司”功能)。

以上以Java語(yǔ)言實(shí)現(xiàn)的物流服務(wù)業(yè)務(wù)程序?yàn)槔?,說(shuō)明了本申請(qǐng)的用于采集業(yè)務(wù)數(shù)據(jù)的方法在物流服務(wù)履行系統(tǒng)中的應(yīng)用,對(duì)于其他語(yǔ)言所編寫的業(yè)務(wù)系統(tǒng),可以遵照相應(yīng)的編程規(guī)則、按照本申請(qǐng)的方法更新業(yè)務(wù)數(shù)據(jù)采集功能。

由此可見,要實(shí)現(xiàn)物流服務(wù)履行全鏈路的監(jiān)控,只需要在提供物流服務(wù)的各業(yè)務(wù)節(jié)點(diǎn)上實(shí)施本申請(qǐng)所述的用于采集業(yè)務(wù)數(shù)據(jù)的方法,就可以在不中斷業(yè)務(wù)運(yùn)行的情況下動(dòng)態(tài)地進(jìn)行監(jiān)控點(diǎn)的變更、以及采集數(shù)據(jù)的變更,也可以動(dòng)態(tài)地改變數(shù)據(jù)采集結(jié)果生成算法。并且能夠采用統(tǒng)一的管理后臺(tái)(如本實(shí)施例中的配置服務(wù)器)以便于維護(hù)。

在上述的實(shí)施例中,提供了一種用于采集業(yè)務(wù)數(shù)據(jù)的方法,與之相對(duì)應(yīng)的,本申請(qǐng)第二實(shí)施例還提供一種用于采集業(yè)務(wù)數(shù)據(jù)的裝置。請(qǐng)參看圖4,其為本申請(qǐng)第二實(shí)施例,一種用于采集業(yè)務(wù)數(shù)據(jù)的裝置的結(jié)構(gòu)框圖。由于裝置實(shí)施例基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見方法實(shí)施例的部分說(shuō)明即可。下述描述的裝置實(shí)施例僅僅是示意性的。

該裝置包括代碼獲取單元U201和代碼更新單元U202,所述

代碼獲取單元U201,用于獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。該單元具體用于按照設(shè)定的時(shí)間間隔從配置服務(wù)器下載所述代碼;或者,接收配置服務(wù)器推送的所述代碼。

代碼更新單元U202,用于根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的原業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

該單元可以包括通道建立子單元和更新執(zhí)行子單元,其中通道建立子單元用于與正在運(yùn)行的業(yè)務(wù)程序建立通信通道;更新執(zhí)行子單元,用于通過(guò)所述通信通道執(zhí)行所述更新操作。

對(duì)于運(yùn)行的業(yè)務(wù)程序是采用Java編寫的,所述通道建立子單元,具體用于利用JVM提供的attach功能,建立所述通信通道;所述更新執(zhí)行子單元,具體 用于利用JVMTI提供的instrument機(jī)制,執(zhí)行所述更新操作。

對(duì)于所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼為Java類文件的,所述更新執(zhí)行子單元,具體用于用所述Java類文件所包含的類替換所述正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)Java類。

對(duì)于所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼為Java源代碼的,所述更新單元還包括編譯子單元,用于將所述Java源代碼編譯生成Java類文件;所述更新執(zhí)行子單元,具體用于用所述編譯生成的Java類文件所包含的類替換所述正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)Java類。

本實(shí)施例的用于采集業(yè)務(wù)數(shù)據(jù)的裝置,除了代碼獲取單元和代碼更新單元以外,還包括一個(gè)指令獲取單元,用于獲取代碼更新指令;所述代碼更新單元,具體用于按照所述指令的指示,根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

本實(shí)施例的用于采集業(yè)務(wù)數(shù)據(jù)的裝置可以部署于提供物流服務(wù)的節(jié)點(diǎn)上,所述提供物流服務(wù)的節(jié)點(diǎn)包括:創(chuàng)建訂單節(jié)點(diǎn)、發(fā)貨節(jié)點(diǎn)、攬收節(jié)點(diǎn)、或者簽收節(jié)點(diǎn)。所述節(jié)點(diǎn)是指運(yùn)行所述物流服務(wù)程序的設(shè)備(如計(jì)算機(jī))。

本申請(qǐng)第三實(shí)施例提供一種用于采集業(yè)務(wù)數(shù)據(jù)的系統(tǒng),其結(jié)構(gòu)框圖如圖3所示,請(qǐng)參考圖5,本實(shí)施例的一種用于采集業(yè)務(wù)數(shù)據(jù)的系統(tǒng)包括配置服務(wù)器N301,客戶端一N302,客戶端二N303,配置服務(wù)器N301和客戶端一N302,客戶端二N303之間通過(guò)網(wǎng)絡(luò)N304相連接。

所述配置服務(wù)器N301用于存儲(chǔ)更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼;

所述客戶端一N302和客戶端二N303用于通過(guò)網(wǎng)絡(luò)N304從配置服務(wù)器N301獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼,并用所述代碼更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼,以實(shí)現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

此外,所述客戶端一N302和客戶端二N303通過(guò)網(wǎng)絡(luò)N304從配置服務(wù)器N301獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼的方式包括:按照設(shè)定的時(shí)間間隔從配置服務(wù)器N301下載所述代碼、或接收所述配置服務(wù)器N301通過(guò)網(wǎng)絡(luò)N304推送的所述更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。

可選地,所述配置服務(wù)器N301可以向客戶端一N302和客戶端二N303下達(dá)指令,指示客戶端一N302和客戶端二N303根據(jù)所述更新了業(yè)務(wù)數(shù)據(jù)采集功 能的代碼更新正在運(yùn)行的業(yè)務(wù)程序的相應(yīng)代碼。

上述一種用于采集業(yè)務(wù)數(shù)據(jù)的系統(tǒng)包括一個(gè)配置服務(wù)器和兩個(gè)客戶端,實(shí)際應(yīng)用時(shí),可以根據(jù)實(shí)際情況的需要,靈活設(shè)置系統(tǒng)內(nèi)的配置服務(wù)器和客戶端的數(shù)量。便于在多臺(tái)設(shè)備(如計(jì)算機(jī))或多個(gè)程序進(jìn)程構(gòu)成的業(yè)務(wù)系統(tǒng)內(nèi)實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)采集的集中管理,起到提高維護(hù)工作效率的效果。

本申請(qǐng)雖然以較佳實(shí)施例公開如上,但其并不是用來(lái)限定本申請(qǐng),任何本領(lǐng)域技術(shù)人員在不脫離本申請(qǐng)的精神和范圍內(nèi),都可以做出可能的變動(dòng)和修改,因此本申請(qǐng)的保護(hù)范圍應(yīng)當(dāng)以本申請(qǐng)權(quán)利要求所界定的范圍為準(zhǔn)。

在一個(gè)典型的配置中,計(jì)算設(shè)備包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。

內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。

1、計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。

2、本領(lǐng)域技術(shù)人員應(yīng)明白,本申請(qǐng)的實(shí)施例可提供為方法、系統(tǒng)或計(jì)算機(jī)程序產(chǎn)品。因此,本申請(qǐng)可采用完全硬件實(shí)施例、完全軟件實(shí)施例或結(jié)合軟件和硬件方面的實(shí)施例的形式。而且,本申請(qǐng)可采用在一個(gè)或多個(gè)其中包含有計(jì)算機(jī)可用程序代碼的計(jì)算機(jī)可用存儲(chǔ)介質(zhì)(包括但不限于磁盤存儲(chǔ)器、CD-ROM、光學(xué)存儲(chǔ)器等)上實(shí)施的計(jì)算機(jī)程序產(chǎn)品的形式。

當(dāng)前第1頁(yè)1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
阳谷县| 霞浦县| 六盘水市| 库尔勒市| 潞西市| 元江| 长宁县| 布尔津县| 吴江市| 张掖市| 浦东新区| 蓝田县| 吴桥县| 遂昌县| 水富县| 湖州市| 信丰县| 寿阳县| 靖西县| 安远县| 武安市| 绿春县| 泗阳县| 红安县| 郧西县| 平利县| 忻州市| 平湖市| 沅江市| 兴文县| 内黄县| 大余县| 象山县| 哈密市| 砀山县| 古蔺县| 漳浦县| 岳池县| 贺州市| 廉江市| 当雄县|