Zipkin
共 2170字,需瀏覽 5分鐘
·
2020-11-09 02:49
商品詳情
商品亮點
- 數(shù)據(jù)追蹤系統(tǒng)
商品說明
| 版本: V1.0 | 交付方式: 鏡像 |
| 適用于: Linux | 上架日期: 2020-07-14 |
1.?簡介
Zipkin,是一款開源的分布式實時數(shù)據(jù)追蹤系統(tǒng)。其主要功能是聚集來自各個異構(gòu)系統(tǒng)的實時監(jiān)控數(shù)據(jù)。
2.?架構(gòu)
ZipKin可以分為兩部分,一部分是zipkin?server,用來作為數(shù)據(jù)的采集存儲、數(shù)據(jù)分析與展示;zipkin?client是zipkin基于不同的語言及框架封裝的一些列客戶端工具,這些工具完成了追蹤數(shù)據(jù)的生成與上報功能。
Zipkin?Server主要包括四個模塊:
(1)Collector?接收或收集各應(yīng)用傳輸?shù)臄?shù)據(jù)
(2)Storage?存儲接受或收集過來的數(shù)據(jù),當前支持Memory,MySQL,Cassandra,ElasticSearch等,默認存儲在內(nèi)存中。
(3)API(Query)?負責查詢Storage中存儲的數(shù)據(jù),提供簡單的JSON?API獲取數(shù)據(jù),主要提供給web?UI使用
(4)Web?提供簡單的web界面
Instrumented?client和server是分別使用了ZipKin?Client的服務(wù),Zipkin?Client會根據(jù)配置將追蹤數(shù)據(jù)發(fā)送到Zipkin??Server中進行數(shù)據(jù)存儲、分析和展示。
3.工作過程
當用戶發(fā)起一次調(diào)用時,Zipkin?的客戶端會在入口處為整條調(diào)用鏈路生成一個全局唯一的?trace?id,并為這條鏈路中的每一次分布式調(diào)用生成一個?span?id。span?與?span?之間可以有父子嵌套關(guān)系,代表分布式調(diào)用中的上下游關(guān)系。span?和?span?之間可以是兄弟關(guān)系,代表當前調(diào)用下的兩次子調(diào)用。一個?trace?由一組?span?組成,可以看成是由?trace?為根節(jié)點,span?為若干個子節(jié)點的一棵樹。
?Zipkin?會將?trace?相關(guān)的信息在調(diào)用鏈路上傳遞,并在每個調(diào)用邊界結(jié)束時異步的把當前調(diào)用的耗時信息上報給?Zipkin?Server。Zipkin?Server?在收到?trace?信息后,將其存儲起來。隨后?Zipkin?的?Web?UI?會通過?API?訪問的方式從存儲中將?trace?信息提取出來分析并展示。
4.核心數(shù)據(jù)結(jié)構(gòu)
????????????traceId:全局跟蹤ID,用它來標記一次完整服務(wù)調(diào)用,所以和一次服務(wù)調(diào)用相關(guān)的span中的traceId都是相同的,Zipkin將具有相同traceId的span組裝成跟蹤樹來直觀的將調(diào)用鏈路圖展現(xiàn)在我們面前。
????????????id:span的id,理論上來說,span的id只要做到一個traceId下唯一就可以
????????????parentId:父span的id,調(diào)用有層級關(guān)系,所以span作為調(diào)用節(jié)點的存儲結(jié)構(gòu),也有層級關(guān)系,就像圖3所示,跟蹤鏈是采用跟蹤樹的形式來展現(xiàn)的,樹的根節(jié)點就是調(diào)用調(diào)用的頂點,從開發(fā)者的角度來說,頂級span是從接入了Zipkin的應(yīng)用中最先接觸到服務(wù)調(diào)用的應(yīng)用中采集的。所以,頂級span是沒有parentId字段的
????????????name:span的名稱,主要用于在界面上展示,一般是接口方法名,name的作用是讓人知道它是哪里采集的span,不然某個span耗時高我都不知道是哪個服務(wù)節(jié)點耗時高
????????????timestamp:span創(chuàng)建時的時間戳,用來記錄采集的時刻。
????????????duration:持續(xù)時間,即span的創(chuàng)建到span完成最終的采集所經(jīng)歷的時間,除去span自己邏輯處理的時間,該時間段可以理解成對于該跟蹤埋點來說服務(wù)調(diào)用的總耗時
????????????annotations:基本標注列表,一個標注可以理解成span生命周期中重要時刻的數(shù)據(jù)快照,比如一個標注中一般包含發(fā)生時刻(timestamp)、事件類型(value)、端點(endpoint)等信息
????????????????事件類型
????????????????????????cs:客戶端/消費者發(fā)起請求
????????????????????????cr:客戶端/消費者接收到應(yīng)答
????????????????????????sr:服務(wù)端/生產(chǎn)者接收到請求
????????????????????????ss:服務(wù)端/生產(chǎn)者發(fā)送應(yīng)答
????????????????????ps:這四種事件類型的統(tǒng)計都應(yīng)該是Zipkin提供客戶端來做的,因為這些事件和業(yè)務(wù)無關(guān),這也是為什么跟蹤數(shù)據(jù)的采集適合放到中間件或者公共庫來做的原因。
????????????binaryAnnotations:業(yè)務(wù)標注列表,如果某些跟蹤埋點需要帶上部分業(yè)務(wù)數(shù)據(jù)(比如url地址、返回碼和異常信息等),可以將需要的數(shù)據(jù)以鍵值對的形式放入到這個字段中。
5.優(yōu)點
擴展性:使用http和json這種輕量級協(xié)議,比起使用探針和Thrift傳輸協(xié)議。更易于
擴展和集成第三方接口。
兼容性:對spring?cloud的支持更好。社區(qū)活躍度高,插件豐富。
性能:支持自定義采樣策略。系統(tǒng)設(shè)計對性能優(yōu)化的更好。
Zipkin,是一款開源的分布式實時數(shù)據(jù)追蹤系統(tǒng)。其主要功能是聚集來自各個異構(gòu)系統(tǒng)的實時監(jiān)控數(shù)據(jù)。
2.?架構(gòu)
ZipKin可以分為兩部分,一部分是zipkin?server,用來作為數(shù)據(jù)的采集存儲、數(shù)據(jù)分析與展示;zipkin?client是zipkin基于不同的語言及框架封裝的一些列客戶端工具,這些工具完成了追蹤數(shù)據(jù)的生成與上報功能。
Zipkin?Server主要包括四個模塊:
(1)Collector?接收或收集各應(yīng)用傳輸?shù)臄?shù)據(jù)
(2)Storage?存儲接受或收集過來的數(shù)據(jù),當前支持Memory,MySQL,Cassandra,ElasticSearch等,默認存儲在內(nèi)存中。
(3)API(Query)?負責查詢Storage中存儲的數(shù)據(jù),提供簡單的JSON?API獲取數(shù)據(jù),主要提供給web?UI使用
(4)Web?提供簡單的web界面
Instrumented?client和server是分別使用了ZipKin?Client的服務(wù),Zipkin?Client會根據(jù)配置將追蹤數(shù)據(jù)發(fā)送到Zipkin??Server中進行數(shù)據(jù)存儲、分析和展示。
3.工作過程
當用戶發(fā)起一次調(diào)用時,Zipkin?的客戶端會在入口處為整條調(diào)用鏈路生成一個全局唯一的?trace?id,并為這條鏈路中的每一次分布式調(diào)用生成一個?span?id。span?與?span?之間可以有父子嵌套關(guān)系,代表分布式調(diào)用中的上下游關(guān)系。span?和?span?之間可以是兄弟關(guān)系,代表當前調(diào)用下的兩次子調(diào)用。一個?trace?由一組?span?組成,可以看成是由?trace?為根節(jié)點,span?為若干個子節(jié)點的一棵樹。
?Zipkin?會將?trace?相關(guān)的信息在調(diào)用鏈路上傳遞,并在每個調(diào)用邊界結(jié)束時異步的把當前調(diào)用的耗時信息上報給?Zipkin?Server。Zipkin?Server?在收到?trace?信息后,將其存儲起來。隨后?Zipkin?的?Web?UI?會通過?API?訪問的方式從存儲中將?trace?信息提取出來分析并展示。
4.核心數(shù)據(jù)結(jié)構(gòu)
????????????traceId:全局跟蹤ID,用它來標記一次完整服務(wù)調(diào)用,所以和一次服務(wù)調(diào)用相關(guān)的span中的traceId都是相同的,Zipkin將具有相同traceId的span組裝成跟蹤樹來直觀的將調(diào)用鏈路圖展現(xiàn)在我們面前。
????????????id:span的id,理論上來說,span的id只要做到一個traceId下唯一就可以
????????????parentId:父span的id,調(diào)用有層級關(guān)系,所以span作為調(diào)用節(jié)點的存儲結(jié)構(gòu),也有層級關(guān)系,就像圖3所示,跟蹤鏈是采用跟蹤樹的形式來展現(xiàn)的,樹的根節(jié)點就是調(diào)用調(diào)用的頂點,從開發(fā)者的角度來說,頂級span是從接入了Zipkin的應(yīng)用中最先接觸到服務(wù)調(diào)用的應(yīng)用中采集的。所以,頂級span是沒有parentId字段的
????????????name:span的名稱,主要用于在界面上展示,一般是接口方法名,name的作用是讓人知道它是哪里采集的span,不然某個span耗時高我都不知道是哪個服務(wù)節(jié)點耗時高
????????????timestamp:span創(chuàng)建時的時間戳,用來記錄采集的時刻。
????????????duration:持續(xù)時間,即span的創(chuàng)建到span完成最終的采集所經(jīng)歷的時間,除去span自己邏輯處理的時間,該時間段可以理解成對于該跟蹤埋點來說服務(wù)調(diào)用的總耗時
????????????annotations:基本標注列表,一個標注可以理解成span生命周期中重要時刻的數(shù)據(jù)快照,比如一個標注中一般包含發(fā)生時刻(timestamp)、事件類型(value)、端點(endpoint)等信息
????????????????事件類型
????????????????????????cs:客戶端/消費者發(fā)起請求
????????????????????????cr:客戶端/消費者接收到應(yīng)答
????????????????????????sr:服務(wù)端/生產(chǎn)者接收到請求
????????????????????????ss:服務(wù)端/生產(chǎn)者發(fā)送應(yīng)答
????????????????????ps:這四種事件類型的統(tǒng)計都應(yīng)該是Zipkin提供客戶端來做的,因為這些事件和業(yè)務(wù)無關(guān),這也是為什么跟蹤數(shù)據(jù)的采集適合放到中間件或者公共庫來做的原因。
????????????binaryAnnotations:業(yè)務(wù)標注列表,如果某些跟蹤埋點需要帶上部分業(yè)務(wù)數(shù)據(jù)(比如url地址、返回碼和異常信息等),可以將需要的數(shù)據(jù)以鍵值對的形式放入到這個字段中。
5.優(yōu)點
擴展性:使用http和json這種輕量級協(xié)議,比起使用探針和Thrift傳輸協(xié)議。更易于
擴展和集成第三方接口。
兼容性:對spring?cloud的支持更好。社區(qū)活躍度高,插件豐富。
性能:支持自定義采樣策略。系統(tǒng)設(shè)計對性能優(yōu)化的更好。
用戶案例
暫無,請等待更新
評論
圖片
表情
