所謂應(yīng)用導(dǎo)圖,就是分布式應(yīng)用內(nèi)部組件的拓?fù)鋱D,該拓?fù)鋱D包含了組件連接成的網(wǎng)絡(luò)和節(jié)點(diǎn)間的信息交互。AppDynamics、OpenTracing以及Netsil等工具內(nèi)部都使用了多種不同的應(yīng)用導(dǎo)圖繪制方法,近期有文章針對這些方法進(jìn)行了綜述。
可以把應(yīng)用導(dǎo)圖看做一個圖,組件對應(yīng)圖的節(jié)點(diǎn),而組件間的交互對應(yīng)圖的邊。這里說的組件,可以單指進(jìn)程(同一機(jī)器內(nèi)部)以及計(jì)算實(shí)例,或者二者的組合。如果是前者,進(jìn)程間通信(IPC)就是圖的邊,而這種通信又是架構(gòu)在后者構(gòu)成的網(wǎng)絡(luò)之上。應(yīng)用導(dǎo)圖有很多重要特征,例如執(zhí)行實(shí)例分組、提供應(yīng)用級別的詳細(xì)信息和錯誤率等關(guān)鍵度量指標(biāo)的可視性等。
應(yīng)用導(dǎo)圖之所以重要,主要是因?yàn)閷?nèi)部組件的觀測、獲取組件的依賴信息等,都離不開應(yīng)用導(dǎo)圖。應(yīng)用導(dǎo)圖可以快速定位問題根因,加快甄別監(jiān)控和告警中的關(guān)鍵路徑,同時,在數(shù)據(jù)驅(qū)動能力規(guī)劃和潛在的安全問題方面,應(yīng)用導(dǎo)圖也可以發(fā)揮作用。
上述的文章總結(jié)了具體實(shí)踐中導(dǎo)圖的兩種常用制作方法,即靜態(tài)方法和動態(tài)方法,并詳述了動態(tài)方法。通過追蹤各種組件間的請求路徑,導(dǎo)圖生成軟件可以繪制出分布式應(yīng)用的應(yīng)用導(dǎo)圖。動態(tài)跟蹤技術(shù)包含了端到端跟蹤方式和個體跟蹤方式。
應(yīng)用性能管理(APM)工具和代碼儀表盤SDK等工具都屬于端到端(E2E)跟蹤軟件,對這類工具來說,要么需要提供本地軟件代理,要么能夠直接修改遠(yuǎn)程應(yīng)用源碼,二者必選其一。AppDynamic、Dynatrace以及New Relic通過對代碼做profiling和跟蹤事務(wù)處理路徑來創(chuàng)建導(dǎo)圖。對APM工具來說,只要有新技術(shù)棧出現(xiàn),就需要對其增加支持,這對新技術(shù)棧的廣泛傳播帶來了較大的挑戰(zhàn)。OpenTracing、Datadog APM以及AWS X-Ray這三個工具在發(fā)送請求時,會把唯一ID和元數(shù)據(jù)夾裹到請求消息的頭部,來搜集組件間的相關(guān)性,以協(xié)助完成導(dǎo)圖的構(gòu)建。
端到端跟蹤方式雖然可以跟蹤到請求的精準(zhǔn)路徑,但代價巨大,因?yàn)樽粉欉^程中會產(chǎn)生海量的數(shù)據(jù),入侵威脅也會在路徑集成時被引入,因?yàn)槿肭植粫绊懙叫阅?,所以這種入侵也不易被察覺。但是像Zipkin等工具已經(jīng)專注于分析性能的微小波動了。
個體追蹤(也指Ingress和Egress)有兩類數(shù)據(jù)源,即日志文件跟蹤和系統(tǒng)級跟蹤,這兩類數(shù)據(jù)源相比動態(tài)方法中的技術(shù)棧來說波動較小,較為穩(wěn)定。由于工作在網(wǎng)絡(luò)層,個體跟蹤技術(shù)可以把在網(wǎng)絡(luò)上通信的組件一一進(jìn)行繪制,也可以處理那些通過E2E方式不能追蹤到的組件。但是,這種方法也有弊端,那就是由于其內(nèi)在的低層次特征,在請求的生命周期內(nèi)產(chǎn)生的特定數(shù)據(jù)包的上下文對于這種追蹤方式來說并不明顯,而且獲取上下文的復(fù)雜性對于不同的應(yīng)用軟件來說不一樣。所以這種方法對經(jīng)過加密的調(diào)用請求無能為力,同時,為了找到數(shù)據(jù)和上層業(yè)務(wù)內(nèi)部事務(wù)執(zhí)行過程之間的相關(guān)性,引入深度的包檢測機(jī)制是非常必要的。
查看英文原文:A Comparison of Mapping Approaches for Distributed Cloud Applications