首頁技術(shù)文章正文

APM系統(tǒng)是什么?有什么用處?

更新時(shí)間:2020-07-24 來源:黑馬程序員 瀏覽量:

  自SpringCloud問世以來,微服務(wù)以席卷之勢(shì)風(fēng)靡全球,企業(yè)架構(gòu)都在從傳統(tǒng)SOA向微服務(wù)轉(zhuǎn)型。然而微服務(wù)這把雙刃劍在帶來各種優(yōu)勢(shì)的同時(shí),也給運(yùn)維、性能監(jiān)控、錯(cuò)誤的排查帶來的極大的困難。

  在大型項(xiàng)目中,服務(wù)架構(gòu)會(huì)包含數(shù)十乃至上百個(gè)服務(wù)節(jié)點(diǎn)。往往一次請(qǐng)求會(huì)設(shè)計(jì)到多個(gè)微服務(wù),想要排查一次請(qǐng)求鏈路中經(jīng)過了哪些節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)的執(zhí)行情況如何,就稱為了亟待解決的問題。于是分布式系統(tǒng)的APM管理系統(tǒng)應(yīng)運(yùn)而生。

  什么是APM系統(tǒng)?

  APM系統(tǒng)可以幫助理解系統(tǒng)行為、用于分析性能問題的工具,以便發(fā)生故障的時(shí)候,能夠快速定位和解決問題,這就是APM系統(tǒng),全稱是(Application Performance Monitor)。

  谷歌公開的論文提到的 Google Dapper可以說是最早的APM系統(tǒng)了,給google的開發(fā)者和運(yùn)維團(tuán)隊(duì)幫了大忙,所以谷歌公開論文分享了Dapper。

  而后,很多的技術(shù)公司基于這篇論文的原理,設(shè)計(jì)開發(fā)了很多出色的APM框架,例如Pinpoint、SkyWalking等。

  而SpringCloud官網(wǎng)也集成了一套這樣的系統(tǒng):Spring Cloud Sleuth,結(jié)合Zipkin。

  APM的基本原理

  目前大部分的APM系統(tǒng)都是基于Google的Dapper原理實(shí)現(xiàn),我們簡單來看看Dapper中的概念和實(shí)現(xiàn)原理。

  先來看一次請(qǐng)求調(diào)用示例:

  1、服務(wù)集群中包括:前端(A),兩個(gè)中間層(B和C),以及兩個(gè)后端(D和E)

  2、當(dāng)用戶發(fā)起一個(gè)請(qǐng)求時(shí),首先到達(dá)前端A服務(wù),然后A分別對(duì)B服務(wù)和C服務(wù)進(jìn)行RPC調(diào)用;

  3、B服務(wù)處理完給A做出響應(yīng),但是C服務(wù)還需要和后端的D服務(wù)和E服務(wù)交互之后再返還給A服務(wù),最后由A服務(wù)來響應(yīng)用戶的請(qǐng)求;

APM系統(tǒng)01

  
        如何才能實(shí)現(xiàn)跟蹤呢?

  Google的Dapper設(shè)計(jì)了下面的幾個(gè)概念用來記錄請(qǐng)求鏈路:

  ·Span:請(qǐng)求中的基本工作單元,每一次鏈路調(diào)用(RPC、Rest、數(shù)據(jù)庫調(diào)用)都會(huì)創(chuàng)建一個(gè)Span。大概結(jié)構(gòu)如下:

type Span struct {
    TraceID    int64 // 用于標(biāo)示一次完整的請(qǐng)求id
    Name       string // 單元名稱
    ID         int64 // 當(dāng)前這次調(diào)用span_id
    ParentID   int64 // 上層服務(wù)的span_id,最上層服務(wù)parent_id為null,代表根服務(wù)
    Annotation []Annotation // 注釋,用于記錄調(diào)用中的詳細(xì)信息,例如時(shí)間
}

  ·Trace:一次完整的調(diào)用鏈路,包含多個(gè)Span的樹狀結(jié)構(gòu),具有唯一的TraceID

  一次請(qǐng)求的每個(gè)鏈路,通過spanId、parentId就能串聯(lián)起來:

