摘要:分布式鏈路追蹤現(xiàn)狀分布式鏈路追蹤的技術(shù)有很多,有開源的也有閉源的。個(gè)推的實(shí)踐個(gè)推的微服務(wù)是基于和進(jìn)行部署的,每個(gè)微服務(wù)對應(yīng)于中的一組。整體的架構(gòu)如下圖所示個(gè)推基于的分布式鏈路追蹤系統(tǒng)的整體架構(gòu)其中,也容器化部署在集群中,簡化了的搭建和部署。
作者:個(gè)推應(yīng)用平臺(tái)基礎(chǔ)架構(gòu)高級(jí)研發(fā)工程師 阿飛
01業(yè)務(wù)背景
隨著微服務(wù)架構(gòu)的流行,系統(tǒng)變得越來越復(fù)雜,單體的系統(tǒng)被拆成很多個(gè)模塊,各個(gè)模塊通過輕量級(jí)的通信協(xié)議進(jìn)行通訊,相互協(xié)作,共同實(shí)現(xiàn)系統(tǒng)功能。
單體架構(gòu)時(shí),一個(gè)請求的調(diào)用鏈路很清晰,一般由負(fù)載均衡器將用戶請求轉(zhuǎn)發(fā)到后端服務(wù),由后端服務(wù)進(jìn)行業(yè)務(wù)處理,需要的數(shù)據(jù)從外部的存儲(chǔ)中獲取,處理完請求后,再經(jīng)由負(fù)載均衡器返回給用戶。
而在微服務(wù)架構(gòu)中,一個(gè)請求往往需要多個(gè)模塊共同協(xié)作處理,不同模塊可能還依賴于不同的外部存儲(chǔ),各個(gè)模塊的實(shí)現(xiàn)技術(shù)還不盡相同,一個(gè)請求是如何在整個(gè)系統(tǒng)不同模塊間進(jìn)行流轉(zhuǎn),整個(gè)調(diào)用鏈上的各個(gè)模塊之間的調(diào)用關(guān)系如何,每個(gè)微服務(wù)處理的時(shí)間長短,處理的結(jié)果是否正確,很難去進(jìn)行追蹤,而這些信息對于整個(gè)系統(tǒng)運(yùn)維、性能分析、故障追蹤都特別有幫助,也正因?yàn)榇?,才有了各種分布式鏈路追蹤的技術(shù)。
02分布式鏈路追蹤現(xiàn)狀
分布式鏈路追蹤的技術(shù)有很多,有開源的也有閉源的。開源的有Jaeger、PinPoint、Zipkin、SkyWalking、CAT等,閉源的有Google Dapper、淘寶的鷹眼Tracing、新浪的Watchman、美團(tuán)的MTrace等。CNCF(Cloud Native Computing Foundation)為了解決業(yè)界分布式追蹤系統(tǒng)跨平臺(tái)兼容性問題,設(shè)計(jì)了trace的標(biāo)準(zhǔn),提出了分布式跟蹤系統(tǒng)產(chǎn)品的統(tǒng)一范式-OpenTracing,Zipkin也部分支持OpenTracing標(biāo)準(zhǔn)。
03選擇Zipkin的原因
在實(shí)踐的過程中,基于以下原因選擇了Zipkin來進(jìn)行鏈路追蹤:
? 開源,社區(qū)活躍
? 支持多種語言,Nodejs,Lua,Java都有開源實(shí)現(xiàn),而我們的服務(wù)主要是這三種語言實(shí)現(xiàn)的
? 提供查詢API,方便二次開發(fā)
04Zipkin的架構(gòu)介紹
Zipkin的整體架構(gòu)如下圖所示:
Zipkin的整體架構(gòu)
(引用自Zipkin官網(wǎng):https://zipkin.io/pages/archi...)
其中:
? Instrumented client和Instrumented server需要集成在分布式系統(tǒng)的具體服務(wù)中,采集跟蹤信息,調(diào)用Transport,把跟蹤信息發(fā)送給Zipkin的Server。
? Transport是Zipkin對外提供的接口,支持HTTP、Kafka、Scribe等通信方式。
? Zipkin即Zipkin server,主要包括四個(gè)模塊:
Collector: 用于接收各個(gè)應(yīng)用服務(wù)傳輸?shù)淖粉櫺畔ⅲ?br>Storage:Zipkin的后端存儲(chǔ),支持In-Memory、MySql、Elasticsearch和Cassandra;
API:提供對外的查詢接口;
UI:提供對外的Web界面。
Http Tracing的時(shí)序圖
(引用自Zipkin官網(wǎng):https://zipkin.io/pages/archi...)
以上是Http Tracing的時(shí)序圖,用戶的請求/foo首先被Trace Instrumentationlan攔截,記錄下Tags,時(shí)間戳,同時(shí)在Header里增加Trace信息,然后再流轉(zhuǎn)到后端服務(wù)進(jìn)行處理,處理完成后,正常響應(yīng),Trace Instrumentationlan攔截響應(yīng),記錄處理延時(shí)后,將Response正常返回給調(diào)用方,同時(shí)異步地將Trace的Span發(fā)送給Zipkin Server。Span中的traceId是在整個(gè)調(diào)用鏈路上唯一的ID,用于唯一標(biāo)識(shí)一條調(diào)用鏈。
05個(gè)推的Zipkin實(shí)踐
個(gè)推的微服務(wù)是基于Kubernetes和Docker進(jìn)行部署的,每個(gè)微服務(wù)對應(yīng)于Kubernetes中的一組Pod。
在整個(gè)微服務(wù)體系中,API網(wǎng)關(guān)是基于Openresty開發(fā)的,主要使用Lua進(jìn)行開發(fā);后端服務(wù)主要使用Node.js和Java進(jìn)行開發(fā)實(shí)現(xiàn)。在對接Zipkin時(shí),不同的微服務(wù)采用不同的方式進(jìn)行實(shí)現(xiàn)。
API網(wǎng)關(guān)主要通過增加網(wǎng)關(guān)插件(主要參考了Kong的Zipkin插件實(shí)現(xiàn))來實(shí)現(xiàn)與Zipkin的對接;Node.js實(shí)現(xiàn)的服務(wù)主要使用了中間件實(shí)現(xiàn)與Zipkin的對接;Java服務(wù)使用了spring-cloud-sleuth來與Zipkin對接。 整體的架構(gòu)如下圖所示:
個(gè)推基于Zipkin的分布式鏈路追蹤系統(tǒng)的整體架構(gòu)
其中,Zipkin也容器化部署在Kubernetes集群中,簡化了Zipkin的搭建和部署。如下圖所示,通過Zipkin可以很方便地追蹤請求的調(diào)用鏈路,整個(gè)調(diào)用鏈上各個(gè)服務(wù)的處理耗時(shí),響應(yīng)狀態(tài),服務(wù)間的調(diào)用關(guān)系都可以方便地在Zipkin中進(jìn)行查詢。Zipkin對于分析整個(gè)系統(tǒng)的性能瓶頸,定位故障也都有很大的幫助。
Zipkin的Web界面
06總結(jié)
Zipkin作為一個(gè)分布式鏈路追蹤系統(tǒng),有著應(yīng)用侵入較小、社區(qū)活躍度較高、支持多種語言等優(yōu)勢,一般基于開源的實(shí)現(xiàn)稍做修改就可以實(shí)現(xiàn)與Zipkin的對接。因此個(gè)推在微服務(wù)架構(gòu)中也引入了Zipkin,用Zipkin來追蹤微服務(wù)的調(diào)用關(guān)系,對微服務(wù)進(jìn)行性能分析和故障診斷。未來,個(gè)推會(huì)基于Zipkin做二次開發(fā),提供更為友好的界面。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/104272.html
摘要:一方面,網(wǎng)關(guān)是個(gè)推微服務(wù)體系對外的唯一入口另一方面,網(wǎng)關(guān)中實(shí)現(xiàn)了很多后端服務(wù)的共性需求,避免了重復(fù)建設(shè)。個(gè)推微服務(wù)網(wǎng)關(guān)的設(shè)計(jì)與實(shí)現(xiàn)個(gè)推微服務(wù)主要是基于和進(jìn)行實(shí)踐的。下圖是個(gè)推微服務(wù)體系的架構(gòu)圖。 作者:個(gè)推應(yīng)用平臺(tái)基礎(chǔ)架構(gòu)高級(jí)研發(fā)工程師 阿飛 在微服務(wù)架構(gòu)中,不同的微服務(wù)可以有不同的網(wǎng)絡(luò)地址,各個(gè)微服務(wù)之間通過互相調(diào)用完成用戶請求,客戶端可能通過調(diào)用N個(gè)微服務(wù)的接口完成一個(gè)用戶請求。因...
摘要:個(gè)推針對服務(wù)場景,基于和搭建了微服務(wù)框架,提高了開發(fā)效率。三容器化在微服務(wù)落地實(shí)踐時(shí)我們選擇了,下面將詳細(xì)介紹個(gè)推基于的實(shí)踐。 2016年伊始Docker無比興盛,如今Kubernetes萬人矚目。在這個(gè)無比需要?jiǎng)?chuàng)新與速度的時(shí)代,由容器、微服務(wù)、DevOps構(gòu)成的云原生席卷整個(gè)IT界。個(gè)推針對Web服務(wù)場景,基于OpenResty和Node.js搭建了微服務(wù)框架,提高了開發(fā)效率。在微服...
摘要:個(gè)推針對服務(wù)場景,基于和搭建了微服務(wù)框架,提高了開發(fā)效率。三容器化在微服務(wù)落地實(shí)踐時(shí)我們選擇了,下面將詳細(xì)介紹個(gè)推基于的實(shí)踐。 2016年伊始Docker無比興盛,如今Kubernetes萬人矚目。在這個(gè)無比需要?jiǎng)?chuàng)新與速度的時(shí)代,由容器、微服務(wù)、DevOps構(gòu)成的云原生席卷整個(gè)IT界。個(gè)推針對Web服務(wù)場景,基于OpenResty和Node.js搭建了微服務(wù)框架,提高了開發(fā)效率。在微服...
摘要:一個(gè)客戶端請求從發(fā)出到被響應(yīng)經(jīng)歷了哪些組件哪些微服務(wù)請求總時(shí)長每個(gè)組件所花時(shí)長等信息我們有必要了解和收集,以幫助我們定位性能瓶頸進(jìn)行性能調(diào)優(yōu),因此監(jiān)控整個(gè)微服務(wù)架構(gòu)的調(diào)用鏈?zhǔn)钟斜匾疚膶㈥U述如何使用搭建微服務(wù)調(diào)用鏈追蹤中心。 showImg(https://segmentfault.com/img/remote/1460000014553707); 概述 一個(gè)完整的微服務(wù)系統(tǒng)包含...
摘要:服務(wù)提供者提供一個(gè)接口,服務(wù)消費(fèi)者通過消費(fèi)服務(wù)。服務(wù)提供者服務(wù)提供者,對外提供一個(gè),并向服務(wù)注冊中心注冊,這部分內(nèi)容,不再講述,見源碼。 微服務(wù)架構(gòu)是一個(gè)分布式架構(gòu),微服務(wù)系統(tǒng)按業(yè)務(wù)劃分服務(wù)單元,一個(gè)微服務(wù)系統(tǒng)往往有很多個(gè)服務(wù)單元。由于服務(wù)單元數(shù)量眾多,業(yè)務(wù)的復(fù)雜性較高,如果出現(xiàn)了錯(cuò)誤和異常,很難去定位。主要體現(xiàn)在一個(gè)請求可能需要調(diào)用很多個(gè)服務(wù),而內(nèi)部服務(wù)的調(diào)用復(fù)雜性決定了問題難以定位...
閱讀 2916·2021-11-24 09:39
閱讀 1174·2021-11-02 14:38
閱讀 4169·2021-09-10 11:26
閱讀 2759·2021-08-25 09:40
閱讀 2318·2019-08-30 15:54
閱讀 488·2019-08-30 10:56
閱讀 2756·2019-08-26 12:14
閱讀 3226·2019-08-26 12:13