溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

這么在Spring Cloud中使用Sleuth

發(fā)布時(shí)間:2021-06-12 17:28:43 來源:億速云 閱讀:406 作者:Leah 欄目:web開發(fā)

這期內(nèi)容當(dāng)中小編將會(huì)給大家?guī)碛嘘P(guān)這么在Spring Cloud中使用Sleuth,文章內(nèi)容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

1.微服務(wù)的現(xiàn)狀?

前段時(shí)間在一個(gè)交流群吹水,一個(gè)大佬說他們公司總共有上百個(gè)微服務(wù)。假如這句話真實(shí),那么他們公司微服務(wù)調(diào)用可能會(huì)如下圖所示:

這么在Spring Cloud中使用Sleuth

來自網(wǎng)絡(luò)的這張圖很好的說明了微服務(wù)調(diào)用之間的復(fù)雜性。每一次前端請(qǐng)求往往需要涉及到多個(gè)服務(wù)。這些服務(wù)有可能是由不同的團(tuán)隊(duì)開發(fā)、可能使用不同的編程語言來實(shí)現(xiàn)、有可能布在了幾千臺(tái)服務(wù)器,橫跨多個(gè)不同的數(shù)據(jù)中心。因此,就需要一些可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時(shí)候,能夠快速定位和解決問題。所以,鏈路追蹤這個(gè)思想就被人提了出來,而我們今天要討論的Sleuth就是借鑒該思想演變來的分布式追蹤解決方案。

2.微服務(wù)跟蹤解決了什么問題?

微服務(wù)跟蹤(sleuth)其實(shí)是一個(gè)工具,它在整個(gè)分布式系統(tǒng)中能跟蹤一個(gè)用戶請(qǐng)求的過程(包括數(shù)據(jù)采集,數(shù)據(jù)傳輸,數(shù)據(jù)存儲(chǔ),數(shù)據(jù)分析,數(shù)據(jù)可視化),捕獲這些跟蹤數(shù)據(jù),就能構(gòu)建微服務(wù)的整個(gè)調(diào)用鏈的視圖,這是調(diào)試和監(jiān)控微服務(wù)的關(guān)鍵工具。SpringCloudSleuth有4個(gè)特點(diǎn)

這么在Spring Cloud中使用Sleuth

Sleuth基本術(shù)語

Spring Cloud Sleuth采用的是Google的開源項(xiàng)目Dapper的專業(yè)術(shù)語。

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. Span:基本工作單元,發(fā)送一個(gè)遠(yuǎn)程調(diào)度任務(wù)  就會(huì)產(chǎn)生一個(gè)Span,Span是一個(gè)64位ID唯一標(biāo)識(shí)的,Trace是用另一個(gè)64位ID唯一標(biāo)識(shí)的,Span還有其他數(shù)據(jù)信息,比如摘要、時(shí)間戳事件、Span的ID、以及進(jìn)度ID。

  3. Trace:一系列Span組成的一個(gè)樹狀結(jié)構(gòu)。請(qǐng)求一個(gè)微服務(wù)系統(tǒng)的API接口,這個(gè)API接口,需要調(diào)用多個(gè)微服務(wù),調(diào)用每個(gè)微服務(wù)都會(huì)產(chǎn)生一個(gè)新的Span,所有由這個(gè)請(qǐng)求產(chǎn)生的Span組成了這個(gè)Trace。

  4. Annotation:用來及時(shí)記錄一個(gè)事件的,一些核心注解用來定義一個(gè)請(qǐng)求的開始和結(jié)束 。這些注解包括以下:

  • cs - Client Sent -客戶端發(fā)送一個(gè)請(qǐng)求,這個(gè)注解描述了這個(gè)Span的開始

  • sr - Server Received -服務(wù)端獲得請(qǐng)求并準(zhǔn)備開始處理它,如果將其sr減去cs時(shí)間戳便可得到網(wǎng)絡(luò)傳輸?shù)臅r(shí)間。

  • ss - Server Sent  (服務(wù)端發(fā)送響應(yīng))–該注解表明請(qǐng)求處理的完成(當(dāng)請(qǐng)求返回客戶端),如果ss的時(shí)間戳減去sr時(shí)間戳,就可以得到服務(wù)器請(qǐng)求的時(shí)間。

  • cr - Client Received (客戶端接收響應(yīng))-此時(shí)Span的結(jié)束,如果cr的時(shí)間戳減去cs時(shí)間戳便可以得到整個(gè)請(qǐng)求所消耗的時(shí)間。

