欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Sleuth(Micrometer)+ZipKin分布式鏈路問題小結(jié)

 更新時間:2024年10月25日 09:46:29   作者:changming06  
在微服務(wù)架構(gòu)中,分布式鏈路追蹤技術(shù)成為了解決系統(tǒng)復雜調(diào)用問題的關(guān)鍵,本文介紹了其他鏈路追蹤方案,如Cat、Pinpoint和Skywalking,展示了分布式鏈路追蹤技術(shù)的多樣化,感興趣的朋友一起看看吧

1.Sleuth進入維護模式

替代方案 -> Micrometer Tracing

2.分布式鏈路追蹤概述

2.1 出現(xiàn)背景

在微服務(wù)框架中,一個由客戶端發(fā)起的請求在后端系統(tǒng)中會經(jīng)過多個不同的服務(wù)節(jié)點調(diào)用來協(xié)調(diào)產(chǎn)生最后的結(jié)果,每一個前端請求都會形成一條復雜的分布式服務(wù)調(diào)用鏈路,鏈路中的任何一環(huán)出現(xiàn)高延時或錯誤都會引起整個請求最后的失敗。

隨著系統(tǒng)的復雜化,導致微服務(wù)的增多,調(diào)用鏈路的變長

2.2 要解決的問題

在大規(guī)模分布式與微服務(wù)集群下,如何實時的觀測系統(tǒng)的整體調(diào)用鏈路情況、如何快速發(fā)現(xiàn)并定位到問題、如何盡可能精確的判斷故障對系統(tǒng)的影響范圍與影響程度、如何盡可能精確的梳理出服務(wù)之間的依賴關(guān)系,并判斷出服務(wù)之間的依賴關(guān)系是否合理、如何盡可能精確的分析整個系統(tǒng)調(diào)用鏈路的性能與瓶頸點、如何盡可能精確的分析系統(tǒng)的存儲瓶頸與容量規(guī)劃。

分布式鏈路追蹤技術(shù)要解決的問題,分布式鏈路追蹤(Distributed Tracing),就是將一次分布式請求還原成調(diào)用鏈路,進行日志記錄,性能監(jiān)控并將一次分布式請求的調(diào)用情況集中展示。比如各個服務(wù)節(jié)點上的耗時、請求具體到達哪臺機器上、每個服務(wù)節(jié)點的請求狀態(tài)等等。

3.新一代Spring Cloud Sleuth:Micrometer

3.1 相關(guān)地址

Micrometer官網(wǎng)

Sleuth官網(wǎng)

Sleuth_GItHub地址

Spring Cloud Sleuth will not work with Spring Boot 3.x onward. The last major version of Spring Boot that Sleuth will support is 2.x.

GitHub介紹,Spring Clour Sleuth不支持SpringBoot 3.x。

3.2 ZipKin

Micrometer負責收集數(shù)據(jù),ZipKin復雜數(shù)據(jù)的展現(xiàn)。因為收集到的數(shù)據(jù)是一個個節(jié)點,不直觀。

3.3 小總結(jié)

將前端請求到,后端系統(tǒng)響應(yīng)結(jié)果的這個過程中,所走過的分布式節(jié)點,進行日志記錄和性能監(jiān)控,并進行Web展示。

3.4 其他的分布式鏈路追蹤的解決方案

技術(shù)說明
Cat由大眾點評開源,基于Java開發(fā)的實時應(yīng)用監(jiān)控平臺,包括實時應(yīng)用監(jiān)控,業(yè)務(wù)監(jiān)控。集成方案是通過代碼埋點的方式來實現(xiàn)監(jiān)控,比如:攔截器,過濾器等。對代碼的侵入性很大,集成成本較高。風險較大。
ZipKin由大眾點評開源,基于Java開發(fā)的實時應(yīng)用監(jiān)控平臺,包括實時應(yīng)用監(jiān)控,業(yè)務(wù)監(jiān)控。集成方案是通過代碼埋點的方式來實現(xiàn)監(jiān)控,比如:攔截器,過濾器等。對代碼的侵入性很大,集成成本較高。風險較大。
PinpointPinpoint是一款開源的基于字節(jié)碼注入的調(diào)用鏈分析,以及應(yīng)用監(jiān)控分析工具。特點是支持多種插件,UI功能強大,接入端無代碼侵入。
SkywalkingSkywalking是國人開源的基于字節(jié)碼注入的調(diào)用鏈分析,以及應(yīng)用監(jiān)控分析工具。特點是支持多種插件,UI功能較強,接入端無代碼侵入。

