自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Spring Cloud構(gòu)建微服務(wù)架構(gòu):分布式服務(wù)跟蹤(整合zipkin)

開(kāi)發(fā) 開(kāi)發(fā)工具 分布式
Zipkin是Twitter的一個(gè)開(kāi)源項(xiàng)目,它基于Google Dapper實(shí)現(xiàn)。我們可以使用它來(lái)收集各個(gè)服務(wù)器上請(qǐng)求鏈路的跟蹤數(shù)據(jù),并通過(guò)它提供的REST API接口來(lái)輔助我們查詢跟蹤數(shù)據(jù)以實(shí)現(xiàn)對(duì)分布式系統(tǒng)的監(jiān)控程序,從而及時(shí)地發(fā)現(xiàn)系統(tǒng)中出現(xiàn)的延遲升高問(wèn)題并找出系統(tǒng)性能瓶頸的根源。

通過(guò)上一篇《分布式服務(wù)跟蹤(整合logstash)》,我們雖然已經(jīng)能夠利用ELK平臺(tái)提供的收集、存儲(chǔ)、搜索等強(qiáng)大功能,對(duì)跟蹤信息的管理和使用已經(jīng)變得非常便利。但是,在ELK平臺(tái)中的數(shù)據(jù)分析維度缺少對(duì)請(qǐng)求鏈路中各階段時(shí)間延遲的關(guān)注,很多時(shí)候我們追溯請(qǐng)求鏈路的一個(gè)原因是為了找出整個(gè)調(diào)用鏈路中出現(xiàn)延遲過(guò)高的瓶頸源,亦或是為了實(shí)現(xiàn)對(duì)分布式系統(tǒng)做延遲監(jiān)控等與時(shí)間消耗相關(guān)的需求,這時(shí)候類(lèi)似ELK這樣的日志分析系統(tǒng)就顯得有些乏力了。對(duì)于這樣的問(wèn)題,我們就可以引入Zipkin來(lái)得以輕松解決。

Zipkin簡(jiǎn)介

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

上圖展示了Zipkin的基礎(chǔ)架構(gòu),它主要有4個(gè)核心組件構(gòu)成:

  • Collector:收集器組件,它主要用于處理從外部系統(tǒng)發(fā)送過(guò)來(lái)的跟蹤信息,將這些信息轉(zhuǎn)換為Zipkin內(nèi)部處理的Span格式,以支持后續(xù)的存儲(chǔ)、分析、展示等功能。
  • Storage:存儲(chǔ)組件,它主要對(duì)處理收集器接收到的跟蹤信息,默認(rèn)會(huì)將這些信息存儲(chǔ)在內(nèi)存中,我們也可以修改此存儲(chǔ)策略,通過(guò)使用其他存儲(chǔ)組件將跟蹤信息存儲(chǔ)到數(shù)據(jù)庫(kù)中。
  • RESTful API:API組件,它主要用來(lái)提供外部訪問(wèn)接口。比如給客戶端展示跟蹤信息,或是外接系統(tǒng)訪問(wèn)以實(shí)現(xiàn)監(jiān)控等。
  • Web UI:UI組件,基于API組件實(shí)現(xiàn)的上層應(yīng)用。通過(guò)UI組件用戶可以方便而有直觀地查詢和分析跟蹤信息。

HTTP收集

在Spring Cloud Sleuth中對(duì)Zipkin的整合進(jìn)行了自動(dòng)化配置的封裝,所以我們可以很輕松的引入和使用它,下面我們來(lái)詳細(xì)介紹一下Sleuth與Zipkin的基礎(chǔ)整合過(guò)程。主要分為兩步:

***步:搭建Zipkin Server

