午夜毛片免费看,老师老少妇黄色网站,久久本道综合久久伊人,伊人黄片子

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

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

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



背景技術(shù):

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

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

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

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

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

申請內(nèi)容

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

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

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

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

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

按照設(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)代碼,以實現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能包括:

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

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

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

所述與所述正在運(yùn)行的業(yè)務(wù)程序建立通信通道包括:利用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源代碼;

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

所述通過所述通信通道執(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)代碼,以實現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能包括:

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

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

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

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

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

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

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

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

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

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

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

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

更新執(zhí)行子單元,用于通過所述通信通道執(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)代碼,以實現(xiàn)所述業(yè)務(wù)數(shù)據(jù)采集功能。

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

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

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

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

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

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

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

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

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

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

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

附圖說明

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

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

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

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

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

具體實施方式

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

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

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

為了便于對業(yè)務(wù)處理過程進(jìn)行監(jiān)控,業(yè)務(wù)程序的代碼中除了包含實現(xiàn)業(yè)務(wù)功能的代碼,通常還包含實現(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ù)制到實施了本申請方法的業(yè)務(wù)節(jié)點上,那么本步驟可以通過讀取本地存儲的所述代碼,從而獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼。

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

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

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

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

進(jìn)一步地,在實現(xiàn)上述基本采集功能的基礎(chǔ)上,所述代碼實現(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))對接,從而便于更進(jìn)一步地分析所述業(yè)務(wù)程序的運(yùn)行狀況、并解決可能存在的問題。

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

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

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

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

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

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

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

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

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

步驟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ù)程序為例,可以利用Java虛擬機(jī)提供的附著(attach)功能,使用com.sun.tools.attach包里面的attach方法,建立與虛擬機(jī)的通道,這樣就與正在運(yùn)行的業(yè)務(wù)程序建立了通信通道。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

發(fā)貨邏輯

}

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

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

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

記錄下使用了哪個快遞公司

發(fā)貨邏輯

}

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

使用Groovy腳本對所述包含更新了發(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)行過程中將所述的編譯后的代碼所包含的class(也即正在運(yùn)行的發(fā)貨業(yè)務(wù)程序的class A的代理class)加載。所述被加載的class中包含了更新了的發(fā)貨方法。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

此外,所述客戶端一N302和客戶端二N303通過網(wǎng)絡(luò)N304從配置服務(wù)器N301獲取更新了業(yè)務(wù)數(shù)據(jù)采集功能的代碼的方式包括:按照設(shè)定的時間間隔從配置服務(wù)器N301下載所述代碼、或接收所述配置服務(wù)器N301通過網(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)包括一個配置服務(wù)器和兩個客戶端,實際應(yīng)用時,可以根據(jù)實際情況的需要,靈活設(shè)置系統(tǒng)內(nèi)的配置服務(wù)器和客戶端的數(shù)量。便于在多臺設(shè)備(如計算機(jī))或多個程序進(jìn)程構(gòu)成的業(yè)務(wù)系統(tǒng)內(nèi)實現(xiàn)業(yè)務(wù)數(shù)據(jù)采集的集中管理,起到提高維護(hù)工作效率的效果。

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

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

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

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

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

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1