1. 程式人生 > >spring-cloud-sleuth+zipkin追蹤服務實現(一)

spring-cloud-sleuth+zipkin追蹤服務實現(一)

1.簡述

最近在學習spring cloud構建微服務,研究追蹤微服務rest服務呼叫鏈路的問題,接觸到zipkin,而spring cloud也提供了spring-cloud-sleuth來方便整合zipkin實現。

我們準備了三個必要的程式來做測試,分別是
1、microservice-zipkin-server
負責資料收集以及資訊展示功能。
2、microservice-zipkin-client-backend
負責微服務的生產者,對外提供 “http://127.0.0.1:11010/call/1” 的地址來完成一個簡單的功能rest請求。
3、microservice-zipkin-client
負責微服務的呼叫,對外提供 "http://localhost:11009/call/1" 的rest地址,當訪問此地址時,使用feign方式呼叫provider的rest服務地址。得到計算結果後,顯示在介面上。

2.準備工作

三個程式功能非常簡單,接下來我們看看每個程式的具體程式碼和配置。為了方便我們對三個模組開發,我們在父POM檔案中添加了spring-boot和spring-cloud的依賴,避免子模組中需要寫版本號



<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.5.2.RELEASE</version>
</parent>

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>Dalston.RELEASE</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

接下來我們看看三個程式中的相關配置

3.具體實現

3.1 microservice-zipkin-server

首先,我們新增maven依賴配置


    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-server</artifactId>
</dependency>
<dependency>
    <groupId>io.zipkin.java</groupId>
    <artifactId>zipkin-autoconfigure-ui</artifactId>
    <scope>runtime</scope>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
</dependency>

在這裡為了測試方便,我們可以將資料儲存到記憶體中,但是生產環境還是需要將資料持久化中。原生支援了很多產品,例如ES、資料庫等,本例中我們採用將資料儲存到記憶體中的方式來演示。

我們寫一個啟動類ZipkinServer,程式碼非常簡單,如下


package com.yangyang.cloud;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import zipkin.server.EnableZipkinServer;

/**
 * Created by chenshunyang on 2017/5/24.
 */
@EnableZipkinServer
@SpringBootApplication
public class ZipkinServerApplication {
    public static void main(String[] args) {
        SpringApplication.run(ZipkinServerApplication.class,args);
    }
}

接下來我們配置application.ym配置檔案


server:
  port: 11008
spring:
  application:
    name : microservice-zipkin-server

啟動後 無異常輸出,這樣我們的server程式就OK了

3.2 microservice-zipkin-client-backend 與microservice-zipkin-client

這兩個程式,與其他基礎程式碼我們就不多講了(相信學些到這一步的童鞋,都已經對spring cloud建立微服務以上手了),兩個程式在spring-cloud-sleuth相關的配置都是一樣。
首先,我們要在二者的POM檔案中新增依賴,引入zipkin客戶端自動配置相關依賴


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

其次,在配置檔案application中,我們加入zipkin server收集資訊的地址


spring:
  application:
    name: microservice-zipkin-client-backend
  zipkin:
    base-url: http://localhost:11008

這樣我們的兩個微服務就配置好了(注意這裡我們並不會再說明如何寫rest介面和使用feign呼叫rest介面),具體參考程式碼

4 測試

先後啟動我們的三個程式

先啟動microservice-zipkin-server 然後訪問在瀏覽器中訪問UI介面地址http://127.0.0.1:11008,

可以看到如下效果

其中Span Name選項為灰色不可選,說明目前沒有資料,我們檢視資料庫也可以看到沒有任何資料資訊。

接下來我們訪問consumer提供的訪問地址 http://localhost:11009/call/1

重新整理幾次之後,我們再次重新整理我們的zipkin介面,可以看到Span Name已經可以選擇了。

點選Find Traces按鈕,我們可以看到呼叫的鏈路和耗時情況,點選Dependencies,我們可以看到provider和consumer的呼叫圖

OK,我們的簡單實用spring-cloud-sleuth+zipkin的例子就完成了。

5.拓展

在測試的過程中我們會發現,有時候,程式剛剛啟動後,重新整理幾次,並不能看到任何資料,原因就是我們的spring-cloud-sleuth收集資訊是有一定的比率的,預設的取樣率是0.1,配置此值的方式在配置檔案中增加spring.sleuth.sampler.percentage引數配置(如果不配置預設0.1),如果我們調大此值為1,可以看到資訊收集就更及時。但是當這樣調整後,我們會發現我們的rest介面呼叫速度比0.1的情況下慢了很多,即時在0.1的取樣率下,我們多次重新整理consumer的介面,會發現對同一個請求兩次耗時資訊相差非常大,如果取消spring-cloud-sleuth後我們再測試,會發現並沒有這種情況,可以看到這種方式追蹤服務呼叫鏈路會給我們業務程式效能帶來一定的影響。