APM系統(tǒng)02

  當(dāng)然,從請(qǐng)求到服務(wù)器開始,服務(wù)器返回response結(jié)束,每個(gè)span存在相同的唯一標(biāo)識(shí)trace_id。

  APM的篩選標(biāo)準(zhǔn)

  目前主流的APM框架都會(huì)包含下列幾個(gè)組件來完成鏈路信息的收集和展示:

  ·探針(Agent):負(fù)責(zé)在客戶端程序運(yùn)行時(shí)搜索服務(wù)調(diào)用鏈路信息,發(fā)送給收集器

  ·收集器(Collector):負(fù)責(zé)將數(shù)據(jù)格式化,保存到存儲(chǔ)器

  ·存儲(chǔ)器(Storage):保存數(shù)據(jù)

  ·UI界面(WebUI):統(tǒng)計(jì)并展示收集到的信息

  因此,要篩選一款合格的APM框架,就是對(duì)比各個(gè)組件的使用差異,主要對(duì)比項(xiàng):

  ·探針的性能

  主要是agent對(duì)服務(wù)的吞吐量、CPU和內(nèi)存的影響。如果探針在收集微服務(wù)運(yùn)行數(shù)據(jù)時(shí),對(duì)微服務(wù)的運(yùn)行產(chǎn)生了比較大的性能影響,相信沒什么人愿意使用。

  ·collector的可擴(kuò)展性

  能夠水平擴(kuò)展以便支持大規(guī)模服務(wù)器集群,保證收集器的高可用特性。

  ·全面的調(diào)用鏈路數(shù)據(jù)分析

  數(shù)據(jù)的分析要快 ,分析的維度盡可能多。跟蹤系統(tǒng)能提供足夠快的信息反饋,就可以對(duì)生產(chǎn)環(huán)境下的異常狀況做出快速反應(yīng),最好提供代碼級(jí)別的可見性以便輕松定位失敗點(diǎn)和瓶頸。

  ·對(duì)于開發(fā)透明,容易開關(guān)

  即也作為業(yè)務(wù)組件,應(yīng)當(dāng)盡可能少入侵或者無入侵其他業(yè)務(wù)系統(tǒng),對(duì)于使用方透明,減少開發(fā)人員的負(fù)擔(dān)。

  ·完整的調(diào)用鏈應(yīng)用拓?fù)?/p>

  自動(dòng)檢測(cè)應(yīng)用拓?fù)洌瑤椭愀闱宄?yīng)用的架構(gòu)

  接下來,我們就對(duì)比下目前比較常見的三種APM框架的各項(xiàng)指標(biāo),分別是:

  ·Zipkin:由Twitter公司開源,開放源代碼分布式的跟蹤系統(tǒng),用于收集服務(wù)的定時(shí)數(shù)據(jù),以解決微服務(wù)架構(gòu)中的延遲問題,包括:數(shù)據(jù)的收集、存儲(chǔ)、查找和展現(xiàn)。

  ·Pinpoint:一款對(duì)Java編寫的大規(guī)模分布式系統(tǒng)的APM工具,由韓國人開源的分布式跟蹤組件。

  ·Skywalking:國產(chǎn)的優(yōu)秀APM組件,是一個(gè)對(duì)JAVA分布式應(yīng)用程序集群的業(yè)務(wù)運(yùn)行情況進(jìn)行追蹤、告警和分析的系統(tǒng)?,F(xiàn)在是Apache的頂級(jí)項(xiàng)目之一。

       三者對(duì)比如下:

APM系統(tǒng)03

  
       可見,zipkin的探針性能、開發(fā)透明性、數(shù)據(jù)分析能力都不占優(yōu),實(shí)在是下下之選。

  而pinpoint在數(shù)據(jù)分析能力、開發(fā)透明性上有較大的優(yōu)勢(shì),不過Pinpoint的部署相對(duì)比較復(fù)雜,需要的硬件資源較高。

  Skywalking的探針性能和開發(fā)透明性上具有較大優(yōu)勢(shì),數(shù)據(jù)分析能力上也還不錯(cuò),重要的是其部署比較方便靈活,比起Pinpoint更適合中小型企業(yè)使用。

  因此,本文會(huì)帶著大家學(xué)習(xí)Skywalking的使用。


猜你喜歡:

ArrayList入門教程 

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!