日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

skywalking 源码解析——多线程变量传递 EnhancedInstance

發布時間:2023/12/10 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 skywalking 源码解析——多线程变量传递 EnhancedInstance 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

大家好,我是烤鴨:

今天分享下 skywalking源碼,正好自己用到相關的內容了。

1. 攔截點

三個主要的攔截器、構造方法、靜態方法和示例方法,每個切面里都可以重寫這些方法,并且指定進入的攔截器。

2.? trace 相關內容

建議觀看這篇博客,寫的很詳細了。

http://www.iocoder.cn/SkyWalking/agent-collect-trace/?vip&guanfang#

我也簡單寫下吧,其實 skywalking 也是借鑒了 open-trace的思路,這是源碼 https://github.com/opentrace-community?

一條鏈路可能會有多個span(記錄當前節點的信息比如 ip、端口、請求時間、當前span的鏈路id,以及需要上下文傳遞的信息 ?全局鏈路id、header中的參數)

span之間需要關聯,會有 parent和child的概念,在多線程的場景下,可能會有 一個parent多個child的情況。

CarrierItem 用于上下文傳遞參數,結構是 key、value,還有自身節點,類似鏈表的結構

ContextManager 全局 span管理器,用于創建不同類型 、銷毀、復制 span

ContextSnapshot span的快照版,用于不同線程間使用

SW8CarrierItem skywalking 8.x 版本特有的,會隨著版本升級類名會改變,對 ?CarrierItem ?包裝,和當前作用域以及上下文綁定

TracingContext 鏈路管理器,看一下類的注釋吧。通過 ContextCarrier 和 ContextSnapshot 傳遞參數生成 TraceSegmentRef,利用的方法是 inject ?和 extract (從前一個元素中獲取參數)

* In skywalking core concept, FOLLOW_OF is an abstract concept when cross-process MQ or cross-thread async/batch tasks* happen, we used {@link TraceSegmentRef} for these scenarios. Check {@link TraceSegmentRef} which is from {@link* ContextCarrier} or {@link ContextSnapshot}.

3.??說下 EnhancedInstance

這個類出現在所有切面方法的請求參數,這就是作者做的優化。跟上面一樣,構造器攔截模板、實例方法和靜態方法。

這幾個類是被放到啟動類加載器加載。 InstanceMethodsAroundInterceptor INTERCEPTOR 這個變量是在 prepareJREInstrumentation 進行的初始化。至此這幾個攔截模板會攔截所有的方法,如果是有攔截器的再按攔截的處理,否則直接放行。除了更好的異常處理、還可以傳遞參數就是 EnhancedInstance

4.??以 org.apache.skywalking.apm.plugin.hystrix.v1 插件為例說一下 EnhancedInstance 的作用

簡單介紹下 hystrix ,是一個很好的管理降級和熔斷的插件,可以自定義接口超時 走熔斷或 超時邏輯,并且可以重寫 回滾時的方法,避免了由于下游服務不可用拖垮了上游服務。

看下 HystrixCommandInstrumentation 攔截的是 com.netflix.hystrix.HystrixCommand 類的 run 和 getFallback 方法。

看下 run的攔截器。

從 EnhancedInstance 中獲取 enhanceRequireObjectCache 自定義的傳遞變量。為了避免異步線程,將當前span的快照版放到自定義傳遞變量中。

再看下 getFallback 的攔截器

continue 方法就是 從父線程獲取context ,創建子節點

5? 最后說幾句

其實不管是跨進程還是跨線程,只要攔截了進程或線程轉換的入口,將 EnhancedInstance 傳入當前快照對象,這樣子線程/進程 是可以獲取到東西的。就比如 new Thread的時候,攔截了構造器,EnhancedInstance .set(snapshot) 下游就可以獲取到了。

?

總結

以上是生活随笔為你收集整理的skywalking 源码解析——多线程变量传递 EnhancedInstance的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国产精品久久久久久久久久久久久久 | 日韩综合 | 国产精品亚洲五月天丁香 | 91成人精品视频 | 久国产| 久久久久久久黄色 | 日本中文字幕久久 | 久久av网 | 亚洲视频在线网 | 小箩莉末发育娇小性色xxxx | 欧美另类在线观看 | 成人深夜影院 | 中出在线视频 | 蜜臀av在线播放 | 91黄色小视频 | 免费无码肉片在线观看 | 黑人操亚洲女人 | 国产精品亚洲专区无码牛牛 | 亚洲成人伦理 | 中文字幕专区 | 国产成人精品亚洲男人的天堂 | 欧美激情二区三区 | 素人一区二区 | 有奶水的迷人少妇 | 国产人与zoxxxx另类 | 亚洲av午夜精品一区二区三区 | 三级自拍视频 | 一区二区三区亚洲精品 | 精东传媒在线观看 | 国产又好看的毛片 | 高跟鞋调教—视频|vk | 99人妻碰碰碰久久久久禁片 | 欧美日韩生活片 | 爽爽爽av| 国产一区二区三区免费播放 | 我不卡一区二区 | a猛片| 国产福利合集 | 精品亚洲国产成人av制服丝袜 | 男女无套免费视频网站动漫 | 国产精品手机视频 | 久久久久久久久久久影院 | 亚洲美女精品 | 成人三级在线视频 | 日本在线资源 | 亚洲小说在线 | 美女张开腿流出白浆 | 久久久久久久久久久网 | 风间由美一二三区av片 | 天天操穴 | 精品国产乱码一区二 | 99免费观看 | 欧美日韩中文字幕一区 | 小仙女av | 艳母动漫在线播放 | 新天堂在线| 国产精品97 | 五月av综合av国产av | 91美女免费看 | 国模小黎自慰gogo人体 | 91视频 - 88av | 一区二区三区四区在线播放 | 国产亚洲成av人在线观看导航 | 麻豆最新 | 欧美色第一页 | 精品国产无码AV | 国产精品一二三区 | 欧美性猛交富婆 | 欧美体内she精高潮 日韩一区免费 | 98久久| 日本一区二区三区四区五区 | 久久精视频 | 女人舌吻男人茎视频 | 九九三级 | 亚洲精品久久久久 | 91桃色污| 日韩欧美成人免费视频 | 中文字幕第23页 | 日韩美女视频一区 | 国产毛片在线视频 | 久久美 | 亚洲精品97 | 在线国产毛片 | 国产农村妇女毛片精品久久 | 在线视频久久 | 欧美性大交 | 国产99久久久国产精品成人免费 | 精品国产一级久久 | 日韩欧美网站 | 我要看免费毛片 | 久久久精品人妻av一区二区三区 | 好吊色网站 | 亚洲在线观看一区二区 | 草草视频网站 | 熟女少妇一区二区 | 成人国产片女人爽到高潮 | 99免费在线观看视频 | 玖玖视频网 | 成人精品视频一区二区 |