摘要:本文針對全鏈路業(yè)務(wù)監(jiān)測平臺(tái)——Message-Box-Tracing進(jìn)行總體設(shè)計(jì)和開發(fā),并提出監(jiān)測和檢測微型博客的分散服務(wù)系統(tǒng)。通過開發(fā)者、測試者、運(yùn)營者三方的協(xié)作,對分布式微服務(wù)全鏈路實(shí)時(shí)監(jiān)控系統(tǒng)進(jìn)行聯(lián)合檢測,最大限度地降低因發(fā)現(xiàn)錯(cuò)誤帶來的人力物力、時(shí)間與能量的耗費(fèi),在此基礎(chǔ)上,根據(jù)軟件發(fā)展的有關(guān)原理,從工程角度對系統(tǒng)的作用和組成進(jìn)行說明,并對如何實(shí)現(xiàn)此系統(tǒng)進(jìn)行論述。
關(guān)鍵詞:分布式;全鏈路;實(shí)時(shí)監(jiān)控;微服務(wù)
一、引言
目前所有網(wǎng)絡(luò)公司均有獨(dú)立的全鏈路監(jiān)測技術(shù),谷歌在2005年就發(fā)布全鏈路監(jiān)測技術(shù),并完成了全鏈路監(jiān)測系統(tǒng)原型。此后,各網(wǎng)絡(luò)企業(yè)紛紛借鑒谷歌對全鏈路監(jiān)測的開放源碼理念和開發(fā)原型,逐漸向企業(yè)系統(tǒng)開展全鏈路的業(yè)務(wù)拓展。淘寶的“雙十一”堪稱網(wǎng)絡(luò)并發(fā)奇跡,全鏈路監(jiān)測是該平臺(tái)得以適時(shí)保障、為企業(yè)創(chuàng)造豐厚利潤的重要保障。騰訊、百度等企業(yè)也通過自身全方位的監(jiān)測手段,始終確保體系的平穩(wěn)、秩序以及使用者的順暢使用。
二、需求分析
(一)功能性需求
1.客戶端探針需求分析
客戶端探測系統(tǒng)是對各部門商業(yè)系統(tǒng)起到重要的功能,它的功能是生成各種不同商業(yè)系統(tǒng)之間的數(shù)據(jù)流鏈路,在服務(wù)發(fā)生行動(dòng)時(shí),可以通過嵌入的方式生成相應(yīng)的鏈接數(shù)據(jù),并對其進(jìn)行分析。
(1)在調(diào)用鏈路的上行,要求信號信道截取程序?qū)υ瓉淼恼埱筮M(jìn)行攔截。
(2)請求信道篩選器首先要確定該請求的種類,根據(jù)要求進(jìn)行響應(yīng),組合鏈接索引[1]。
(3)接收的信息通道將會(huì)產(chǎn)生一個(gè)新的線程進(jìn)行監(jiān)聽,如果被要求接收的服務(wù)過程中出現(xiàn)不正常的行為,或者發(fā)出不正常的舉動(dòng),則會(huì)被偵聽到,并做出相應(yīng)的回應(yīng)。
(4)一個(gè)應(yīng)答信道截取程序?qū)⒃阪溄拥南掠谓孬@最初的應(yīng)答。
(5)所述應(yīng)答通道濾波器在收到所述應(yīng)答后,將找到所述鏈接結(jié)構(gòu)的所述請求的發(fā)送時(shí)間。
在全鏈路用戶探測系統(tǒng)中,通過對用戶探測系統(tǒng)的使用實(shí)例進(jìn)行研究,可以了解各層次用戶需要滿足的要求。基于數(shù)據(jù)流程圖進(jìn)行分析,能夠判斷系統(tǒng)功能,該過程中,信號偵聽器將截取來自上行業(yè)務(wù)的最初要求,并且產(chǎn)生一個(gè)要求定單,將這個(gè)定單傳送到信道濾波器[2]。
首先,通過獲取用戶的指令,建立一個(gè)分布式跟蹤ID,以確保其在網(wǎng)絡(luò)中的獨(dú)特性。
其次,將用戶的請求數(shù)量、業(yè)務(wù)數(shù)據(jù)以及索引結(jié)構(gòu)跟蹤ID相融合,形成一份索引指令,并保留下來,同時(shí)生成一個(gè)監(jiān)聽程序,用于監(jiān)視業(yè)務(wù)動(dòng)向,如果發(fā)生意外,則會(huì)將其添加到索引指令中,作為備份。如果一個(gè)下行的服務(wù)已經(jīng)執(zhí)行完畢,則應(yīng)答截取程序就會(huì)截取這些應(yīng)答,然后將這些消息抽取到一個(gè)新的命令中,最終分發(fā)程序會(huì)執(zhí)行兩項(xiàng)操作,一是向全鏈路服務(wù)器傳送指標(biāo),二是將具有特定指標(biāo)的應(yīng)答返回到上層。
要向鏈路體系遞交的最終定單就是含有目前鏈接的全部資訊的指數(shù)定單。從收到一個(gè)要求的瞬間,就會(huì)將一個(gè)索引命令組合起來,在截取一個(gè)請求的同時(shí),將其添加到上面的要求中,再產(chǎn)生一個(gè)全球唯一的ID:Trace-ID,這個(gè)ID與后續(xù)的檢索中的ID是一樣的。通常來說,要對此鏈接進(jìn)行查詢的工作人員,例如程序開發(fā)者、商業(yè)系統(tǒng)測試者、運(yùn)營人員,均可以有選擇地將應(yīng)答的Trace-id進(jìn)行存儲(chǔ),供日后參考[3]。偵聽器被激活后將上游和下游的系統(tǒng)的運(yùn)行狀況都記錄下來,最終下游的系統(tǒng)完成后,這個(gè)指標(biāo)指令也會(huì)被添加到相應(yīng)的信息中,此指標(biāo)信息如下:
①對報(bào)頭的要求;
②所述狀態(tài)代碼的回傳;
③整體上的獨(dú)立唯一跟蹤標(biāo)識(shí)符;
④對下游的體系進(jìn)行不正常處理。
接著對用戶探頭進(jìn)行函數(shù)劃分,其中用戶探測系統(tǒng)可劃分為三個(gè)部分:請求處理通道、行為監(jiān)聽通道以及應(yīng)答過程通道。例如:
(1)要求處理通道會(huì)對上行的數(shù)據(jù)要求進(jìn)行截獲,并確定是哪種請求,相應(yīng)地針對每一種要求,都會(huì)為其創(chuàng)建相應(yīng)的索引,在生成索引指令的同時(shí),會(huì)生成一個(gè)分布的跟蹤標(biāo)識(shí)符,以確保在分布的系統(tǒng)中,目前所產(chǎn)生的標(biāo)識(shí)符具有全球唯一性,確保沒有發(fā)生任何碰撞。此時(shí),使用的裝配機(jī)構(gòu)會(huì)將請求的標(biāo)題、請求的數(shù)據(jù)以及全局唯一跟蹤標(biāo)識(shí)符進(jìn)行打包,并加以存儲(chǔ)。最終,在原來的要求外,將鏈接的資訊加入要求標(biāo)頭,開始偵聽[4]。
(2)偵聽程序:從一個(gè)請求的線程中分離出一個(gè)單獨(dú)的、活躍的服務(wù),其作用是監(jiān)聽一個(gè)具有鏈接的請求的活動(dòng)路徑,在路徑上注意是否有任何不正常的舉動(dòng),并且要時(shí)刻準(zhǔn)備將數(shù)據(jù)送回來,如果出現(xiàn)不可控制的狀況,則會(huì)立即將異常消息和終止監(jiān)聽;
(3)應(yīng)答處理通道會(huì)截取下行通信完成后的應(yīng)答,并收集通信流中的諸如應(yīng)答狀況代碼、應(yīng)答數(shù)據(jù)等信息,并將請求線程生成的所述指標(biāo)指令從目前存儲(chǔ)器中提取出來,并添加到指令中,向整個(gè)鏈路監(jiān)測服務(wù)器發(fā)送響應(yīng),并向節(jié)點(diǎn)提供指標(biāo)應(yīng)答。
(二)全鏈路監(jiān)控服務(wù)端前端機(jī)需求分析
1.前端機(jī)需求
全鏈路監(jiān)測服務(wù)端的作用相當(dāng)于人類與系統(tǒng)之間的一座橋梁,其主要的作用是對權(quán)限進(jìn)行管理,無論是維護(hù)還是測試,或者開發(fā)者,他們都有自己的工作,他們也只有對承擔(dān)的工程進(jìn)行檢查,從而確保資源的隱秘性和隔離性。該過程中要將商業(yè)之間的相互依存性展示出來,而上游和下游之間的聯(lián)系,則可以讓觀眾清楚地看到商業(yè)的邏輯操作是如何進(jìn)行的,也能看到一條服務(wù)線路包括的全鏈路上各鏈接的資訊,讓觀眾了解該商業(yè)鏈接中哪些地方發(fā)生問題,從而提升查找問題的速度。
前端設(shè)備除了可以看到全鏈路外,還可以完成鏈接的數(shù)據(jù)采集,用戶發(fā)出一個(gè)鏈接時(shí),前端機(jī)可以將鏈接數(shù)據(jù)集中起來,將其傳送至數(shù)據(jù)中心進(jìn)行存儲(chǔ)。該系統(tǒng)也必須具有自我探測能力,能夠自我檢驗(yàn)其他設(shè)備是否在運(yùn)轉(zhuǎn)[5]。
(1)對用戶的訪問權(quán)限進(jìn)行管理和監(jiān)控,管理員可以設(shè)置全局權(quán)限,當(dāng)用戶登錄時(shí),將會(huì)產(chǎn)生資源隔離。
(2)查看關(guān)于本人的所有業(yè)務(wù)依賴,可以查看關(guān)于自己的業(yè)務(wù),以及上下游調(diào)用關(guān)系,明確數(shù)據(jù)流向。
(3)檢查某一服務(wù)的全部鏈接,該服務(wù)隨時(shí)接收該服務(wù)的請求,通過查詢該服務(wù)的全部鏈路,可以看到該服務(wù)特定的要求,以及每一個(gè)請求的詳細(xì)內(nèi)容。
(4)檢查鏈接中的詳細(xì)鏈接來自客戶機(jī),包括特定鏈接的上游請求時(shí)間、請求狀態(tài)、下游服務(wù)呼叫,有無出現(xiàn)任何異常,以及應(yīng)答狀態(tài)。
(5)采集用戶發(fā)來的鏈接,用戶將連接到的鏈接數(shù)據(jù)組合為一個(gè)包含全局唯一跟蹤標(biāo)識(shí)的索引,然后將該標(biāo)識(shí)進(jìn)行匯總,然后將該標(biāo)識(shí)轉(zhuǎn)發(fā)到消息中間件,
(6)心跳探測,該業(yè)務(wù)端的前端機(jī)將心跳信息分組傳輸?shù)狡渌T如隊(duì)列機(jī)器、存儲(chǔ)器等終端,以確定另一方的生命狀況。
2.非功能性需求
所謂的“非功能要求”,就是為了滿足使用者的商業(yè)需要,需要具備的特征。商業(yè)運(yùn)作時(shí),除了正常狀態(tài)下,還應(yīng)注意異常事件。例如,當(dāng)數(shù)據(jù)流量急劇增加時(shí),數(shù)據(jù)有可能失去,這并非因?yàn)榕既粨p失,而是因?yàn)槭褂帽kU(xiǎn)絲,故意損失一部分的數(shù)據(jù),以確保系統(tǒng)的正常運(yùn)轉(zhuǎn)。當(dāng)大量數(shù)據(jù)出現(xiàn)時(shí),線程應(yīng)用也要格外注意,假設(shè)這個(gè)服務(wù)仍然存在一個(gè)下行流,則必須設(shè)置多層緩沖,以避免將一個(gè)OPS填得滿滿當(dāng)當(dāng)或者中斷停機(jī)。這種情況下,CPU負(fù)荷會(huì)變得非常高。所以,有必要清楚地定量非功能要求。
三、監(jiān)控系統(tǒng)設(shè)計(jì)與實(shí)現(xiàn)
(一)全鏈路客戶端探針
1. Http客戶端探針
根據(jù)客戶發(fā)送基礎(chǔ)原則,可以將其劃分為HttpClient Handler和HttpServerHandler,都從相同的HttpHandler類中繼承,其中包括探測跟蹤、發(fā)送鏈接的數(shù)據(jù)、Sampler抽樣、Parser類,將Span資料插入請求,adapter功能是對當(dāng)前計(jì)算機(jī)IP以及系統(tǒng)所用端口進(jìn)行寫入,發(fā)送前要經(jīng)handleSend功能裝配Span,在Span結(jié)構(gòu)中還有一種枚舉類型Kind,可以確定此枚舉的某個(gè)類型,并根據(jù)抽樣速率判定,如果確定要抽樣,則首先查找線程內(nèi)有無Span或者新的Span,將Span數(shù)據(jù)放入request后再轉(zhuǎn)發(fā)。如果另一個(gè)服務(wù)提供應(yīng)答,則會(huì)通過handlerReciver功能,將所有應(yīng)答信息和狀態(tài)代碼提取出來,然后將這些信息重新組合成一個(gè)完整的Span[6]。
2. GRPC客戶端探針
GRPC探測器的一個(gè)類別依賴性圖表,與其他RPC類似,例如Dubbo、Motan,其中GRPC非常有效。所以,以GRPC為例,分析其如何使用鏈接數(shù)據(jù)探測技術(shù)。首先,這一探測中,同樣是一個(gè)有環(huán)的服務(wù)呼叫就會(huì)有兩個(gè)處理程序,像Http一樣,但此處是一個(gè)攔截者。這兩類一個(gè)是Grpc客戶端接口,一個(gè)是Grpc客戶端接口,其結(jié)構(gòu)與基礎(chǔ)結(jié)構(gòu)相似,首先構(gòu)建Tracer,經(jīng)Sampler抽樣驗(yàn)證,獲取局部線程構(gòu)建Span;其次,引入一個(gè)用于偵聽RPC的應(yīng)答,并根據(jù)應(yīng)答進(jìn)行操作,并將定制的回調(diào)功能添加至該類中,一旦收到RPC反應(yīng),就會(huì)被調(diào)用。類似于GrpcServerIntercepter的函數(shù)遵循服務(wù)器的基礎(chǔ)環(huán)函數(shù),將請求RPC的資料構(gòu)建成Span,然后放至本機(jī)線程內(nèi)。
(二)全鏈路監(jiān)控服務(wù)端前端機(jī)
1.權(quán)限控制
用戶訪問權(quán)限是用戶訪問網(wǎng)絡(luò)的關(guān)鍵,是防止用戶違規(guī)操作的關(guān)鍵,也是提高用戶工作效率的根本措施。將SpringSecurity用于許可管理架構(gòu)中,采用該框架是出于以下原因:
首先,與Spring是一個(gè)高度融合的架構(gòu),在Spring架構(gòu)基礎(chǔ)上,使用SpringSecurity進(jìn)行融合。
其次,部分具有較強(qiáng)整合的控制許可方法,其中有概要控制、數(shù)據(jù)庫控制、TAuth和OAuth控制、本文采用的單一登錄CAS控制。
最后,其控制顆粒小,可以滿足各種需要,還可以通過一個(gè)較高層次的過濾鏈條完成。只有當(dāng)使用者檢視資訊時(shí),才會(huì)使用特權(quán)控制。
2.鏈路數(shù)據(jù)收集
鏈路采集則是對用戶探頭發(fā)出的鏈接信息進(jìn)行采集。在向前置器發(fā)送鏈路的數(shù)據(jù)時(shí),客戶先對該數(shù)據(jù)的合法性進(jìn)行判定,該判定的先決條件如下:
首先,該客戶對該標(biāo)識(shí)比特進(jìn)行序列化鏈路的同時(shí),將在該標(biāo)識(shí)比特中增加4個(gè)比特的二進(jìn)制,該接收過程中,4個(gè)標(biāo)志比特滿足該條件,如果滿足該條件,則對該4個(gè)標(biāo)志比特進(jìn)行解壓縮、譯碼,獲得的是一個(gè)實(shí)例的鏈路徑,將該調(diào)用的結(jié)果加到一個(gè)調(diào)用函數(shù)中,根據(jù)采集的結(jié)果執(zhí)行。
其次,通過抽樣速率驗(yàn)證服務(wù)器,驗(yàn)證是否可以采集所需數(shù)據(jù),向信息中介機(jī)構(gòu)傳送鏈路地址進(jìn)行回調(diào)。采集鏈路時(shí),會(huì)出現(xiàn)大量線程,給每一個(gè)線程設(shè)定5分鐘時(shí)限,一般以秒量級速度進(jìn)行。
(三)監(jiān)控系統(tǒng)測試
全鏈路監(jiān)測系統(tǒng)中,用戶端是全鏈路數(shù)據(jù)傳輸中關(guān)鍵的一環(huán),因?yàn)楦鞑块T對各種服務(wù)的實(shí)施方法不盡相同,所以對探頭也適用于各種情況。表1顯示Dubbo探測器對阿里巴巴RPC的測試案例。
四、結(jié)束語
綜上所述,實(shí)時(shí)監(jiān)控系統(tǒng)在一定程度上滿足了基于分布式網(wǎng)絡(luò)的實(shí)時(shí)監(jiān)測任務(wù),但受時(shí)間、人員等因素的限制,某些功能還有待改進(jìn),并不斷進(jìn)行改進(jìn)。此外,程序上尚有一定的改進(jìn)空間。與此同時(shí),網(wǎng)頁也需要改進(jìn),以提升使用者的感受。研發(fā)系統(tǒng)時(shí),也意識(shí)到技能水平還存在缺陷,只有通過不斷學(xué)習(xí),才能夠獲取更多的信息,從而擴(kuò)大眼界,提高實(shí)力。
作者單位:杜輝 任建新 劉峰 趙政 中鐵云網(wǎng)信息科技有限公司
杜輝(1978-),男,山東肥城,碩士,工程師,研究方向:信息化。
參考文獻(xiàn)
[1]黃濤,高麗婷.基于Spark的實(shí)時(shí)數(shù)據(jù)采集與處理[J].河北建筑工程學(xué)院學(xué)報(bào),2022,40(04):176-179+188.
[2]張明杰,張才俊,江帆,張波,楊照輝.面向指標(biāo)體系的業(yè)務(wù)運(yùn)營實(shí)時(shí)監(jiān)控系統(tǒng)[J].計(jì)算機(jī)時(shí)代,2022,(06):62-65+70.
[3]張衛(wèi)星.智能分布式饋線的自動(dòng)化系統(tǒng)分析[J].集成電路應(yīng)用,2021,38(11):84-85.
[4]米亮.分布式碼流實(shí)時(shí)監(jiān)控與錄制系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].電視技術(shù),2021,45(08):140-142.
[5]郭文鑫,王海柱,趙瑞鋒,劉洋,王可.分布式實(shí)時(shí)資源數(shù)據(jù)采集裝置的設(shè)計(jì)[J].自動(dòng)化技術(shù)與應(yīng)用,2021,40(07):30-32+41.
[6]莊清霖.基于ZigBee協(xié)議的分布式光伏電站運(yùn)行數(shù)據(jù)實(shí)時(shí)監(jiān)控系統(tǒng)[J].農(nóng)村電氣化,2021,(07):57-59.