SpringCloud之服務(wù)追蹤

??為什么要服務(wù)追蹤?我們?cè)陂_發(fā)中經(jīng)常會(huì)碰到這樣的問題,我們調(diào)用別人的服務(wù)A耗時(shí)很多,這個(gè)時(shí)候我就去聯(lián)系服務(wù)A的負(fù)責(zé)人讓他幫排查下問題所在,但是服務(wù)A的負(fù)責(zé)人也很頭疼,說他的服務(wù)也調(diào)用了別人的服務(wù)B、C、D等等,那這個(gè)時(shí)候排查就非常麻煩了,所以我們需要進(jìn)行服務(wù)追蹤~

1.Spring Cloud Sleuth

1.1pom.xml

        <!--包含sleuth和zipkin-->
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-zipkin</artifactId>
        </dependency>

1.2yaml配置文件

spring:
  zipkin:
    base-url: http://zipkin:9411/
    sender:
      type: web
  sleuth:
    sampler:
      probability: 1

??這里多講一個(gè)就是sampler.probability,是因?yàn)樵诎l(fā)生服務(wù)調(diào)用的時(shí)候,sleuth會(huì)通過采樣的方式來獲取服務(wù)調(diào)用時(shí)間的,sleuth默認(rèn)是10%的抽樣統(tǒng)計(jì),為什么只有10%,假設(shè)說每個(gè)請(qǐng)求調(diào)用都進(jìn)行采樣的,會(huì)耗費(fèi)系統(tǒng)的性能,所以默認(rèn)10%,但是我們這里為了方便觀察,將采樣率寫成了100%

1.3啟動(dòng)zipkin Server

??這里建議大家使用docker來啟動(dòng)zipkin Server非常快速

2.分布式追蹤系統(tǒng)

2.1核心步驟

2.1.1數(shù)據(jù)采集

??數(shù)據(jù)采集過程中,由于各個(gè)系統(tǒng)的API不兼容,導(dǎo)致如果我們希望切換追蹤系統(tǒng),往往會(huì)有很大的改動(dòng),因此我們引入了OpenTracing規(guī)范,以解決不同分布式追蹤系統(tǒng)API不兼容的問題。OpenTracing的優(yōu)勢(shì)在于提供了平臺(tái)無關(guān)、廠商無關(guān)的API,使得開發(fā)人員便于切換追蹤系統(tǒng)。OpenTracing來自于大名鼎鼎的CNCF,現(xiàn)有的ZIPKIN、TRACER、JAEGER、GRPC等等都跟進(jìn)OpenTracing。OpenTracing數(shù)據(jù)模型中重要的概念就是trace--調(diào)用鏈,是通過歸屬此調(diào)用鏈的span來定義的。span和trace都是谷歌的開源項(xiàng)目。這里面還有一個(gè)專業(yè)術(shù)語叫Annotation,Annotation是用來即時(shí)記錄一個(gè)事件的,一些核心注解用來定義一個(gè)請(qǐng)求的開始和結(jié)束,可以理解成span生命周期中重要時(shí)刻的數(shù)據(jù)快照,比如一般包含發(fā)生時(shí)刻、事件類型等信息。事件類型一共有四種:
1.cs:客戶端發(fā)起請(qǐng)求的時(shí)間
2.cr:客戶端收到處理完請(qǐng)求的時(shí)間
3.ss:服務(wù)端處理完邏輯的時(shí)間
4.sr:服務(wù)端收到調(diào)用端請(qǐng)求的時(shí)間
所以客戶端調(diào)用時(shí)間=cr-cs,服務(wù)端處理時(shí)間=sr-ss

2.1.2數(shù)據(jù)存儲(chǔ)

2.1.3查詢展示

3.Zipkin

??ZipKin是twitter的開源項(xiàng)目,其架構(gòu)圖如下


zipkin架構(gòu)圖

ZipKin中的關(guān)鍵東西就是Collector、Storage、API、UI,Collection就是收集調(diào)用新,Storage存儲(chǔ)這些調(diào)用信息,默認(rèn)是放在內(nèi)存中的,如果怕重啟丟失可以放到數(shù)據(jù)庫中,API是暴露給外部訪問采集統(tǒng)計(jì)信息的,UI是為了方便展示數(shù)據(jù)采樣相信的模塊。下圖是zipkinUI的一個(gè)截圖:


image.png

3.1zipkin中的幾個(gè)關(guān)鍵概念

3.1.1traceId

??全局的跟蹤Id,是跟蹤的入口點(diǎn),根據(jù)需求來決定在哪里生成traceId,比如我們常見的一個(gè)Http請(qǐng)求,入口是web應(yīng)用,結(jié)束點(diǎn)就是請(qǐng)求的返回點(diǎn)。

3.1.2spanId

??下一層的請(qǐng)求跟蹤Id,一個(gè)traceId可以包含一個(gè)以上的spanId。

3.1.3parentId

??上一次請(qǐng)求跟蹤Id,用來將前后請(qǐng)求串聯(lián)起來。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容