創(chuàng)建一個(gè)基礎(chǔ)的Spring Boot應(yīng)用,命名為zipkin-server,并在pom.xml中引入Zipkin Server的相關(guān)依賴(lài),具體如下:

  1. <parent> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-parent</artifactId> 
  4.   <version>1.5.10.RELEASE</version> 
  5.   <relativePath/> 
  6. </parent> 
  7. <dependencies> 
  8.   <dependency> 
  9.     <groupId>io.zipkin.java</groupId> 
  10.     <artifactId>zipkin-server</artifactId> 
  11.   </dependency> 
  12.   <dependency> 
  13.     <groupId>io.zipkin.java</groupId> 
  14.     <artifactId>zipkin-autoconfigure-ui</artifactId> 
  15.   </dependency> 
  16. </dependencies> 
  17. <dependencyManagement> 
  18.   <dependencies> 
  19.     <dependency> 
  20.         <groupId>org.springframework.cloud</groupId> 
  21.         <artifactId>spring-cloud-dependencies</artifactId> 
  22.         <version>Dalston.SR5</version> 
  23.         <type>pom</type> 
  24.         <scope>import</scope> 
  25.     </dependency> 
  26.   </dependencies> 
  27. </dependencyManagement> 
  • 創(chuàng)建應(yīng)用主類(lèi)ZipkinApplication,使用@EnableZipkinServer注解來(lái)啟動(dòng)Zipkin Server,具體如下:
  1. @EnableZipkinServer 
  2. @SpringBootApplication 
  3. public class ZipkinApplication { 
  4.  
  5.   public static void main(String[] args) { 
  6.     SpringApplication.run(ZipkinApplication.class, args); 
  7.   } 
  8.  
  • 在application.properties中做一些簡(jiǎn)單配置,比如:設(shè)置服務(wù)端口號(hào)為9411(客戶端整合時(shí)候,自動(dòng)化配置會(huì)連接9411端口,所以在服務(wù)端設(shè)置了端口為9411的話,客戶端可以省去這個(gè)配置)。
  1. spring.application.name=zipkin-server 
  2. server.port=9411 

創(chuàng)建完上述工程之后,我們將其啟動(dòng)起來(lái),并訪問(wèn)http://localhost:9411/,我們可以看到如下圖所示的Zipkin管理頁(yè)面:

第二步:為應(yīng)用引入和配置Zipkin服務(wù)

在完成了Zipkin Server的搭建之后,我們還需要對(duì)應(yīng)用做一些配置,以實(shí)現(xiàn)將跟蹤信息輸出到Zipkin Server。我們以之前實(shí)現(xiàn)的trace-1和trace-2為例,對(duì)它們做以下改造內(nèi)容:

  • 在trace-1和trace-2的pom.xml中引入spring-cloud-sleuth-zipkin依賴(lài),具體如下所示。
  1. <dependency> 
  2.   <groupId>org.springframework.cloud</groupId> 
  3.   <artifactId>spring-cloud-sleuth-zipkin</artifactId> 
  4. </dependency> 
  • 在trace-1和trace-2的application.properties中增加Zipkin Server的配置信息,具體如下所示(如果在zip-server應(yīng)用中,我們將其端口設(shè)置為9411,并且均在本地調(diào)試的話,該參數(shù)也可以不配置,因?yàn)槟J(rèn)值就是http://localhost:9411)。
  1. spring.zipkin.base-url=http://localhost:9411 

測(cè)試與分析

到這里我們已經(jīng)完成了接入Zipkin Server的所有基本工作,我們可以繼續(xù)將eureka-server、trace-1和trace-2啟動(dòng)起來(lái),然后我們做一些測(cè)試實(shí)驗(yàn),以對(duì)它的運(yùn)行機(jī)制有一些初步的理解。

我們先來(lái)向trace-1的接口發(fā)送幾個(gè)請(qǐng)求:http://localhost:9101/trace-1,當(dāng)我們?cè)谌罩局谐霈F(xiàn)跟蹤信息的***一個(gè)值為true的時(shí)候,說(shuō)明該跟蹤信息會(huì)輸出給Zipkin Server,所以此時(shí)我們可以去Zipkin Server的管理頁(yè)面中選擇合適的查詢條件后,點(diǎn)擊Find Traces,就可以查詢出剛才在日志中出現(xiàn)的跟蹤信息了(也可以根據(jù)日志中的Trace ID,在頁(yè)面的右上角輸入框中來(lái)搜索),具體如下頁(yè)面所示:

點(diǎn)擊下方trace-1端點(diǎn)的跟蹤信息,我們還可以得到Sleuth收集到的跟蹤到詳細(xì)信息,其中包括了我們關(guān)注的請(qǐng)求時(shí)間消耗等。

點(diǎn)擊導(dǎo)航欄中的Dependencies菜單,我們還可以查看Zipkin Server根據(jù)跟蹤信息分析生成的系統(tǒng)請(qǐng)求鏈路依賴(lài)關(guān)系圖:

消息中間件收集

Spring Cloud Sleuth在整合Zipkin時(shí),不僅實(shí)現(xiàn)了以HTTP的方式收集跟蹤信息,還實(shí)現(xiàn)了通過(guò)消息中間件來(lái)對(duì)跟蹤信息進(jìn)行異步收集的封裝。通過(guò)結(jié)合Spring Cloud Stream,我們可以非常輕松的讓?xiě)?yīng)用客戶端將跟蹤信息輸出到消息中間件上,同時(shí)Zipkin服務(wù)端從消息中間件上異步地消費(fèi)這些跟蹤信息。

