摘要:微服務中調用棧的獲取,使用的開發者會很自然想到用來攔截,但是攔截同一個類的多個方法之間的調用很不方便,有侵入性,因此并不適合。調用棧的跟蹤也提供了這個能力,可以獲得當前方法的調用棧信息。
一、調用鏈跟蹤的作用
調用鏈跟蹤包括
1.前端到后端的調用鏈
2.單個服務內部方法之間的調用鏈
3.微服務之間的調用鏈
4.應用服務和數據庫之間的調用鏈
5.應用服務和第三方服務中間的調用鏈,例如Redis,MQ
調用鏈跟蹤的作用有:
1.定位多個微服務調用故障時哪個是故障點。
2.性能分析
3.SQL分析
4.方法或服務調用合理性分析
5.調用邏輯和數據流分析,這點對于新人特別有用,看了調用鏈和執行SQL就知道具體做了啥
二、調用鏈跟蹤的需求那么調用鏈跟蹤涉及到需求有哪些,看圖:
1.前端到后端以及多個微服務之間需要將調用信息傳遞過去,否則調用鏈會斷掉
2.每個微服務要能獲取到調用棧,注意調用棧和調用順序不同,僅僅獲取調用順序是不夠的,試比較:
左圖只體現了調用順序,沒有體現調用棧信息,而右圖既體現了調用順序又體現了調用棧信息。
3.微服務內部的調用信息要能傳遞,并且做到無侵入
4.和數據庫交互的微服務要能獲取到調用的SQL
三、Java調用鏈跟蹤涉及的關鍵技術調用信息傳遞,這個信息可以通過http消息頭傳遞
1) 前端只要在發送請求時設置就好。不過通常一般不跟蹤前端的調用耗時,因為那樣會多一次網絡交互。
2) 對于微服務需要攔截request請求將調用鏈信息設置到消息頭中,在spring中可以通過寫RestTemplate攔截器和Fegin攔截器來實現。
微服務中調用棧的獲取,使用spring的開發者會很自然想到用AOP來攔截,但是spring AOP攔截同一個類的多個方法之間的調用很不方便,有侵入性,因此并不適合。最好的方式是使用javaagent,通過代碼注入的方式來攔截。
微服務內部調用信息傳遞需要通過線程范圍的變量來傳遞,Java中的ThreadLocal已經提供了這個能力。
調用棧的跟蹤Java也提供了這個能力,可以獲得當前方法的調用棧信息。
SQL監控,對于使用mybatis的會想到用mybatis的攔截器,這種方式有的情況下會不工作(原因未明),并且依賴mybatis,因此應用更底層的方法去攔截SQL,一種方式是自行實現JDBC代理類,另一種方式是使用第三方開源的SQL監控工具。
end.
加入《Java棧實戰營》知識星球,參與討論,更多實戰代碼分享,不就是幾斤蘋果,幾個榮耀道具的事嗎!
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/75796.html
摘要:一網上關于的介紹很多,請找度娘和谷兄。唯一提的一點是字節碼注入比較好用的是,封裝度很高,使用簡單。二代碼樣例以下為關鍵代碼樣例,可以依樣畫瓢自行改造。加入棧實戰營知識星球,參與討論,更多實戰代碼分享,不就是幾斤蘋果,幾個榮耀道具的事嗎 一、Javaagent 網上關于Javaagent的介紹很多,請找度娘和谷兄。唯一提的一點是字節碼注入比較好用的是bytebuddy,封裝度很高,使用簡...
摘要:一監控一般思路中監控一般通過代理模式實現,如下右邊是接口類。配置將項目下文件放到目錄下或者中,找到將類名修改為你自己的實現類,并去掉其他所有配置都不用修改就可以監控到。至此,可以監控到語句了。 一、SQL監控一般思路 Java中SQL監控一般通過代理模式實現,如下: showImg(https://segmentfault.com/img/bVbvWML?w=2187&h=1090)...
摘要:除了以上級別的成員變量共享,在調用鏈跟蹤時要能識別不同分層下的多個類實例的調用是同一個請求,而這個請求的調用都在一個獨立線程內完成,此時就要用到線程級變量共享。 一、Java類成員作用域 JAVA類成員作用域參考下圖: showImg(https://segmentfault.com/img/bVbvWlh?w=1695&h=925); Java虛擬機級作用域,通過在類成員變量前加...
摘要:一調用棧調用鏈監控僅僅獲取調用順序是不夠的,如前所描述左邊只體現了順序,右邊體現了順序和調用棧信息。二獲取調用棧在中獲取調用棧的方法如下代碼示例輸出結果可以看到第個棧是調用的方法。 一、調用棧 調用鏈監控僅僅獲取調用順序是不夠的,如前所描述: showImg(https://segmentfault.com/img/bVbvV9H?w=500&h=230);左邊只體現了順序,右邊體現...
閱讀 2986·2023-04-26 02:25
閱讀 2258·2023-04-25 18:05
閱讀 650·2021-09-30 09:57
閱讀 2946·2021-09-27 14:10
閱讀 1656·2019-08-30 15:44
閱讀 1005·2019-08-29 15:28
閱讀 2531·2019-08-29 14:10
閱讀 2265·2019-08-29 13:30