目錄
1.概述
2.搭建演示工程
3.sleuth
4.zipkin
5.插拔式存儲
5.1.存儲到MySQL中
5.2.用MQ來流量削峰
6.聯(lián)系作者
1.概述
當(dāng)采用分布式架構(gòu)后,一次請求會在多個(gè)服務(wù)之間流轉(zhuǎn),組成單次調(diào)用鏈的服務(wù)往往都分散在不同的服務(wù)器上。這就會帶來一個(gè)問題:
故障難以溯源。
發(fā)起請求,然后請求報(bào)錯(cuò),到底是調(diào)用鏈中哪一環(huán)出了問題?很難以定位。這時(shí)候就需要用到鏈路追蹤技術(shù)了。所謂的鏈路追蹤技術(shù),也就是想辦法讓分布式系統(tǒng)中的單次請求的鏈路調(diào)用成為可被追蹤的,便于在出現(xiàn)故障的時(shí)候進(jìn)行快速的定位溯源。
目前有兩套實(shí)現(xiàn)思路:
-
基于日志來實(shí)現(xiàn),常用到的有Sleuth、zipkin
-
基于agent來實(shí)現(xiàn),常用到的有skywaiking
本文講解的是其中基于日志實(shí)現(xiàn)的sleuth以及其配套的可視化套件zipkin。
關(guān)于分布式鏈路追蹤作者上文講過詳細(xì)的概論:
https://bugman.blog.csdn.net/article/details/135175596?spm=1001.2014.3001.5502
2.搭建演示工程
本次用于演示的工程很簡單,用spring cloud來搭建三個(gè)服務(wù),一個(gè)app服務(wù)用來提供服務(wù),一個(gè)鑒權(quán)中心用來登錄以及鑒權(quán),一個(gè)bis服務(wù)用來聚合:
在bis中調(diào)用鑒權(quán)中心來登錄獲取token,然后校驗(yàn)token,校驗(yàn)通過后調(diào)用app提供的服務(wù):
spring cloud的成體系的文章,在博主的另一個(gè)專欄,從0開始一步步深入淺出(該系列登上過2023年的新星計(jì)劃):
3.sleuth
依賴:
<dependency>
? ? <groupId>org.springframework.cloud</groupId>
? ? <artifactId>spring-cloud-starter-sleuth</artifactId>
? ? <version>3.1.8</version>
</dependency>
去訪問bis,會看到:
bis的日志:
AuthenticationCenter的日志:
APP的日志:
我想到這里很多讀者會有個(gè)疑問。
問:
sleuth這么保證一個(gè)鏈路上的traceID是相同的?
答:
當(dāng)一個(gè)請求進(jìn)入 Spring Cloud 的微服務(wù)系統(tǒng)時(shí),Sleuth 會生成一個(gè)唯一的 Trace ID。如果請求是從另一個(gè)使用 Sleuth 的服務(wù)傳入的,Sleuth 會提取并使用該服務(wù)傳入的 Trace ID。Sleuth 集成了這些通信協(xié)議,如HTTP協(xié)議,并在服務(wù)間調(diào)用時(shí)自動將 Trace ID 添加到 HTTP 請求的頭部、消息的元數(shù)據(jù)等中。
4.zipkin
光有了日志,進(jìn)行問題排查還是要一條條的翻,還是很繁瑣。所以配套出現(xiàn)了可視化套件,由推特開發(fā)的——zipkin。其能對標(biāo)準(zhǔn)opentracing格式的日志進(jìn)行收集和展示。zipkin采用的標(biāo)準(zhǔn)的CS架構(gòu),client向server發(fā)數(shù)據(jù)。
服務(wù)端:
服務(wù)端是一個(gè)jar包,直接跑起來就可以,下載地址:
Central Repository: io/zipkin/zipkin-server
客戶端:
依賴:
<dependency>
? ?<groupId>org.springframework.cloud</groupId>
? ?<artifactId>spring-cloud-starter-zipkin</artifactId>
? ?<version>2.2.1.RELEASE</version>
</dependency>
配置:
#zipkin server地址
spring.zipkin.base-url=http://localhost:9411/
#client向server發(fā)送數(shù)據(jù)的方式,web,http報(bào)文
spring.zipkin.sender.type=web
效果:
zipkin的啟動日志里已經(jīng)清晰的告訴了Web界面的訪問地址是多少:
訪問127.0.0.1:9411/可以看到:
點(diǎn)進(jìn)鏈路可以看到單次請求的詳細(xì)內(nèi)容:
5.插拔式存儲
zipkin從各個(gè)client中收集到的server上的數(shù)據(jù)存到哪兒去?默認(rèn)是將數(shù)據(jù)存儲在內(nèi)存中,除此之外zipkin還支持多種數(shù)據(jù)的存儲方式,如mysql、ES等,根據(jù)場景需要可自行切換。
5.1.存儲到MySQL中
要存儲到MySQL中首先當(dāng)然是要先建表,zipkin在項(xiàng)目文件中自帶了mysql的建表腳本:
https://github.com/openzipkin/zipkin/blob/master/zipkin-storage/mysql-v1/src/main/resources/mysql.sql
server的源碼工程的配置文件中可以看到,存儲默認(rèn)是內(nèi)存,參數(shù)有默認(rèn)值,但是支持傳參來設(shè)置:
所以在用java -jar啟動的時(shí)候可以通過跟參數(shù)的方式來切換存儲類型:
java -jar zipkin-server-2.20.1-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSOL_TCP_PORT=3306 --MYSQL_USER=root --MYSQL_PASS=admin --MYSQL_DB=zipkin
這樣數(shù)據(jù)就會存進(jìn)MySQL中來進(jìn)行持久化了。
5.2.用MQ來流量削峰
zipkin支持多種數(shù)據(jù)的存儲方式,如mysql、ES等,默認(rèn)是將數(shù)據(jù)存儲在內(nèi)存中。
server端:
從配置文件中可以看到,zipkin server支持Kafka、rabbitMQ等多種MQ,具體配置是用啟動傳參的方式來配置的:
想用哪種MQ,直接去配置即可,這里以rabbitMQ為例:
java -jar zipkin-server-2.20.1-exec.jar --STORAGE_TYPE=mysql --MYSQL_HOST=localhost --MYSOL-TCP-PORT=3306 --MYSOL_USER=root --MYSQL_PASS=admin --MYSQL_DB=zipkin --RABBIT_ADDRESSES=10.1.2.10:5672 --RABBIT_USER=quest --RABBIT_PASSWORD=guest --RABBIT_VIRTUAL_HOST=/ --RABBIT_QUEUE=zipkin
client端:
client端增加以下關(guān)于mq的配置:
#zipkin server地址
spring.zipkin.base-url=http://localhost:9411/
#client向server發(fā)送數(shù)據(jù)的方式,rabbitmq
spring.zipkin.sender.type=rabbit
#隊(duì)列名稱
spring.zipkin.rabbitmq.queue=zipkin
#服務(wù)器IP、端口號、賬戶名、密碼
spring.rabbitmq.host=10.1.2.10
spring.rabbitmq.port=5672
spring.rabbitmq.username=guest
spring.rabbitmq.password=guest
#虛擬主機(jī)地址
spring.rabbitmq.virtual-host=/
#是否開啟發(fā)布重試
spring.rabbitmq.listener.direct.retry.enabled=true
#最大重試次數(shù)
spring.rabbitmq.listener.direct.retry.max-attempts=5
#重試間隔時(shí)間
spring.rabbitmq.listener.direct.retry.initial-interval=5000
#是否開啟消費(fèi)者重試
spring.rabbitmq.listener.simple.retry.enabled=true
#最大重試次數(shù)
spring.rabbitmq.listener.simple.retry.max-attempts=5
#最大間隔時(shí)間
spring.rabbitmq.listener.simple.retry.initial-interval=5000
6.聯(lián)系作者
公眾號:
博主會在上面成體系的輸出后端干貨。
商務(wù)合作、各種交流:文章來源:http://www.zghlxwxcb.cn/news/detail-765247.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-765247.html
到了這里,關(guān)于【分布式鏈路追蹤技術(shù)】sleuth+zipkin的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!