接下來(lái),我們基于之前實(shí)現(xiàn)的trace-1和trace-2應(yīng)用以及zipkin-server服務(wù)端做一些改造,以實(shí)現(xiàn)通過(guò)消息中間件來(lái)收集跟蹤信息。改造的內(nèi)容非常簡(jiǎn)單,只需要我們做項(xiàng)目依賴(lài)和配置文件做一些調(diào)整就能馬上實(shí)現(xiàn),下面我們分別對(duì)客戶端和服務(wù)端的改造內(nèi)容做詳細(xì)說(shuō)明:

***步:修改客戶端trace-1和trace-2

  • 為了讓trace-1和trace-2在產(chǎn)生跟蹤信息之后,能夠?qū)⒊闃佑涗涊敵龅较⒅虚g件中,我們除了需要之前引入的spring-cloud-starter-sleuth依賴(lài)之外,還需要引入zipkin對(duì)Spring Cloud Stream的擴(kuò)展依賴(lài)spring-cloud-sleuth-stream以及基于Spring Cloud Stream實(shí)現(xiàn)的消息中間件綁定器依賴(lài),以使用RabbitMQ為例,我們可以加入如下依賴(lài):
  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-sleuth-stream</artifactId> 
  4. </dependency> 
  5.  
  6. <dependency> 
  7.     <groupId>org.springframework.cloud</groupId> 
  8.     <artifactId>spring-cloud-starter-stream-rabbit</artifactId> 
  9. </dependency> 
  • 在application.properties配置中去掉HTTP方式實(shí)現(xiàn)時(shí)使用的spring.zipkin.base-url參數(shù),并根據(jù)實(shí)際部署情況,增加消息中間件的相關(guān)配置,比如下面這些關(guān)于RabbitMQ的配置信息:
  1. spring.rabbitmq.host=localhost 
  2. spring.rabbitmq.port=5672 
  3. spring.rabbitmq.username=springcloud 
  4. spring.rabbitmq.password=123456 

第二步:修改zipkin-server服務(wù)端

為了讓zipkin-server服務(wù)端能夠從消息中間件中獲取跟蹤信息,我們只需要在pom.xml中引入針對(duì)消息中間件收集封裝的服務(wù)端依賴(lài)spring-cloud-sleuth-zipkin-stream,同時(shí)為了支持具體使用的消息中間件,我們還需要引入針對(duì)消息中間件的綁定器實(shí)現(xiàn),比如以使用RabbitMQ為例,我們可以在依賴(lài)中增加如下內(nèi)容:

  1. <dependency> 
  2.     <groupId>org.springframework.cloud</groupId> 
  3.     <artifactId>spring-cloud-sleuth-zipkin-stream</artifactId> 
  4. </dependency> 
  5.  
  6. <dependency> 
  7.     <groupId>org.springframework.cloud</groupId> 
  8.     <artifactId>spring-cloud-starter-stream-rabbit</artifactId> 
  9. </dependency> 
  10.  
  11. <dependency> 
  12.     <groupId>io.zipkin.java</groupId> 
  13.     <artifactId>zipkin-autoconfigure-ui</artifactId> 
  14. </dependency> 

