一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置制造方法
【專利摘要】本申請公開了一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置,在用戶訪問分布式系統(tǒng)時,對采樣的用戶請求生成與其對應的標識符,并在該用戶請求調(diào)用的各線程中傳遞該標識符;針對各服務器運行的每個被預先注入跟蹤接口的進程,若檢測到當前該進程包含用戶請求對應的標識符,則將標識符和跟蹤所指示的函數(shù)的相關(guān)信息對應并生成日志;最后將生成的日志按照所對應的標識符分別進行匯總。在對用戶請求進行監(jiān)測時,由于采用采樣的方式抽樣監(jiān)測用戶請求,對系統(tǒng)性能的擾動低,不會給監(jiān)測系統(tǒng)造成太大壓力,并且,針對監(jiān)測分布式系統(tǒng)中的各服務器產(chǎn)生的日志能夠按照用戶請求的標識符實時匯總,能夠支持實時分析用戶請求。
【專利說明】—種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置
【技術(shù)領(lǐng)域】
[0001]本申請涉及分布式系統(tǒng)【技術(shù)領(lǐng)域】,尤其涉及一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置。
【背景技術(shù)】
[0002]在大型分布式系統(tǒng)中,用戶的應用服務請求往往需要經(jīng)過多種服務構(gòu)件才能完成操作,例如:在阿里巴巴的云計算平臺中,用戶的一次寫文件的訪問請求需經(jīng)過調(diào)度、通信、索引以及分布式存儲等服務構(gòu)件,才能完成更新索引緩存、維護用戶元信息、寫文件以及寫訪問日志等多種操作,而這些服務構(gòu)件一般部署在數(shù)以百計的服務器的不同進程上且由不同的軟件構(gòu)成。
[0003]目前,對于用戶調(diào)用分布式系統(tǒng)行為的監(jiān)控和分析,往往集中在分布式系統(tǒng)的單個服務構(gòu)件上,例如:通過監(jiān)控文件系統(tǒng)的讀寫,監(jiān)控上層系統(tǒng)的吞吐量等。通過這種監(jiān)控方式只能對單一服務構(gòu)件進行分析,無法準確得到用戶的應用服務請求行為對整個分布式系統(tǒng)的影響。
[0004]綜上所述,如何在對系統(tǒng)性能低擾動的情況下,實現(xiàn)在分布式系統(tǒng)中實時監(jiān)測用戶請求的運行,是本領(lǐng)域技術(shù)人員亟需解決的技術(shù)問題。
【發(fā)明內(nèi)容】
[0005]本申請實施例提供了一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置,用以實現(xiàn)在分布式系統(tǒng)中對系統(tǒng)性能低擾動的情況下,實時監(jiān)測用戶請求的運行。
[0006]本申請實施例提供的一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法,包括:
[0007]對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣;
[0008]對各服務器采樣到的用戶請求生成對應的標識符,所述標識符在所述用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中;
[0009]預先對分布式系統(tǒng)中各服務器運行的進程注入跟蹤接口,當進程運行到該跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將所述標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志;
[0010]將生成的日志按照所對應的標識符分別進行匯總。
[0011]本申請實施例提供的一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的裝置,包括:
[0012]采樣模塊,用于對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣;
[0013]標識符生成模塊,用于對各服務器采樣到的用戶請求生成對應的標識符,所述標識符在所述用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中;
[0014]注入跟蹤接口模塊,用于預先對分布式系統(tǒng)中各服務器運行的進程注入跟蹤接口,當進程運行到該跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將所述標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志;
[0015]日志匯總模塊,用于將生成的日志按照所對應的標識符分別進行匯總。[0016]本申請實施例的有益效果包括:
[0017]本申請實施例提供的一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置,在用戶訪問分布式系統(tǒng)時,對分布式系統(tǒng)接收到的用戶請求進行采樣,并對采樣到的用戶請求生成與其對應的標識符,在該用戶請求調(diào)用的各線程中傳遞該標識符;針對分布式系統(tǒng)中各服務器運行的每個被預先注入跟蹤接口的進程,當運行到跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志;最后將生成的日志按照所對應的標識符分別進行匯總。在對用戶請求進行監(jiān)測時,由于采用采樣的方式抽樣監(jiān)測用戶請求,對系統(tǒng)性能的擾動低,不會給監(jiān)測系統(tǒng)造成太大壓力,并且,針對監(jiān)測分布式系統(tǒng)中的各服務器產(chǎn)生的日志能夠按照用戶請求的標識符實時匯總,能夠支持實時分析用戶請求的行為。
【專利附圖】
【附圖說明】
[0018]圖1為本申請實施例提供的監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法的流程圖;
[0019]圖2為本申請實施例提供的日志輸出格式的示意圖;
[0020]圖3為本申請實施例提供的用一個調(diào)用的不同系統(tǒng)行為的比較示意圖;
[0021]圖4為本申請實施例提供的同一個調(diào)用的不同系統(tǒng)行為的差異分析的示意圖;
[0022]圖5為本申請實施例提供的MBoxServer::GetMaiI的詳細調(diào)用情況的示意圖;
[0023]圖6為為本申請實施例提供的用戶請求次數(shù)和機器之間的分布的示意圖;
[0024]圖7為本申請實施例提供的監(jiān)測用戶請求在分布式系統(tǒng)中運行的裝置的結(jié)構(gòu)示意圖。
【具體實施方式】
[0025]下面結(jié)合附圖,對本申請實施例提供的監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置的【具體實施方式】進行詳細地說明。
[0026]本申請實施例提供的一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法,如圖1所示,具體流程包括以下步驟:
[0027]S101、對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣;
[0028]S102、對各服務器采樣到的用戶請求生成對應的標識符,該標識符在用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中;
[0029]S103、預先對分布式系統(tǒng)中各服務器運行的進程注入跟蹤接口,當進程運行到該跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志;
[0030]S104、將生成的日志按照所對應的標識符分別進行匯總。
[0031]下面對上述各步驟的具體實現(xiàn)方式進行詳細的說明。
[0032]在具體實施時,為了能夠減少監(jiān)測對分布式系統(tǒng)性能的擾動影響,且保證監(jiān)測系統(tǒng)不會有太嚴重的負擔,對分布式系統(tǒng)中各服務器接受到的用戶請求一般按照1%_5%的比例進行隨機采樣,被采樣到的用戶請求會在調(diào)用的個線程匯總被跟蹤生成對應的日志。
[0033]具體地,本申請實施例提供的方法中,是根據(jù)識別用戶請求對應的標識符,來對采樣到的用戶請求進行跟蹤。進一步地,在對各服務器采樣到的用戶請求生成對應的標識符時,需要保證生成的標識符在該分布式系統(tǒng)中具有唯一性,在具體實施時,針對各接收服務器采樣到的用戶請求,可以根據(jù)采集到的用戶請求發(fā)送時間和請求接收服務器的標識按照設定的的算法生成用戶請求唯一對應的標識符,在此對生成標識符的算法不做具體限定。
[0034]為了保證采樣到的用戶請求能夠在各服務器運行的進程中能被有效的檢測出,用戶請求對應的標識符會作為變量傳遞到當前被用戶請求調(diào)用的線程中,具體地,在同一進程中用戶請求調(diào)用不同的線程時,標識符會保留在進程的線程變量(TLS)中;在進程創(chuàng)建子進程時,會把標識符傳遞到子進程中;當用戶請求跨進程調(diào)用不同的線程時,該標識符被通訊協(xié)議傳遞到各進程中;具體地,可以通過在網(wǎng)絡模塊發(fā)送網(wǎng)絡請求時從線程取得標識符,放置在網(wǎng)絡請求的報頭中傳遞到接收端,接收端從接收到的網(wǎng)絡請求中提取該標識符,并在當前處理網(wǎng)絡請求的線程中傳遞該標識符。
[0035]具體地,對于分布式系統(tǒng)中各服務器,可以預先對所需監(jiān)測的進行注入跟蹤接口,例如在具體實施時可以是TRACE_L0G接口,該跟蹤接口用于在注入點顯式地添加與注入點類型有關(guān)的描述信息。所有跟蹤接口都可以采用RAII編程規(guī)范,即接口必須顯式地完成對系統(tǒng)資源的釋放與申請。通過跟蹤接口,用戶請求在進入和離開注入點的時間戳可分別由構(gòu)造函數(shù)和析構(gòu)函數(shù)記錄,并導入到日志中。
[0036]在具體實施時,可以通過下述代碼實現(xiàn)注入探針跟蹤:
[0037]FunctionB(){
TRACE—LOG(FunctionB):
}
FunctionCO}
TRACE—LOG(FunctionC):
}
FunctionAO |
TRACE—LOG (F unctionA);
FunctionBO;
FunctionCQ;
}
Main(…){
ENABL ET RAC E();
FunctionAO;
}
[0038]這樣,當在分布式系統(tǒng)中各服務器的程序運行到TRACE_L0G接口時,就會檢測當前運行的進程是否包含用戶請求對應的標識符;[0039]若有,邏輯就會從線程中獲取該標識符,將其和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志中,具體地,可以將該標識符、調(diào)用的函數(shù)名稱和位置、調(diào)用函數(shù)的時間、以及調(diào)用時產(chǎn)生的錯誤信息輸出到日志中,輸出日志的具體格式可以例如圖2所示,其中,TRACE_ID_:001 表不標識符為 001 的請求,_FUNC_:FunctionA_start 表不 FunctionA 開始的時間點,_FUNC_:FunctionA_end 表不 FunctionA 結(jié)束的時間點,/Example, cpp: 117 是附加信息,表示該日志位于Example, cpp的第117行;
[0040]若無,即沒有設置標識符或該標識符為0,則表示該調(diào)用該進程的用戶請求未被跟蹤監(jiān)測,邏輯就不執(zhí)行任何操作。
[0041]具體地,在步驟S104中,當分布式系統(tǒng)中各服務器的日志生成后,后臺收集程序會每隔一段時間將日志收集到處理服務器中進行關(guān)聯(lián),即按照不同的標識符進行匯總。具體地,可以按照下述方式進行匯總:
[0042]首先,將收集到的日志按照不同標識符分別進行歸類;[0043]然后,對于同一標識符的日志,按照不同的進程分別進行歸類;
[0044]接著,對于同一標識符的同一進程的日志,按照函數(shù)按照調(diào)用開始和結(jié)束時間分別進行合并;
[0045]最后,對同一標識符跨進程的日志,按照時間順序進行組合。
[0046]較佳地,在步驟S104將日志進行匯總之后,還可以根據(jù)具體需求,對匯總后的日志進行分析,并輸出分析結(jié)果。在具體實施時,可以通過日志分析程序?qū)⒉煌臉俗R符進行歸類組合,形成分析的原始數(shù)據(jù)。為了能夠方便分析用戶請求在程序中的運行方式,可以采用可視化/分析框架幫助理解程序運行的方式。
[0047]其中,對日志的具體分析可以是下述方式或其任意組合:
[0048]1、對同一種調(diào)用方式的用戶請求進行不同路徑的分析:在分布式系統(tǒng)中,同一種調(diào)用方式由于系統(tǒng)的不同狀況可能會出現(xiàn)不同的行為,例如:分布式系統(tǒng)在是否命中Cache情況會有一樣的兩種反應,可以通過統(tǒng)計同一個方式處理不同的調(diào)用行為分析出分布式系統(tǒng)真實的處理情況。例如如圖3所示,對同一 MailBox::GetMail的處理,兩種不同的行為(A,B),分別占99.77%和0.22%,如圖4所示,通過細節(jié)比較我們能看出行為A,行為B之間的差異。
[0049]2、對用戶請求在分布式系統(tǒng)中的運行路徑,以及在各模塊中運行時間的分析:根據(jù)匯總的用戶請求日志,如圖5所示,可以統(tǒng)計出用戶請求的調(diào)用數(shù)據(jù),在各服務器的各模塊的進程中該用戶請求運行的時間消耗。
[0050]3、對分布式系統(tǒng)中各模塊調(diào)用頻率的分析:除了可以查看各用戶請求調(diào)用各模塊的平均值和最大值之外,還可以根據(jù)不同的維度,即從時間,標識符以及設備的角度查看程序調(diào)用情況的分布,例如如圖`6所示,可從設備的角度查看所有用戶請求在該設備上的分布情況。
[0051]基于同一發(fā)明構(gòu)思,本申請實施例還提供了一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的裝置,由于該裝置解決問題的原理與前述一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法相似,因此該裝置的實施可以參見方法的實施,重復之處不再贅述。
[0052]本申請實施例提供的一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的裝置,如圖7所示,包括:
[0053]采樣模塊01,用于對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣;
[0054]標識符生成模塊02,用于對各服務器采樣到的用戶請求生成對應的標識符,該標識符在所述用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中;
[0055]注入跟蹤接口模塊03,用于預先對分布式系統(tǒng)中各服務器運行的進程注入跟蹤接口,當進程運行到該跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將所述標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志;
[0056]日志匯總模塊04,用于將生成的日志按照所對應的標識符分別進行匯總。
[0057]進一步地,上述裝置如圖2所示,還包括:日志分析模塊05,用于對匯總后的日志進行分析并輸出分析結(jié)果,具體采用以下方式或其任意組合分析日志:對同一種調(diào)用方式的用戶請求進行不同路徑的分析;對用戶請求在分布式系統(tǒng)中的運行路徑,以及在各模塊中運行時間的分析;對分布式系統(tǒng)中各模塊調(diào)用頻率的分析。
[0058]通過以上的實施方式的描述,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請實施例可以通過硬件實現(xiàn),也可以借助軟件加必要的通用硬件平臺的方式來實現(xiàn)?;谶@樣的理解,本申請實施例的技術(shù)方案可以以軟件產(chǎn)品的形式體現(xiàn)出來,該軟件產(chǎn)品可以存儲在一個非易失性存儲介質(zhì)(可以是⑶-ROM,U盤,移動硬盤等)中,包括若干指令用以使得一臺計算機設備(可以是個人計算機,服務器,或者網(wǎng)絡設備等)執(zhí)行本申請各個實施例所述的方法。
[0059]本領(lǐng)域技術(shù)人員可以理解附圖只是一個優(yōu)選實施例的示意圖,附圖中的模塊或流程并不一定是實施本申請所必須的。
[0060]本領(lǐng)域技術(shù)人員可以理解實施例中的裝置中的模塊可以按照實施例描述進行分布于實施例的裝置中,也可以進行相應變化位于不同于本實施例的一個或多個裝置中。上述實施例的模塊可以合并為一個模塊,也可以進一步拆分成多個子模塊。
[0061 ] 上述本申請實施例序號僅僅為了描述,不代表實施例的優(yōu)劣。
[0062]本申請實施例提供的一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法及裝置,在用戶訪問分布式系統(tǒng)時,對分布式系統(tǒng)接收到的用戶請求進行采樣,并對采樣到的用戶請求生成與其對應的標識符,在該用戶請求調(diào)用的各線程中傳遞該標識符;針對分布式系統(tǒng)中各服務器運行的每個被預先注入跟蹤接口的進程,當運行到跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志;最后將生成的日志按照所對應的標識符分別進行匯總。在對用戶請求進行監(jiān)測時,由于采用采樣的方式抽樣監(jiān)測用戶請求,對系統(tǒng)性能的擾動低,不會給監(jiān)測系統(tǒng)造成太大壓力,并且,針對監(jiān)測分布式系統(tǒng)中的各服務器產(chǎn)生的日志能夠按照用戶請求的標識符實時匯總,能夠支持實時分析用戶請求的行為。
[0063]顯然,本領(lǐng)域的技術(shù)人員可以對本申請進行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。
【權(quán)利要求】
1.一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的方法,其特征在于,包括: 對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣; 對各服務器采樣到的用戶請求生成對應的標識符,所述標識符在所述用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中; 預先對分布式系統(tǒng)中各服務器運行的進程注入跟蹤接口,當進程運行到該跟蹤接口時,若檢測到當前該進程包含用戶請求對應的標識符,則將所述標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志; 將生成的日志按照所對應的標識符分別進行匯總。
2.如權(quán)利要求1所述的方法,其特征在于,對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣,具體包括: 對分布式系統(tǒng)中各服務器接收到的用戶請求按照1%_5%的比例進行隨機采樣。
3.如權(quán)利要求1所述的方法,其特征在于,所述對各服務器采樣到的用戶請求生成對應的標識符,具體包括: 針對各接收服務器采樣到的用戶請求,根據(jù)請求發(fā)送時間和請求接收服務器的標識按照設定的算法生成唯一對應的標識符。
4.如權(quán)利要求1所述的方法,其特征在于,所述標識符在所述用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中,具體包括: 在同一進程中所述用戶請求 調(diào)用不同的線程時,在進程創(chuàng)建子進程時,將所述標識符傳遞到所述子進程中; 當所述用戶請求跨進程調(diào)用不同的線程時,所述標識符符被通訊協(xié)議傳遞到各進程中。
5.如權(quán)利要求1所述的方法,其特征在于,將所述標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息輸出到日志中,具體包括: 將所述標識符、調(diào)用的函數(shù)名稱和位置、調(diào)用函數(shù)的時間、以及調(diào)用時產(chǎn)生的錯誤信息輸出到日志中。
6.如權(quán)利要求1-5任一項所述的方法,其特征在于,將生成的日志按照對應的標識符分別進行匯總,具體包括: 將收集到的日志按照不同標識符分別進行歸類; 對于同一標識符的日志,按照不同的進程分別進行歸類; 對于同一標識符的同一進程的日志,按照函數(shù)按照調(diào)用開始和結(jié)束時間分別進行合并; 對同一標識符跨進程的日志,按照時間順序進行組合。
7.如權(quán)利要求1-5任一項所述的方法,其特征在于,在將日志進行匯總之后,還包括: 對匯總后的日志進行分析,并輸出分析結(jié)果。
8.如權(quán)利要求7所述的方法,其特征在于,所述對匯總后的日志進行分析,具體包括以下方式或其任意組合: 對同一種調(diào)用方式的用戶請求進行不同路徑的分析; 對用戶請求在分布式系統(tǒng)中的運行路徑,以及在各模塊中運行時間的分析; 對分布式系統(tǒng)中各模塊調(diào)用頻率的分析。
9.一種監(jiān)測用戶請求在分布式系統(tǒng)中運行的裝置,其特征在于,包括: 采樣模塊,用于對分布式系統(tǒng)中各服務器接收到的用戶請求進行采樣; 標識符生成模塊,用于對各服務器采樣到的用戶請求生成對應的標識符,所述標識符在所述用戶請求調(diào)用線程時會作為變量被傳遞到當前線程中; 注入跟蹤接口模塊,用于預先對分布式系統(tǒng)中各服務器運行的進程注入跟蹤接口,當進程運行到該跟蹤接 口時,若檢測到當前該進程包含用戶請求對應的標識符,則將所述標識符和跟蹤接口所指示的函數(shù)的相關(guān)信息對應并生成日志; 日志匯總模塊,用于將生成的日志按照所對應的標識符分別進行匯總。
10.如權(quán)利要求9所述的裝置,其特征在于,還包括:日志分析模塊,用于對匯總后的日志進行分析并輸出分析結(jié)果,具體采用以下方式或其任意組合分析日志:對同一種調(diào)用方式的用戶請求進行不同路徑的分析;對用戶請求在分布式系統(tǒng)中的運行路徑,以及在各模塊中運行時間的分析;對分布式系統(tǒng)中各模塊調(diào)用頻率的分析。
【文檔編號】H04L29/08GK103684898SQ201210342909
【公開日】2014年3月26日 申請日期:2012年9月14日 優(yōu)先權(quán)日:2012年9月14日
【發(fā)明者】蔡華, 周琦, 孫廷韜 申請人:阿里巴巴集團控股有限公司