其實,我們仔細想想也可以總結出這種方式的幾種缺陷
缺陷1:zipkin客戶端向zipkin-server程式傳送資料使用的是http的方式通訊,每次傳送的時候涉及到連線和傳送過程。
缺陷2:當我們的zipkin-server程式關閉或者重啟過程中,因為客戶端收集資訊的傳送採用http的方式會被丟失。

針對以上兩個明顯的缺陷,改進的辦法是
1、通訊採用socket或者其他效率更高的通訊方式。
2、客戶端資料的傳送儘量減少業務執行緒的時間消耗,採用非同步等方式傳送收集資訊。
3、客戶端與zipkin-server之間增加快取類的中介軟體,例如redis、MQ等,在zipkin-server程式掛掉或重啟過程中,客戶端依舊可以正常的傳送自己收集的資訊。

相信採用以上三種方式會很大的提高我們的效率和可靠性。其實spring-cloud以及為我們提供採用MQ或redis等其他的採用socket方式通訊,利用訊息中介軟體或資料庫快取的實現方式。下一次我們再來測試spring-cloud-sleuth-zipkin-stream方式的實現。

6.專案原始碼:

https://git.oschina.net/shunyang/spring-cloud-microservice-study.git

https://github.com/shunyang/spring-cloud-microservice-study.git

7.參考文件:

spring cloud 官方文件:https://github.com/spring-cloud/spring-cloud-sleuth

第三方:https://yq.aliyun.com/articles/78128?utm_campaign=wenzhang&utm_medium=article&utm_source=QQ-qun&201758&utm_content=m_19862

相關推薦

spring-cloud-sleuth+zipkin追蹤服務實現()

1.簡述 最近在學習spring cloud構建微服務,研究追蹤微服務rest服務呼叫鏈路的問題,接觸到zipkin,而spring cloud也提供了spring-cloud-sleuth來方便整合zipkin實現。 我們準備了三個必要的程式來做測試,分別是 1、microservice-zipkin-se

spring-cloud-sleuth+zipkin追蹤服務實現(二)

1. 簡述 在上一節《spring-cloud-sleuth+zipkin追蹤服務實現(一)》中,我們使用microservice-zipkin-server、microservice-zipkin-client、microservice-zipkin-client-backend 三個程式實現了使用http

spring-cloud-sleuth+zipkin追蹤服務實現(四)

1.前言 在上一篇spring-cloud-sleuth+zipkin追蹤服務實現(三)的處理實現後,很多朋友告訴我,在zipkin server的管理頁面無法看到專案依賴關係。 當時也沒有多想,以為是spring cloud zipkin的一個bug,後來發現是自己看文件的疏忽。 文中寫到對於Cassan

spring-cloud-sleuth+zipkin追蹤服務實現(三)

1.前言 在上一篇spring-cloud-sleuth+zipkin追蹤服務實現(二)中我們講述了利用mq的方式傳送資料,儲存在mysql,實際生產過程中呼叫資料量非常的大,mysql儲存並不是很好的選擇,這時我們可以採用elasticsearch進行儲存。 我們還是使用之前上一節中的三個程式做修改,方便大

spring-cloud-sleuth+zipkin追蹤服務

本文簡單介紹瞭如何利用Zipkin對SpringCloud應用進行服務分析在實際的應用場景中,Zipkin可以結合壓力測試工具一起使用,分析系統在大壓力下的可用性和效能。設想這麼一種情況,如果你的微服務數量逐漸增大,服務間的依賴關係越來越複雜,怎麼分析它們之間的呼叫關係及相互

Spring Cloud Sleuth + zipkin 實現服務追蹤

工作 process image -o 唯一id dep 單元 圖片 zipkin 服務追蹤 Spring Cloud Sleuth實現了一種分布式的服務鏈路跟蹤解決方案,通過使用Sleuth可以讓我們快速定位某個服務的問題。 官方文檔地址如下: http://cloud

全鏈路追蹤spring-cloud-sleuth-zipkin

authorize 采樣 quest child 手機號 main rgs lin oot 微服務架構下 多個服務之間相互調用,在解決問題的時候,請求鏈路的追蹤是十分有必要的,鑒於項目中采用的spring cloud架構,所以為了方便使用,便於接入等 項目中采用了sprin

全鏈路spring cloud sleuth+zipkin

arc owa version public kafka 分享 cli self 兩個 http://blog.csdn.net/qq_15138455/article/details/72956232 版權聲明:@入江之鯨 一、About ZipKi

Spring Cloud 應用篇 之 Spring Cloud Sleuth + Zipkin(三)修改資料儲存方式

