本發(fā)明涉及一種調(diào)用鏈跟蹤方法。
背景技術(shù):
當(dāng)前機票應(yīng)用服務(wù)系統(tǒng)包含很多子系統(tǒng),客戶端發(fā)起一次查詢請求或者下單請求,會通過很長的子系統(tǒng)鏈路,每個環(huán)節(jié)都有可能出現(xiàn)問題,而每個子系統(tǒng)直接提供的服務(wù)是相互隔離的,監(jiān)控日志也是互相沒有交集,同時每個子系統(tǒng)每天都會產(chǎn)生幾百G的日志量。因此,一旦客戶端發(fā)起的請求系統(tǒng)響應(yīng)異?;蛘叱瑫r,很難定位具體哪個環(huán)節(jié)出現(xiàn)問題。為了解決以上問題,現(xiàn)有技術(shù)采用的方案為:在幾個關(guān)鍵系統(tǒng)部署大量監(jiān)控日志,如果某個用戶發(fā)起的請求系統(tǒng)響應(yīng)失敗,從各個關(guān)鍵系統(tǒng)的監(jiān)控日志尋找問題。然而,現(xiàn)有技術(shù)的方案存在以下幾個缺陷:
1.需要從各個系統(tǒng)去撈取監(jiān)控日志,而且這些日志無法有效地串聯(lián),各個子系統(tǒng)的監(jiān)控日志也沒有統(tǒng)一的標(biāo)準(zhǔn);
2.有些在用戶側(cè)產(chǎn)生的問題很難復(fù)現(xiàn);
3.各個子系統(tǒng)監(jiān)控曲線是正常的,但是某些用戶請求確實是有問題,找不到問題產(chǎn)生的真正原因。
技術(shù)實現(xiàn)要素:
發(fā)明目的:本發(fā)明的目的是提供一種能夠解決現(xiàn)有技術(shù)中存在的缺陷的調(diào)用鏈跟蹤方法。
技術(shù)方案:本發(fā)明所述的調(diào)用鏈跟蹤方法,包括以下步驟:
S1:客戶端發(fā)起請求;
S2:生成全局唯一的路徑ID,并加入到系統(tǒng)標(biāo)識中;
S3:在子系統(tǒng)內(nèi)部存儲該路徑ID;
S4:向下游子系統(tǒng)進行傳遞時,將路徑ID設(shè)置到Http Request Header中,并加入調(diào)用序號;
S5:下游子系統(tǒng)得到路徑ID,并封裝自己的系統(tǒng)標(biāo)識;
S6:如果沒有傳遞到最后一個下游子系統(tǒng),則返回步驟S4,直到傳遞到最后一個下游子系統(tǒng)才進行步驟S7;
S7:各個子系統(tǒng)在日志中打印當(dāng)前上下文的路徑ID,關(guān)聯(lián)異常堆棧日志;
S8:請求執(zhí)行完畢。
進一步,步驟S2中,所述路徑ID由在最外層服務(wù)端的攔截器通過統(tǒng)一的調(diào)用鏈中間件生成。
進一步,步驟S3中,所述子系統(tǒng)內(nèi)部使用Threadlocal存儲路徑ID。
進一步,步驟S5中,所述下游子系統(tǒng)使用統(tǒng)一的調(diào)用鏈中間件解析得到路徑ID。
有益效果:與現(xiàn)有技術(shù)相比,本發(fā)明具有如下的有益效果:
1.本發(fā)明能夠有效排查客戶端某頁面響應(yīng)慢或者報錯的原因,找到請求鏈路中的瓶頸點、故障點以及該次請求的異常日志;
2.本發(fā)明能夠驗證調(diào)用路徑是否符合預(yù)期,將數(shù)據(jù)建模,衡量在單元內(nèi)的路由正確性;
3.本發(fā)明能夠建立各個層次上的依賴的錯誤指標(biāo)和響應(yīng)時長指標(biāo),找出鏈路上的不正常的、多余的依賴調(diào)用。
附圖說明
圖1為本發(fā)明具體實施方式的方法流程圖;
圖2為本發(fā)明具體實施方式的方法示例圖。
具體實施方式
下面結(jié)合附圖和具體實施方式對本發(fā)明的技術(shù)方案作進一步的介紹。
本具體實施方式公開了一種調(diào)用鏈跟蹤方法,如圖1所示,包括以下步驟:
S1:客戶端發(fā)起請求;
S2:在最外層服務(wù)端的攔截器通過統(tǒng)一的調(diào)用鏈中間件生成全局唯一的路徑ID,并加入到系統(tǒng)標(biāo)識中;
S3:在子系統(tǒng)內(nèi)部使用Threadlocal存儲該路徑ID;
S4:向下游子系統(tǒng)進行傳遞時,將路徑ID設(shè)置到Http Request Header中,并加入調(diào)用序號;
S5:下游子系統(tǒng)使用統(tǒng)一的調(diào)用鏈中間件解析得到路徑ID,并封裝自己的系統(tǒng)標(biāo)識;
S6:如果沒有傳遞到最后一個下游子系統(tǒng),則返回步驟S4,直到傳遞到最后一個下游子系統(tǒng)才進行步驟S7;
S7:各個子系統(tǒng)在日志中打印當(dāng)前上下文的路徑ID,關(guān)聯(lián)異常堆棧日志;
S8:請求執(zhí)行完畢。
其中,客戶端包括網(wǎng)站、APP、M站中的一種或多種。
如圖2所示,每個系統(tǒng)都有自己的調(diào)用序號,被調(diào)用的系統(tǒng)會在自己接收到的序號后新增一個序號級別,以表示被調(diào)用。
通過以上方法,能夠輕松找出應(yīng)用的關(guān)鍵路徑,具體能夠?qū)崿F(xiàn)以下功能:
1.能夠知道應(yīng)用被調(diào)用得最多的入口、服務(wù)是哪些;
2.能夠找出性能瓶頸、易故障點、變化點;
3.能夠用于容量評估、性能優(yōu)化;
4.能夠大大促進鏈路監(jiān)控和高峰預(yù)警;
5.能夠衡量網(wǎng)絡(luò)調(diào)用的均衡性;
6.能夠衡量在單元內(nèi)的路由正確性。
以上調(diào)用鏈相關(guān)的服務(wù)(如日志打印、生成路徑ID、設(shè)置系統(tǒng)序號等)無需各個子系統(tǒng)大批量修改代碼,只需接入調(diào)用鏈跟蹤中間件即可。調(diào)用鏈中間件會封裝TSP-Client以及HTTP-Client,在各個應(yīng)用中加入攔截器,使用統(tǒng)一方式針對路徑ID進行封裝、存儲與下一步傳遞。
可以將業(yè)務(wù)信息與鏈路結(jié)合,使用會員id聯(lián)合路徑ID的方式,找到用戶關(guān)鍵的查詢、下單數(shù)據(jù),或者黃牛刷單的操作記錄,并將這些數(shù)據(jù)做消息發(fā)布,供各個系統(tǒng)(如風(fēng)控系統(tǒng))訂閱,進行風(fēng)險識別和控制。