隨着業務發展,系統拆分導致系統調用鏈路愈發復雜一個前端請求可能最終需要調用很多次后端服務才能完成,當整個請求變慢或不可用時,是無法得知該請求是由某個或某些后端服務引起的,這時就需要解決如何快讀定位服務故障點,以對症下葯。於是就有了分布式系統調用跟蹤的誕生。現今業界分布式服務跟蹤的理論基礎主要來自於 Google 的一篇論文《Dapper, a Large-Scale Distributed Systems Tracing Infrastructure》,使用最為廣泛的開源實現是 Twitter 的 Zipkin。
Zipkin是一個開放源代碼分布式的跟蹤系統,它提供了在分布式環境下發送、接收、存儲和可視化跟蹤的機制。這使我們能夠對服務之間的活動進行關聯,並更清楚地了解我們服務中發生的情況。Zipkin由Twitter公司開源,致力於收集服務的定時數據,以解決微服務架構中的延遲問題,包括數據的收集、存儲、查找和展現。每個服務向zipkin報告計時數據,zipkin會根據調用關系通過Zipkin UI生成依賴關系圖,顯示了多少跟蹤請求通過每個服務,該系統讓開發者可通過一個 Web 前端輕松的收集和分析數據,例如用戶每次請求服務的處理時間等,可方便的監測系統中存在的瓶頸。Zipkin提供了可插拔數據存儲方式:In-Memory、MySql、Cassandra以及Elasticsearch。接下來的測試為方便直接采用In-Memory方式進行存儲,生產推薦Elasticsearch。

今天先搭建Zipkin-server
1、 新建項目sc-zipkin-server,對應的pom.xml文件如下
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>spring-cloud</groupId> <artifactId>sc-zipkin-server</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>sc-zipkin-server</name> <url>http://maven.apache.org</url> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.4.RELEASE</version> </parent> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>Finchley.RELEASE</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-server</artifactId> <version>2.11.8</version> </dependency> <dependency> <groupId>io.zipkin.java</groupId> <artifactId>zipkin-autoconfigure-ui</artifactId> <version>2.11.8</version> </dependency> </dependencies> </project>
2、 新建啟動文件
package sc.zipkin.server; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; import zipkin2.server.internal.EnableZipkinServer; @SpringBootApplication @EnableEurekaClient @EnableZipkinServer public class ZipkinApplication { public static void main(String[] args) { SpringApplication.run(ZipkinApplication.class, args); } }
備注:存在zipkin.server.EnableZipkinServer和zipkin2.server.internal.EnableZipkinServer兩個EnableZipkinServer注解,其中zipkin.server.EnableZipkinServer已經被標志為過期,我們這里使用zipkin2.server.internal.EnableZipkinServer
3、 新建配置文件application.yml
eureka: client: serviceUrl: defaultZone: http://localhost:5001/eureka/ server: port: 9000 spring: application: name: sc-zipkin-server
4、 分別先啟動注冊中心,再啟動Zipkin-server;下圖是Zipkin-server啟動成功日志

5、 驗證Zipkin是否啟動成功
訪問:http://127.0.0.1:9000/zipkin/

這篇先到這里,下篇講解為微服務引入和配置Zipkin服務。