其中,spring-cloud-sleuth-zipkin-stream依賴(lài)是實(shí)現(xiàn)從消息中間件收集跟蹤信息的核心封裝,其中包含了用于整合消息中間件的核心依賴(lài)、zipkin服務(wù)端的核心依賴(lài)、以及一些其他通常會(huì)被使用的依賴(lài)(比如:用于擴(kuò)展數(shù)據(jù)存儲(chǔ)的依賴(lài)、用于支持測(cè)試的依賴(lài)等)。但是,需要注意的是這個(gè)包里并沒(méi)有引入zipkin的前端依賴(lài)zipkin-autoconfigure-ui,為了方便使用,我們?cè)谶@里也引用了它。

測(cè)試與分析

在完成了上述改造內(nèi)容之后,我們繼續(xù)將eureka-server、trace-1和trace-2、zipkin-server都啟動(dòng)起來(lái),同時(shí)確保RabbitMQ也處于運(yùn)行狀態(tài)。此時(shí),我們可以在RabbitMQ的控制頁(yè)面中看到一個(gè)名為sleuth的交換器,它就是zipkin的消息中間件收集器實(shí)現(xiàn)使用的默認(rèn)主題。

***,我們使用之前的驗(yàn)證方法,通過(guò)向trace-1的接口發(fā)送幾個(gè)請(qǐng)求:http://localhost:9101/trace-1,當(dāng)有被抽樣收集的跟蹤信息時(shí)(調(diào)試時(shí)我們可以設(shè)置AlwaysSampler抽樣機(jī)制來(lái)讓每個(gè)跟蹤信息都被收集),我們可以在RabbitMQ的控制頁(yè)面中發(fā)現(xiàn)有消息被發(fā)送到了sleuth交換器中,同時(shí)我們?cè)俚絲ipkin服務(wù)端的Web頁(yè)面中也能夠搜索到相應(yīng)的跟蹤信息,那么我們使用消息中間件來(lái)收集跟蹤信息的任務(wù)到這里就完成了。

完整示例:

讀者可以根據(jù)喜好選擇下面的兩個(gè)倉(cāng)庫(kù)中查看trace-1和trace-2兩個(gè)項(xiàng)目:

Github:https://github.com/dyc87112/SpringCloud-Learning/

Gitee:https://gitee.com/didispace/SpringCloud-Learning/

【本文為51CTO專(zhuān)欄作者“翟永超”的原創(chuàng)稿件,轉(zhuǎn)載請(qǐng)通過(guò)51CTO聯(lián)系作者獲取授權(quán)】

戳這里,看該作者更多好文

責(zé)任編輯:武曉燕 來(lái)源: 51CTO專(zhuān)欄
相關(guān)推薦

2018-04-02 15:01:31

微服務(wù)架構(gòu)分布式服務(wù)

2018-03-13 16:42:26

分布式服務(wù)跟蹤

2018-03-02 16:11:29

Spring Clou分布式服務(wù)跟蹤

2018-04-16 14:56:56

微服務(wù)架構(gòu)分布式服務(wù)

2018-04-18 16:07:49

Spring Clou微服務(wù)分布式

2017-07-28 16:41:53

Spring Clou微服務(wù)架構(gòu)

2018-05-23 15:58:27

Spring Clou微服務(wù)架構(gòu)

2018-07-19 14:58:14

Spring Clou微服務(wù)架構(gòu)

2022-02-18 09:30:48

分布式Spring應(yīng)用程序

2021-06-09 09:00:00

微服務(wù)架構(gòu)技術(shù)

2017-06-26 09:06:10

Spring Clou微服務(wù)架構(gòu)

2017-09-04 16:15:44

服務(wù)網(wǎng)關(guān)架構(gòu)

2020-05-26 11:59:30

日志鏈路微服務(wù)架構(gòu)

2017-07-03 09:50:07

Spring Clou微服務(wù)架構(gòu)

2017-08-10 11:15:05

Spring Clou微服務(wù)架構(gòu)

2017-08-09 15:50:47

Spring Clou微服務(wù)架構(gòu)

2023-09-12 22:58:51

分布式架構(gòu)微服務(wù)

2017-06-25 13:33:25

Spring Clou微服務(wù)架構(gòu)

2017-07-04 17:35:46

微服務(wù)架構(gòu)Spring Clou

2023-08-25 16:26:49

微服務(wù)架構(gòu)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)