Sleuth入門案例

首先我們搞一個(gè)項(xiàng)目,大概如下面樣子

這么在Spring Cloud中使用Sleuth

我們引入下面的依賴

<dependencies>     <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-web</artifactId>     </dependency>     <!--關(guān)鍵依賴-->     <dependency>         <groupId>org.springframework.cloud</groupId>         <artifactId>spring-cloud-starter-sleuth</artifactId>     </dependency>      <dependency>         <groupId>org.projectlombok</groupId>         <artifactId>lombok</artifactId>     </dependency>      <dependency>         <groupId>org.springframework.boot</groupId>         <artifactId>spring-boot-starter-test</artifactId>         <scope>test</scope>         <exclusions>             <exclusion>                 <groupId>org.junit.vintage</groupId>                 <artifactId>junit-vintage-engine</artifactId>             </exclusion>         </exclusions>     </dependency>

我們創(chuàng)建一個(gè)測(cè)試類:

package com.milo.sleuth.controller;  import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController;  @RestController @Slf4j public class Example {        @RequestMapping("/")     String home() {         log.info("Hello world!");         return "Hello World!";     }   }

啟動(dòng)項(xiàng)目以后,我們?cè)L問一下:

這么在Spring Cloud中使用Sleuth

這時(shí)候,我們來看看日志情況:

這么在Spring Cloud中使用Sleuth

我們來看看它們分別代表什么意思

  • 第一個(gè)就是我們服務(wù)名稱,對(duì)應(yīng)我們配置文件中的spring.application.name

  • 第二個(gè)就是traceId

  • 第三個(gè)就是spanId

雖然我們現(xiàn)在通過日志文件也可以識(shí)別調(diào)用路徑,貌似并不是很方便,很直觀,接下里我們來了解一下Zipkin

Zipkin介紹

Zipkin是一個(gè)分布式跟蹤系統(tǒng)。它有助于收集解決服務(wù)體系結(jié)構(gòu)中的延遲問題所需的時(shí)序數(shù)據(jù)。功能包括該數(shù)據(jù)的收集和查找。

如果您在日志文件中有跟蹤ID,則可以直接跳至該跟蹤ID。否則,您可以基于諸如服務(wù),操作名稱,標(biāo)簽和持續(xù)時(shí)間之類的屬性進(jìn)行查詢。將為您匯總一些有趣的數(shù)據(jù),例如服務(wù)中花費(fèi)的時(shí)間百分比以及操作是否失敗。

這么在Spring Cloud中使用Sleuth

Zipkin  UI還提供了一個(gè)依賴關(guān)系圖,該關(guān)系圖顯示了每個(gè)應(yīng)用程序中跟蹤了多少個(gè)請(qǐng)求。這對(duì)于識(shí)別包括錯(cuò)誤路徑或?qū)Σ毁澇墒褂玫姆?wù)的調(diào)用在內(nèi)的匯總行為可能會(huì)有所幫助。

這么在Spring Cloud中使用Sleuth

需要對(duì)應(yīng)用程序進(jìn)行“儀表化”以將跟蹤數(shù)據(jù)報(bào)告給Zipkin。這通常意味著配置跟蹤器或儀器庫。向Zipkin報(bào)告數(shù)據(jù)的最流行方法是通過HTTP或Kafka,盡管存在許多其他選項(xiàng),例如Apache  ActiveMQ,gRPC和RabbitMQ。提供給UI的數(shù)據(jù)存儲(chǔ)在內(nèi)存中,或持久存儲(chǔ)在受支持的后端(例如Apache  Cassandra或Elasticsearch)中。

Sleuth整合Zipkin

Zipkin 分為兩端,一個(gè)是 Zipkin 服務(wù)端,一個(gè)是 Zipkin  客戶端,客戶端也就是微服務(wù)的應(yīng)用,客戶端會(huì)配置服務(wù)端的 URL 地址,一旦發(fā)生服務(wù)間的調(diào)用的時(shí)候,會(huì)被配置在微服務(wù)里面的 Sleuth  的監(jiān)聽器監(jiān)聽,并生成相應(yīng)的 Trace 和 Span 信息發(fā)送給服務(wù)端。發(fā)送的方式有兩種,一種是消息總線的方式如 RabbitMQ 發(fā)送,還有一種是 HTTP  報(bào)文的方式發(fā)送。

