国产成人精品18p,天天干成人网,无码专区狠狠躁天天躁,美女脱精光隐私扒开免费观看

Spring Cloud之Sleuth服務(wù)跟蹤的示例分析

發(fā)布時(shí)間:2021-08-17 12:31 來(lái)源:億速云 閱讀:0 作者:小新 欄目: 開(kāi)發(fā)技術(shù) 歡迎投稿:712375056

這篇文章主要介紹了Spring Cloud之Sleuth服務(wù)跟蹤的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著(zhù)大家一起了解一下。

在一個(gè)微服務(wù)架構中,系統的規模往往會(huì )比較大,各微服務(wù)之間的調用關(guān)系也錯綜復雜。通常一個(gè)有客戶(hù)端發(fā)起的請求在后端系統中會(huì )經(jīng)過(guò)多個(gè)不同的微服務(wù)調用阿里協(xié)同產(chǎn)生最后的請求結果。在復雜的微服務(wù)架構中,幾乎每一個(gè)前端請求都會(huì )形成一條復雜的分布式的服務(wù)調用鏈路,在每條鏈路中任何一個(gè)依賴(lài)服務(wù)出現延遲過(guò)高或錯誤的時(shí)候都有可能引起請求最后的失敗。

這個(gè)時(shí)候,對于每個(gè)請求,全鏈路調用的跟蹤就邊得越來(lái)越重要,通過(guò)實(shí)現對請求調用的跟蹤可以幫助我們快速發(fā)現問(wèn)題根源以及監控分析每條請求鏈路上的性能瓶頸等。而Spring Cloud Sleuth就是一個(gè)提供了一套完整的解決方案的組件。

準備工作

在之前的服務(wù)調用的方法上加上日志操作。

customer-server的CustomerController類(lèi):

@RequestMapping("/sayHello1")
@ResponseBody
public String invokeSayHello1(String name){
    logger.info("調用了customer-server的sayHello1方法,參數為:{}",name);
    return serivce.invokeSayHello1(name);
}

hello-server的Hello1Controller類(lèi):