4.分布式鏈路追蹤原理

一條鏈路通過Trace Id唯一標識,Span標識發(fā)起的請求信息,各span通過parent id 關(guān)聯(lián)起來

5.Zipkin

5.1 官網(wǎng)

https://zipkin.io

5.2 概述

Zipkin是一種分布式鏈路跟蹤系統(tǒng)圖形化的工具,Zipkin 是 Twitter 開源的分布式跟蹤系統(tǒng),能夠收集微服務(wù)運行過程中的實時調(diào)用鏈路信息,并能夠?qū)?code>這些調(diào)用鏈路信息展示到Web圖形化界面上供開發(fā)人員分析,開發(fā)人員能夠從ZipKin中分析出調(diào)用鏈路中的性能瓶頸,識別出存在問題的應(yīng)用程序,進而定位問題和解決問題。

5.3 下載地址

https://zipkin.io/pages/quickstart.html

In this section we’ll walk through building and starting an instance of Zipkin for checking out Zipkin locally. There are three options: using Java, Docker or running from source.

java 方式,下載的是jar包,直接執(zhí)行就好。

6.案例

6.1 Micrometer和Zipkin分工

Micrometer 采集數(shù)據(jù),Zipkin圖像展示

6.2 總體父工程POM

新增的

<properties>
    <micrometer-tracing.version>1.2.0</micrometer-tracing.version>
    <micrometer-observation.version>1.12.0</micrometer-observation.version>
    <feign-micrometer.version>12.5</feign-micrometer.version>
    <zipkin-reporter-brave.version>2.17.0</zipkin-reporter-brave.version>
</properties>
<!--micrometer-tracing-bom導入鏈路追蹤版本中心  1-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bom</artifactId>
    <version>${micrometer-tracing.version}</version>
    <type>pom</type>
    <scope>import</scope>
</dependency>
<!--micrometer-tracing指標追蹤  2-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing</artifactId>
    <version>${micrometer-tracing.version}</version>
</dependency>
<!--micrometer-tracing-bridge-brave適配zipkin的橋接包 3-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
    <version>${micrometer-tracing.version}</version>
</dependency>
<!--micrometer-observation 4-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-observation</artifactId>
    <version>${micrometer-observation.version}</version>
</dependency>
<!--feign-micrometer 5-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-micrometer</artifactId>
    <version>${feign-micrometer.version}</version>
</dependency>
<!--zipkin-reporter-brave 6-->
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
    <version>${zipkin-reporter-brave.version}</version>
</dependency>

由于Micrometer Tracing是一個門面工具自身并沒有實現(xiàn)完整的鏈路追蹤系統(tǒng),具體的鏈路追蹤另外需要引入的是第三方鏈路追蹤系統(tǒng)的依賴。

引入組件說明

micrometer-tracing-bom:導入鏈路追蹤版本中心,體系化說明

micrometer-tracing:指標追蹤

micrometer-tracing-bridge-brave:一個Micrometer模塊,用于與分布式跟蹤工具 Brave 集成,以收集應(yīng)用程序的分布式跟蹤數(shù)據(jù)。Brave是一個開源的分布式跟蹤工具,它可以幫助用戶在分布式系統(tǒng)中跟蹤請求的流轉(zhuǎn),它使用一種稱為"跟蹤上下文"的機制,將請求的跟蹤信息存儲在請求的頭部,然后將請求傳遞給下一個服務(wù)。在整個請求鏈中,Brave會將每個服務(wù)處理請求的時間和其他信息存儲到跟蹤數(shù)據(jù)中,以便用戶可以了解整個請求的路徑和性能。