客戶端

首先,在剛剛的依賴文件中,我們加一個(gè)新成員

<dependency>            <groupId>org.springframework.cloud</groupId>            <artifactId>spring-cloud-starter-zipkin</artifactId>        </dependency>

接著修改配置文件

# 應(yīng)用名稱 spring:   application:     name: springcloud-sleuth # 應(yīng)用服務(wù) WEB 訪問端口 server:   port: 9876     zipkin:     base-url: http://localhost:9411/ # 服務(wù)端地址     sender:       type: web                      # 數(shù)據(jù)傳輸方式,web 表示以 HTTP 報(bào)文的形式向服務(wù)端發(fā)送數(shù)據(jù)   sleuth:     sampler:       probability: 1.0               # 收集數(shù)據(jù)百分比,默認(rèn) 0.1(10%)

服務(wù)端

Zipkin的服務(wù)端是一個(gè)可執(zhí)行的jar文件,我們需要去下載

  • “下載地址:https://search.maven.org/remote_content?g=io.zipkin&a=zipkin-server&v=LATEST&c=exec

上面地址默認(rèn)下載最新版本,大家也可以去下面的網(wǎng)址下載指定版本

這么在Spring Cloud中使用Sleuth

這么在Spring Cloud中使用Sleuth

現(xiàn)在我們啟動(dòng)jar包

“java -jar zipkin-server-2.23.2-exec.jar

 這么在Spring Cloud中使用Sleuth

測(cè)試效果

接下來我們?cè)L問一下http://localhost:9411/zipkin/,結(jié)果如下:

這么在Spring Cloud中使用Sleuth

環(huán)境搭架好了,現(xiàn)在我們測(cè)試一把,看看接入Zipkin之后,我們會(huì)看到什么效果?

我們?cè)L問http://localhost:9876/之后,點(diǎn)擊Zipkin控制臺(tái)的Run Query查詢一下,看到如下效果:

這么在Spring Cloud中使用Sleuth

繼續(xù)點(diǎn)擊show,我們?nèi)タ纯丛斍?/p>

這么在Spring Cloud中使用Sleuth

果然很強(qiáng)大,執(zhí)行時(shí)間,什么請(qǐng)求方式,請(qǐng)求路徑,那個(gè)類,那個(gè)方法一目了然

鑒于我們剛剛新建的只是一次很簡單的調(diào)用,不足以模擬微服務(wù)場景,接下來我們來看一個(gè)復(fù)雜一點(diǎn)的場景;

這里為了偷懶,我們就不去創(chuàng)建自己的微服務(wù),使用官方給我們提供的測(cè)試案例brave-example,如下所示

這么在Spring Cloud中使用Sleuth

我們把代碼搞下來,這個(gè)項(xiàng)目好像整合了好多技術(shù)的測(cè)試案例,看不懂,我就研究了下面的這個(gè)跑起來測(cè)試一下

這么在Spring Cloud中使用Sleuth

我們用idea把這個(gè)項(xiàng)目導(dǎo)入進(jìn)來,大概長這個(gè)鬼樣子

這么在Spring Cloud中使用Sleuth

  • Backend代表后端服務(wù)

  • Frontend代表前端服務(wù)

現(xiàn)在,我們首先保證我們Zipkin的服務(wù)端是ok的,這時(shí)候你首先啟動(dòng)后端服務(wù),然后啟動(dòng)前端服務(wù),其實(shí)就是執(zhí)行以下main方法,接下來我們?cè)L問一下http://127.0.0.1:8081/,如下圖所示

這么在Spring Cloud中使用Sleuth

現(xiàn)在我們?nèi)ipkin查詢一下,發(fā)現(xiàn)了一個(gè)新大陸,開心

這么在Spring Cloud中使用Sleuth

就行show一下,看看里面啥情況

這么在Spring Cloud中使用Sleuth

上述就是小編為大家分享的這么在Spring Cloud中使用Sleuth了,如果剛好有類似的疑惑,不妨參照上述分析進(jìn)行理解。如果想知道更多相關(guān)知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道。

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI