中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ServiceComb如何實現zipkin分布式調用鏈追蹤

發布時間:2022-01-17 14:26:54 來源:億速云 閱讀:169 作者:iii 欄目:云計算

這篇文章主要介紹“ServiceComb如何實現zipkin分布式調用鏈追蹤”的相關知識,小編通過實際案例向大家展示操作過程,操作方法簡單快捷,實用性強,希望這篇“ServiceComb如何實現zipkin分布式調用鏈追蹤”文章能幫助大家解決問題。

SeviceComb + Zipkin 簡介

ServiceComb 是Apache的微服務頂級項目,在微服務框架中,微服務之間通過網絡進行通信,我們必須處理所有與網絡相關的問題,例如延遲,超時和分區。隨著部署的微服務越來越多,我們需要系統監控微服務網絡延遲和請求流。

ServiceComb如何實現zipkin分布式調用鏈追蹤

ServiceComb 如何支持zipkin

ServiceComb如何實現zipkin分布式調用鏈追蹤

ServiceComb 提供了處理鏈機制,消費端和服務端的調用鏈請求都會經過該處理鏈,通過擴展handler處理鏈接口,可以實現負載均衡、熔斷容錯、流量控制等能力。同樣,調用鏈追蹤能力也是通過擴展該接口實現的。

ServiceComb 擴展handler處理鏈接口,編寫了handler-tracing-zipkin 模塊。Handler-tracing-zipkin 模塊在java-chassis/handler處理鏈下,模塊內容如下。

ServiceComb如何實現zipkin分布式調用鏈追蹤

handler-tracing-zipkin模塊實現追蹤調用鏈記錄數據和上傳追蹤數據到zipkin服務,即可支持Zipkin。

ServiceComb如何實現zipkin分布式調用鏈追蹤

ServiceComb如何實現zipkin分布式調用鏈追蹤

handler-tracing-zipkin模塊源碼解讀

ServiceComb如何實現zipkin分布式調用鏈追蹤

每一次接口調用請求都會觸發handler鏈的處理,而在這個handler鏈當中,ServiceComb專門為Zipkin編寫了handler類ZipkinConsumerTracingHandler

和ZipkinProviderTracingHandle進行適配。下面我們來看下這兩個類。

ZipkinConsumerTracingHandler 和ZipkinProviderTracingHandler

查看這兩個類源碼可知,都繼承自ZipkinTracingHandler
,都只有兩個構造器。

區別在于分別向父類構造器傳遞了不同的ZipkinTracingDelegate實現。

ZipkinTracingDelegate實現分別為ZipkinConsumerDelegate和ZipkinProviderDelegate。

這兩個代理類分別封裝了對應的Zipkin請求消費和請求生產操作。下面重點看下ZipkinTracingHandler的源碼實現。

ZipkinTracingHandler

handler類最重要的方法是handler方法,該方法接收一個Invocation對象和AsyncResponse對象(全是ServiceComb內置對象)。Invocation對象包含當前調用相關信息(包括HttpServletRequest對象)。下面我們看下這個方法做了什么事情。

ServiceComb如何實現zipkin分布式調用鏈追蹤

handler方法執行步驟:

調用了tracingDelegate.createSpan(invocation)方法創建了一個span。tracingDelegate是一個ZipkinTracingDelegate對象。

調用當前對象的onResponse方法封裝成一個AsyncResponse對象。該對象是是一個函數式對象,在如下圖的函數體中可看到最終調用了tracingDelegate.onResponse(span, response, error)上傳span到Zipkin服務器

ServiceComb如何實現zipkin分布式調用鏈追蹤

調用invocation.next()方法將生成的AsyncResponse對象傳遞給下一個handler處理。

如果在以上操作中發生異常,將調用tracingDelegate.onResponse(span, null, e)方法發送帶有異常信息的span到Zipkin服務器。

從以上分析我們可以看到tracingDelegate十分重要,下面我們接著看這個ZipkinTracingDelegate接口到底做了什么。

ZipkinTracingDelegate接口

如下圖,該接口定義了4個方法。

1.tracer() ,獲取對應的追蹤器

2.createSpan(), 根據Invocation對象攜帶的信息創建對應的span

3.onResponse(),將span對象和對應的響應信息和異常信息上傳到Zipkin服務器

4.name() , 區分消費操作和生產操作

ServiceComb如何實現zipkin分布式調用鏈追蹤

該接口有兩個實現類ZipkinConsumerDelegate
和ZipkinProviderDelegate,分別對應請求消費操作和請求生產操作。

下面我們可以看到兩個實現的區別。

ZipkinConsumerDelegate和ZipkinProviderDelegate

下面我們先上兩張圖片仔細對比一下,第一張是ZipkinConsumerDelegate類,第二張是ZipkinProviderDelegate類。

ServiceComb如何實現zipkin分布式調用鏈追蹤

ServiceComb如何實現zipkin分布式調用鏈追蹤

我們會發現它們都是用handler變量來進行相應的操作,注意這里的handler變量在兩個類分別是不一樣的類型,ZipkinConsumerDelegate的handler變量是HttpClientHandler對象,而ZipkinProviderDelegate的hanler變量是HttpServerHandler對象。HttpClientHandler和HttpServerHandler類都是final修飾的類,不可繼承。前面我們看到創建span和發送span都是由這兩個類來負責,那么我們來看下這兩個對象怎么生成的。

仔細觀察可發現↓↓↓

ZipkinConsumerDelegate構造器部分代碼:

this.handler = HttpClientHandler.create(httpTracing, new ConsumerInvocationAdapter());

ZipkinProviderDelegate構造器部分代碼 : 

this.handler = HttpServerHandler.create(httpTracing, new ProviderInvocationAdapter());

從上面兩段構造器代碼中可發現HttpClientHandler和HttpServerHandler在創建對象時都分別傳入ConsumerInvocationAdapter對象和ProviderInvocationAdapter對象,這兩個對象分別繼承了Zipkin的HttpClientAdapter和HttpServerAdapter抽象類,提供了屬于ServiceComb本身的客戶端信息和服務端信息。而Zipkin可以在不改動代碼的情況下獲取到這些定制信息并用于調用鏈追蹤。

關于“ServiceComb如何實現zipkin分布式調用鏈追蹤”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識,可以關注億速云行業資訊頻道,小編每天都會為大家更新不同的知識點。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沐川县| 松滋市| 五大连池市| 香港| 梁河县| 平昌县| 西丰县| 历史| 祁阳县| 柯坪县| 武宁县| 徐闻县| 西乌| 博客| 定州市| 海兴县| 拜城县| 蒲江县| 炎陵县| 当阳市| 汪清县| 文成县| 涿州市| 朝阳区| 昌宁县| 恩施市| 柏乡县| 云阳县| 无极县| 陆河县| 若羌县| 尤溪县| 和静县| 乌拉特中旗| 宝坻区| 吉安市| 仁寿县| 富蕴县| 满洲里市| 唐河县| 甘孜县|