(一)簡介預設情況下,Zipkin Server 會將跟蹤資訊儲存在記憶體中,每次重啟 Zipkin Server 都會使之前收集的跟蹤資訊丟失,並且當有大量跟蹤資訊時,記憶體儲存也會造成效能瓶頸,所以通常我們都需要將跟蹤資訊儲存到外部元件中,如 Mysql。由於 Sprin

spring-cloud-sleuth+zipkin原始碼探究

1.1. 前言   粗略看了下spring cloud sleuth core原始碼,發現內容真的有點多,它支援了很多型別的鏈

Spring Cloud Alibaba學習筆記(23) - 呼叫鏈監控工具Spring Cloud Sleuth + Zipkin

隨著業務發展,系統拆分導致系統呼叫鏈路愈發複雜一個前端請求可能最終需要呼叫很多次後端服務才能完成,當整個請求陷入效能瓶頸或不可用時,我們是無法得知該請求是由某個或某些後端服務引起的,這時就需要解決如何快讀定位服務故障點,以對症下藥。於是就有了分散式系統呼叫跟蹤的誕生。 Spring Cloud Sleuth

springcloud服務追蹤Zipkinspring cloud Sleuth

參考文章一: 摘要: 本文簡單介紹瞭如何利用Zipkin對SpringCloud應用進行服務分析。在實際的應用場景中,Zipkin可以結合壓力測試工具一起使用,分析系統在大壓力下的可用性和效能。 設想這麼一種情況,如果你的微服務數量逐漸增大,服務間的依賴關係越來越複雜,怎麼分析它們

服務學習筆記--使用Spring Cloud Sleuth配合Zipkin實現服務的跟蹤

在微服務架構中可以使用Zipkin來追蹤服務呼叫鏈路,可以知道各個服務的呼叫依賴關係。在Spring Cloud中,也提供了Spring Cloud Sleuth來方便整合Zipkin實現。 本文使用一個Zipkin Server,使用者微服務,電影微服務來實現

spring cloud 入門系列八:使用spring cloud sleuth整合zipkin進行服務鏈路追蹤

好久沒有寫部落格了,主要是最近有些忙,今天忙裡偷閒來一篇。 =======我是華麗的分割線========== 微服務架構是一種分散式架構,微服務系統按照業務劃分服務單元,一個微服務往往會有很多個服務單元,一個請求往往會有很多個單元參與,一旦請求出現異常,想要去定位問題點真心不容易,因此需要有個東西去跟蹤

Spring Cloud應用進行服務追蹤分析(Zipkinspring cloud Sleuth)

參考文章二:(我參考的這個) 最近在學習spring cloud構建微服務,很多大牛都提供很多入門的例子幫助我們學習,對於我們這種英語不好的碼農來說,效率著實提高不少。這兩天學習到追蹤微服務rest服務呼叫鏈路的問題,接觸到zipkin,而spring cloud也提供了spring-cloud-sleu

業余草 SpringCloud教程 | 第九篇: 服務鏈路追蹤(Spring Cloud Sleuth)(Finchley版本)

描述 -s util ont packaging tdd res [] 新建 這篇文章主要講述服務追蹤組件zipkin,Spring Cloud Sleuth集成了zipkin組件。 一、簡介 Add sleuth to the classpath of a Spr

SpringCloud2.0版本入門 | 服務鏈路追蹤(Spring Cloud Sleuth)簡單入門

本文出自 [ 慌途L ] 最近開始寫部落格,一些問題可能瞭解也不夠透徹,寫一下快速入門並且踩過的坑,希望大家少踩坑。本文簡單介紹一下springcloud的服務鏈路追蹤,不足之處希望大家指出,我改正。不喜勿噴! 這篇文章主要講述服務追蹤元件zipkin,Spr

Spring Cloud Sleuth服務鏈路追蹤(mysql儲存鏈路資料)(Finchley版本)

在Spring Cloud Sleuth服務鏈路追蹤(Finchley版本)中,我們使用Spring Cloud Sleuth和zipkin的整合實現了服務鏈路的追蹤,但是遺憾的是鏈路資料儲存在記憶體中,無法持久化。zipkin的持久化可以結合Elasticsearch,MySQL實現。本節

SpringCloud微服務雲架構構建B2B2C電子商務平臺之-(九)服務鏈路追蹤(Spring Cloud Sleuth)

這篇文章主要講述服務追蹤元件zipkin,Spring Cloud Sleuth集成了zipkin元件。 一、簡介Add sleuth to the classpath of a Spring Boot application (see below for Maven and Gradle examples

史上最簡單的SpringCloud教程 | 第九篇: 服務鏈路追蹤(Spring Cloud Sleuth)(Finchley版本)

這篇文章主要講述服務追蹤元件zipkin,Spring Cloud Sleuth集成了zipkin元件。 一、簡介 Add sleuth to the classpath of a Spring Boot application (see below for Maven