系列文章目錄
第三十二章 微服務(wù)鏈路跟蹤-sleuth zipkin
第三十章 分布式事務(wù)框架seata TCC模式
第二十九章 分布式事務(wù)框架seata AT模式
第十二章 Spring Cloud Alibaba Sentinel
第十一章 Spring Cloud Alibaba nacos配置中心
第十章 SpringCloud Alibaba 之 Nacos discovery
第七章 Spring Cloud 之 GateWay
第六章 Spring Cloud 之 OpenFeign
前言
大型分布式微服務(wù)系統(tǒng)中,一個系統(tǒng)被拆分成N多個模塊,這些模塊負責(zé)不同的功能,組合成一套系統(tǒng),最終可以提供豐富的功能。在這種分布式架構(gòu)中,一次請求往往需要涉及到多個服務(wù)服務(wù)之間的調(diào)用錯綜復(fù)雜,對于維護的成本成倍增加,勢必存在以下幾個問題:
- 服務(wù)之間的依賴與被依賴的關(guān)系如何能夠清晰的看到?
- 出現(xiàn)異常時如何能夠快速定位到異常服務(wù)?
- 出現(xiàn)性能瓶頸時如何能夠迅速定位哪個服務(wù)影響的?
為了能夠在分布式架構(gòu)中快速定位問題,分布式鏈路追蹤應(yīng)運而生。將一次分布式請求還原成調(diào)用鏈路,進行日志記錄,性能監(jiān)控并將一次分布式請求的調(diào)用情況集中展示。
1、Spring Cloud Sleuth
一個分布式服務(wù)跟蹤系統(tǒng),主要有三部分:數(shù)據(jù)收集、數(shù)據(jù)存儲和數(shù)據(jù)展示。
服務(wù)追蹤的追蹤單元是從客戶發(fā)起請求(request)抵達被追蹤系統(tǒng)的邊界開始,到被追蹤系統(tǒng)向客戶返回響應(yīng)(response)為止的過程,稱為一個“trace”。每個 trace 中會調(diào)用若干個服務(wù),為了記錄調(diào)用了哪些服務(wù),以及每次調(diào)用的消耗時間等信息,在每次調(diào)用服務(wù)時,埋入一個調(diào)用記錄,稱為一個“span”。這樣,若干個有序的 span 就組成了一個 trace。在系統(tǒng)向外界提供服務(wù)的過程中,會不斷地有請求和響應(yīng)發(fā)生,也就會不斷生成 trace,把這些帶有span 的 trace 記錄下來,就可以描繪出一幅系統(tǒng)的服務(wù)拓撲圖。附帶上 span 中的響應(yīng)時間,以及請求成功與否等信息,就可以在發(fā)生問題的時候,找到異常的服務(wù);根據(jù)歷史數(shù)據(jù),還可以從系統(tǒng)整體層面分析出哪里性能差,定位性能優(yōu)化的目標。
Spring Cloud Sleuth只負責(zé)產(chǎn)生監(jiān)控數(shù)據(jù),通過日志的方式展示出來,并沒有提供可視化的UI界面。
Spring Cloud Sleuth可以結(jié)合zipkin,將信息發(fā)送到zipkin,利用zipkin的存儲來存儲信息,利用zipkin ui來展示數(shù)據(jù)。
1.1、概念
1.1.1、Span
基本的工作單元,相當(dāng)于鏈表中的一個節(jié)點,通過一個唯一ID標記它的開始、具體過程和結(jié)束。我們可以通過其中存儲的開始和結(jié)束的時間戳來統(tǒng)計服務(wù)調(diào)用的耗時。除此之外還可以獲取事件的名稱、請求信息等。
1.1.2、Trace
一系列的Span串聯(lián)形成的一個樹狀結(jié)構(gòu),當(dāng)請求到達系統(tǒng)的入口時就會創(chuàng)建一個唯一ID(traceId),唯一標識一條鏈路。這個traceId始終在服務(wù)之間傳遞,直到請求的返回,那么就可以使用這個traceId將整個請求串聯(lián)起來,形成一條完整的鏈路。
1.1.3、Annotation
一些核心注解用來標注微服務(wù)調(diào)用之間的事件,重要的幾個注解如下:
- cs(Client Send):客戶端發(fā)出請求,開始一個請求的生命周期
- sr(Server Received):服務(wù)端接受請求并處理;sr-cs = 網(wǎng)絡(luò)延遲
- ss(Server Send):服務(wù)端處理完畢準備發(fā)送到客戶端;ss - sr = 服務(wù)器上的請求處理時間
- cr(Client Reveived):客戶端接受到服務(wù)端的響應(yīng),請求結(jié)束; cr - sr = 請求的總時間
2、spring cloud整合sleuth
準備四個服務(wù)
- business-service
- account-service
- storage-service
- order-service
2.1、在common-service中添加依賴
<!--鏈路跟蹤-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
2.2、在各個業(yè)務(wù)服務(wù)中添加配置
## 設(shè)置openFeign和sleuth的日志級別為debug,方便查看日志信息
logging:
level:
org.springframework.cloud.openfeign: debug
org.springframework.cloud.sleuth: debug
- 第一個:服務(wù)名稱
- 第二個:traceId,唯一標識一條鏈路
- 第三個:spanId,鏈路中的基本工作單元id
3、整合zipkin
Zipkin 是 Twitter 的一個開源項目,它基于Google Dapper實現(xiàn),它致力于收集服務(wù)的定時數(shù)據(jù)。
Zipkin共分為4個核心的組件,如下:文章來源:http://www.zghlxwxcb.cn/news/detail-483851.html
- Collector:收集器組件,它主要用于處理從外部系統(tǒng)發(fā)送過來的跟蹤信息,將這些信息轉(zhuǎn)換為Zipkin內(nèi)部處理的 Span 格式,以支持后續(xù)的存儲、分析、展示等功能。
- Storage:存儲組件,它主要對處理收集器接收到的跟蹤信息,默認會將這些信息存儲在內(nèi)存中,我們也可以修改此存儲策略,通過使用其他存儲組件將跟蹤信息存儲到數(shù)據(jù)庫中
- RESTful API:API 組件,它主要用來提供外部訪問接口。比如給客戶端展示跟蹤信息,或是外接系統(tǒng)訪問以實現(xiàn)監(jiān)控等。
- UI:基于API組件實現(xiàn)的上層應(yīng)用。通過UI組件用戶可以方便而有直觀地查詢和分析跟蹤信息
zipkin分為服務(wù)端和客戶端,服務(wù)端主要用來收集跟蹤數(shù)據(jù)并且展示,客戶端主要功能是發(fā)送給服務(wù)端,微服務(wù)的應(yīng)用也就是客戶端,這樣一旦發(fā)生調(diào)用,就會觸發(fā)監(jiān)聽器將sleuth日志數(shù)據(jù)傳輸給服務(wù)端。
3.1、搭建zipkin服務(wù)端
3.1.1、下載安裝
下載:https://repo1.maven.org/maven2/io/zipkin/zipkin-server/2.24.0/zipkin-server-2.24.0-exec.jar
將java包放到d盤zipkin里面
啟動:java -jar zipkin-server-2.24.0-exec.jar
訪問系統(tǒng):http://127.0.0.1:9411/文章來源地址http://www.zghlxwxcb.cn/news/detail-483851.html
3.1.2、在common-service中添加依賴
<!--鏈路追蹤 zipkin依賴,其中包含Sleuth的依賴-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
<version>2.2.8.RELEASE</version>
</dependency>
3.1.3、在各業(yè)務(wù)服務(wù)中加上配置
spring:
cloud:
sleuth:
sampler:
# 日志數(shù)據(jù)采樣百分比,默認0.1(10%),這里為了測試設(shè)置成了100%,生產(chǎn)環(huán)境只需要0.1即可
probability: 1.0
zipkin:
#zipkin server的請求地址
base-url: http://127.0.0.1:9411
#讓nacos把它當(dāng)成一個URL,而不要當(dāng)做服務(wù)名
discovery-client-enabled: false
到了這里,關(guān)于《微服務(wù)實戰(zhàn)》 第三十二章 微服務(wù)鏈路跟蹤-sleuth zipkin的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!