@RequestMapping("/sayHello1")
public String sayHello1(@RequestParam("name") String name){
    logger.info("你好,服務(wù)名:{},端口為:{},接收到的參數為:{}",instanceName,host,name);
    try {
        int sleepTime = new Random().nextInt(3000); 
        logger.error("讓線(xiàn)程阻塞 {} 毫秒",sleepTime);
        Thread.sleep(sleepTime);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    return "你好,服務(wù)名:"+instanceName+",端口為:"+host+",接收到的參數為:"+name;
}

在頁(yè)面上訪(fǎng)問(wèn)localhost:9004/sayHello1?name=charon

#  customer-server中的打印日志
2021-08-09 23:22:33.905 INFO 19776 --- [nio-9004-exec-8] c.c.e.controller.CustomerController      : 調用了customer-server的sayHello1方法,參數為:charon

# hello-server中的打印日志
2021-08-09 23:22:33.917  INFO 2884 --- [nio-9003-exec-9] c.c.e.controller.Hello1Controller        : 你好,服務(wù)名:hello-server,端口為:9003,接收到的參數為:charon

實(shí)現跟蹤

在修改完上面的代碼后,為customer-server項目和hello-server項目添加服務(wù)跟蹤的功能,引入依賴(lài)

<!--引入sleuth鏈路追蹤的jar包-->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>

頁(yè)面調用查看日志:

#  customer-server中的打印日志
2021-08-09 23:30:44.782 INFO [customer-server,0e307552774ef605,0e307552774ef605,true] 14616 --- [nio-9004-exec-2] c.c.e.controller.CustomerController      : 調用了customer-server的sayHello1方法,參數為:charon

# hello-server中的打印日志
2021-08-09 23:30:44.807  INFO [hello-server,0e307552774ef605,4cf4d9dd57ca7478,true] 6660 --- [nio-9003-exec-2] c.c.e.controller.Hello1Controller        : 你好,服務(wù)名:hello-server,端口為:9003,接收到的參數為:charon

從上面的控制臺的輸出內容可以看到形如[customer-server,0e307552774ef605,0e307552774ef605,true] 的日志信息,而浙西而元素正是實(shí)現分布式服務(wù)跟蹤的重要組成部分,每個(gè)值的含義如下:

  • customer-server:應用的名稱(chēng),也就是application.properties中的soring。application.name的值

  • 0e307552774ef605:Spring Cloud Sleuth生成的一個(gè)ID,成微Trace ID,它用來(lái)標識一條請求鏈路,一條請求鏈路中包含一個(gè)Trace ID,多個(gè)Span ID。

  • 0e307552774ef605:Spring Cloud Sleuth生成的另一個(gè)ID,成為Span ID,它表識一個(gè)基本的工作單元,比如發(fā)慫一個(gè)HTTP請求

  • true:表示是否要將改信息輸出到Zipkin等服務(wù)中來(lái)收集和展示

在一個(gè)服務(wù)請求鏈路的調用過(guò)程中,會(huì )包吃并傳遞同一個(gè)Trace ID,從而將整個(gè)分布于不容微服務(wù)進(jìn)程中的請求跟蹤信息串聯(lián)起來(lái)。以上面輸出內容為例,customer-server和hello-server同屬于一個(gè)前端服務(wù)請求來(lái)源,所以他們的Trace ID是相同的,處于同一個(gè)請求鏈路中。通過(guò)Trace ID,我們就能將所有請求過(guò)程的日志關(guān)聯(lián)起來(lái)。

在Spring Boot應用中,通過(guò)引入spring-cloud-starter-sleuth依賴(lài)之后,他會(huì )自動(dòng)為當前應用構建起通道跟蹤機制,比如:

  • 通過(guò)RabbitMQ,Kafka等中間件傳遞的請求

  • 通過(guò)Zuul代理傳遞的請求

  • 通過(guò)RestTemplate發(fā)起的請求。

抽樣收集

通過(guò)TraceID和SpanID已經(jīng)實(shí)現了對分布式系統中的請求跟蹤,而記錄的跟蹤信息最終會(huì )被分析系統收集起來(lái),并用來(lái)實(shí)現對分布式系統的監控和分析功能。

理論上講,收集的跟蹤信息越多就可以越好的反應系統的真實(shí)運行情況,并給出更精準的預警和分析,但是在高并發(fā)的分布式系統運行時(shí),大兩的請求調用會(huì )產(chǎn)生海量的跟蹤日志信息,如果收集過(guò)多對整個(gè)系統的性能也會(huì )造成一定的影響,同時(shí)保存大兩的日志信息也需要很大的存儲開(kāi)銷(xiāo)。所以在Sleuth中菜用了抽樣收集的方式來(lái)為跟蹤信息打商收集標記。也就是我們之前在日志信息中看到的第4個(gè)布爾類(lèi)型的值,它代表了改信息是否要改后續的跟蹤信息收集器獲取或存儲。

默認情況下,Sleuth會(huì )使用 zipkin brave的ProbabilityBasedSampler的抽樣策略(現在已經(jīng)不推薦使用),即以請求百分比的方式配置和收集跟蹤信息,我們可以在配置文件中配置參數對其百分比值進(jìn)行設置(它的默認值為 0.1,代表收集 10% 的請求跟蹤信息)。

spring.sleuth.sampler.probability=0.5

而如果在配置文件中配置了 spring.sleuth.sampler.rate 的屬性值,那么便會(huì )使用zipkin Brave自帶的RateLimitingSampler的抽樣策略。不同于ProbabilityBasedSampler菜用概況收集的策略,RateLimitingSampler是菜用的限速收集,也就是說(shuō)它可以用來(lái)限制每秒跟蹤請求的最大數量。

  • 如果同時(shí)設置了 spring.sleuth.sampler.rate 和 spring.sleuth.sampler.probability 屬性值,也仍然使用 RateLimitingSampler 抽樣策略(即 spring.sleuth.sampler.probability 屬性值無(wú)效)

  • RateLimitingSampler 策略每秒間隔接受的 trace 量設置范圍:最小數字為 0,最大值為 2,147,483,647(最大 int)

整合Zipkin

Zipkin是twitter的一個(gè)開(kāi)源項目,它基于Google Dapper實(shí)現,我們可以用它來(lái)實(shí)現收集各個(gè)上的請求鏈路的跟蹤。并通過(guò)它提供的REST API接口來(lái)輔助查詢(xún)跟蹤數據以實(shí)現對分布式系統的監控程序,從而及時(shí)發(fā)現系統中出現的延遲升高問(wèn)題并找出系統性能瓶頸的根源。同時(shí),Zipkin還提供了方便的UI組件來(lái)幫助我們直觀(guān)地所搜跟蹤信息和分析請求地鏈路明細,比如可以查詢(xún)某段時(shí)間內各用戶(hù)請求地處理時(shí)間等。

Spring Boot 2.x 以后官網(wǎng)不推薦使用源碼方式編譯,推薦使用官網(wǎng)編譯好的jar執行。所以我們不熟Zipkin也使用jar包的方式。

1.下載Zipkin

我這里是到maven倉庫中下載的。

https://search.maven.org/remote_content?g=io.zipkin.java&a=zipkin-server&v=LATEST&c=exec

下載完成后,使用java -jar命令啟動(dòng)zipkin。

2.引入依賴(lài)配置

為customer-server和hello-server的項目引入zipkin的包:

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

配置文件添加zipkin的地址:

spring.zipkin.base-url=http://localhost:9411

3.測試與分析

完成所有接入Zipkin的工作后,依次講服務(wù)起來(lái),瀏覽器發(fā)送請求做測試。

點(diǎn)擊查找按鈕,下方出現服務(wù)調用的信息。注意,只有在sleuth的最后一個(gè)參數為true的時(shí)候,才會(huì )講改跟蹤信息輸出給Zipkin Server。

單擊其中的某一個(gè),還可以得到Sleuth跟蹤到的詳細信息。其中就包括時(shí)間請求時(shí)間消耗等。

單擊導航欄中的依賴(lài)按鈕,還可以查看到Zipkin根據跟蹤信息分析生成的系統關(guān)系請求鏈路依賴(lài)關(guān)系圖。

持久化到

在SpringBoot2.0之前的版本,Zipkin-Server端由我們自己創(chuàng )建項目來(lái)搭建??梢员容^靈活的選擇數據持久化的配置,SpringBoot2.0之后的版本,Zipkin-Server端由官方提供,無(wú)需我們自己搭建,那么如何選擇去配置將數據持久化到MySQL呢?

1.創(chuàng )建zipkin數據庫

在下載好的zipkin-serve的jar包中,找到zipkin-server-shared.yml的文件,

在里面可以找到關(guān)于mysql的持久化配置,可以看到數據庫名稱(chēng)默認為zipkin,

初始化mysql的腳本:https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql

創(chuàng )建的數據庫如下:

2.啟動(dòng)zipkin

在啟動(dòng)zipkin的時(shí)候,以命令行的方式啟動(dòng),輸入mysql的參數

java -jar zipkin-server-2.12.9-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=127.0.0.1 --MYSQL_TCP_PORT=3306 --MYSQL_DB=zipkin --MYSQL_USER=root --MYSQL_PASS=root

3.測試與分析

瀏覽器訪(fǎng)問(wèn),因為我這次調用服務(wù)超時(shí)了,觸發(fā)了hystrix的斷路器功能,所以這次有8個(gè)span。

關(guān)閉zipkin-server,然后重啟,發(fā)現依然能夠查詢(xún)到上一次請求的服務(wù)鏈路跟蹤數據。查看數據庫表,發(fā)現數據都存儲到表里了。

免責聲明:本站發(fā)布的內容(圖片、視頻和文字)以原創(chuàng )、來(lái)自本網(wǎng)站內容采集于網(wǎng)絡(luò )互聯(lián)網(wǎng)轉載等其它媒體和分享為主,內容觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如侵犯了原作者的版權,請告知一經(jīng)查實(shí),將立刻刪除涉嫌侵權內容,聯(lián)系我們QQ:712375056,同時(shí)歡迎投稿傳遞力量。

亚洲AV一般男女在线| 向日葵视频在线观看| 伊人色综合久久天天| JAPAN少妇洗澡VIDEOS| 乱公和我做爽死我视频| 亚洲AV综合色区无码二区偷拍|