micrometer-observation:一個基于度量庫 Micrometer的觀測模塊,用于收集應(yīng)用程序的度量數(shù)據(jù)。

feign-micrometer:一個Feign HTTP客戶端的Micrometer模塊,用于收集客戶端請求的度量數(shù)據(jù)。

zipkin-reporter-brave:一個用于將 Brave 跟蹤數(shù)據(jù)報告到Zipkin 跟蹤系統(tǒng)的庫。

補充包:spring-boot-starter-actuator SpringBoot框架的一個模塊用于監(jiān)視和管理應(yīng)用程序。

6.3 服務(wù)提供者8001修改

6.3.1 pom修改

micrometer-tracing-bom不用引入

<!--micrometer-tracing指標追蹤  1-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing</artifactId>
</dependency>
<!--micrometer-tracing-bridge-brave適配zipkin的橋接包 2-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!--micrometer-observation 3-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-observation</artifactId>
</dependency>
<!--feign-micrometer 4-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-micrometer</artifactId>
</dependency>
<!--zipkin-reporter-brave 5-->
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
</dependency>

6.3.2 YML修改

# ========================zipkin===================
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0 #采樣率默認為0.1(0.1就是10次只能有一次被記錄下來),值越大收集越及時。

6.3.3 新建PayMicrometerController

import cn.hutool.core.util.IdUtil;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
public class PayMicrometerController {
    /**
     * Micrometer(Sleuth)進行鏈路監(jiān)控的例子
     * @param id
     * @return
     */
    @GetMapping(value = "/pay/micrometer/{id}")
    public String myMicrometer(@PathVariable("id") Integer id)
    {
        return "Hello, 歡迎到來myMicrometer inputId:  "+id+" \t    服務(wù)返回:" + IdUtil.simpleUUID();
    }
}

6.4 API接口PayFeignApi修改

@GetMapping(value = "/pay/micrometer/{id}")
String myMicrometer(@PathVariable("id") Integer id);

6.5 服務(wù)調(diào)用者80修改

6.5.1 POM

 <!--micrometer-tracing指標追蹤  1-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing</artifactId>
</dependency>
<!--micrometer-tracing-bridge-brave適配zipkin的橋接包 2-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-tracing-bridge-brave</artifactId>
</dependency>
<!--micrometer-observation 3-->
<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-observation</artifactId>
</dependency>
<!--feign-micrometer 4-->
<dependency>
    <groupId>io.github.openfeign</groupId>
    <artifactId>feign-micrometer</artifactId>
</dependency>
<!--zipkin-reporter-brave 5-->
<dependency>
    <groupId>io.zipkin.reporter2</groupId>
    <artifactId>zipkin-reporter-brave</artifactId>
</dependency>

6.5.2 YML修改

# zipkin圖形展現(xiàn)地址和采樣率設(shè)置
management:
  zipkin:
    tracing:
      endpoint: http://localhost:9411/api/v2/spans
  tracing:
    sampling:
      probability: 1.0 #采樣率默認為0.1(0.1就是10次只能有一次被記錄下來),值越大收集越及時。

6.5.3 業(yè)務(wù)類修改

import com.atguigu.cloud.apis.PayFeignApi;
import jakarta.annotation.Resource;
import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
public class OrderMicrometerController
{
    @Resource
    private PayFeignApi payFeignApi;
    @GetMapping(value = "/feign/micrometer/{id}")
    public String myMicrometer(@PathVariable("id") Integer id)
    {
        return payFeignApi.myMicrometer(id);
    }
}

7.測試

訪問 localhost:x/feign/micrometer/1,會看到

{"code":"500","message":"No fallback available.","data":null,"timestamp":1729692505995}

進入http://localhost:9411/

可以看到依賴關(guān)系,以及執(zhí)行時間等

從本章節(jié),也可以看出來,約定大于配置的思想體現(xiàn),事先配置好各組件的版本信息,事半功倍。

到此這篇關(guān)于Sleuth(Micrometer)+ZipKin分布式鏈路追逐的文章就介紹到這了,更多相關(guān)Sleuth ZipKin分布式鏈路內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論