<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          百度商業(yè)大規(guī)模高性能全息日志檢索技術(shù)揭秘

          共 2757字,需瀏覽 6分鐘

           ·

          2021-11-30 09:11

          點(diǎn)擊上方“服務(wù)端思維”,選擇“設(shè)為星標(biāo)

          回復(fù)”669“獲取獨(dú)家整理的精選資料集

          回復(fù)”加群“加入全國(guó)服務(wù)端高端社群「后端圈」

          作者 | 李奇原
          出品?| 商業(yè)平臺(tái)技術(shù)實(shí)踐

          一、背景介紹

          百度商業(yè)產(chǎn)品是服務(wù)于百度廣告主用來(lái)投放廣告而打造的產(chǎn)品生態(tài)。包含搜索推廣、信息流推廣、品牌等推廣渠道以及觀星盤、基木魚等營(yíng)銷工具。

          百度商業(yè)產(chǎn)品全景圖

          這一系列商業(yè)產(chǎn)品底層多為復(fù)雜的 Java 業(yè)務(wù)系統(tǒng)。復(fù)雜性主要體現(xiàn)在底層微服務(wù)子系統(tǒng)多、應(yīng)用間調(diào)用關(guān)系復(fù)雜、基礎(chǔ)組件依賴多。復(fù)雜性高就就意味著容易出問(wèn)題,并且出了問(wèn)題定位困難。但是這些產(chǎn)品出問(wèn)題會(huì)直接導(dǎo)致廣告主是否成功投放廣告或者修改出價(jià)、創(chuàng)意等操作失敗。

          「如果有過(guò)在廣告業(yè)務(wù)系統(tǒng)一線工作經(jīng)歷的同學(xué),應(yīng)該深知排查線上問(wèn)題的枯燥和耗時(shí)」

          如何在出問(wèn)題第一時(shí)間定位問(wèn)題,從而快速止損和修復(fù)問(wèn)題,是商業(yè)產(chǎn)品系統(tǒng)中一個(gè)關(guān)鍵的技術(shù)痛點(diǎn)。為了解決這個(gè)痛點(diǎn),百度商業(yè)平臺(tái)部打造了大規(guī)模分布式微服務(wù)監(jiān)控系統(tǒng)。公眾號(hào)前文「百度商業(yè)大規(guī)模微服務(wù)業(yè)務(wù)監(jiān)控系統(tǒng)-鳳睛」已經(jīng)講述了鳳睛如何通過(guò)自研無(wú)侵入探針以及高性能調(diào)用鏈存儲(chǔ)系統(tǒng)為百度各業(yè)務(wù)線提供微服務(wù)系統(tǒng)性能指標(biāo)、業(yè)務(wù)黃金指標(biāo)、健康狀況、監(jiān)控告警等。

          當(dāng)收到線上報(bào)警時(shí),值班同學(xué)需要首先找到出問(wèn)題的根因模塊,然后找出該模塊出錯(cuò)的服務(wù)接口,最后定位到問(wèn)題代碼行棧。鳳睛提供了調(diào)用鏈數(shù)據(jù)能夠查看各個(gè)調(diào)用環(huán)節(jié)的狀態(tài)碼、耗時(shí)等,同時(shí)也收錄了業(yè)務(wù)系統(tǒng)打印的錯(cuò)誤堆棧。

          鳳睛提供的調(diào)用鏈表格視圖(紅色箭頭標(biāo)識(shí)的是耗時(shí)長(zhǎng)關(guān)鍵路徑)

          大部分情況下,通過(guò)調(diào)用鏈以及系統(tǒng)打印的錯(cuò)誤堆??梢源_定問(wèn)題。但是,部分情況下問(wèn)題與用戶請(qǐng)求返回、業(yè)務(wù)訪問(wèn)緩存的情況等等比較特殊的場(chǎng)景有關(guān)。這需要通過(guò)系統(tǒng)打印的業(yè)務(wù)日志輔助定位。

          鳳睛并沒(méi)有采集和存儲(chǔ)業(yè)務(wù)日志,這與數(shù)據(jù)量有關(guān),它部署在數(shù)千個(gè)微服務(wù)子系統(tǒng)上,運(yùn)行在數(shù)萬(wàn)個(gè)容器中。每天采集的調(diào)用鏈數(shù)據(jù)條數(shù)達(dá)千億,日存儲(chǔ)數(shù)據(jù)在TB級(jí)別。而更加龐大、抽象程度最低的業(yè)務(wù)日志,預(yù)估單日總量接近PB級(jí)別,存儲(chǔ)開銷實(shí)在太大。

          二、技術(shù)原理

          傳統(tǒng)做法:為了檢索到單個(gè)請(qǐng)求相關(guān)的所有業(yè)務(wù)日志,日志會(huì)被采集走存儲(chǔ)在 ES 里面提供檢索功能。

          日志采集架構(gòu)

          誠(chéng)然,Kibana+ES會(huì)提供更豐富靈活的檢索功能,但是對(duì)于鳳睛這種平臺(tái)級(jí)別監(jiān)控系統(tǒng),基本不可行。ES的資源成本過(guò)于昂貴,整個(gè)平臺(tái)單日日志數(shù)據(jù)接近 PB。如果全部存儲(chǔ)在 ES 中,那么集群資源消耗以及維護(hù)成本都是很高的。并且,單純定位線上問(wèn)題,并不需要特別復(fù)雜的日志檢索功能。

          那么能否在少量資源消耗下,滿足用戶可以看到單個(gè)請(qǐng)求相關(guān)的完整調(diào)用鏈以及業(yè)務(wù)日志呢?

          鳳睛整個(gè)迭代過(guò)程就是不斷利用有限資源來(lái)創(chuàng)造性解決實(shí)際問(wèn)題的過(guò)程。而真正好的系統(tǒng)架構(gòu)亦然如此,要「因地制宜」。在阿里巴巴鐘華同學(xué)的《企業(yè)IT架構(gòu)轉(zhuǎn)型之道:阿里巴巴中臺(tái)戰(zhàn)略思想與架構(gòu)實(shí)戰(zhàn)》一書中,開篇就提到過(guò)「好的創(chuàng)新一定是基于企業(yè)現(xiàn)狀因地制宜」。

          目前商業(yè)平臺(tái) Java 系統(tǒng)統(tǒng)一部署在企業(yè)級(jí)微服務(wù)托管平臺(tái) Jarvis上,同時(shí)鳳睛探針能夠無(wú)侵入式跟蹤和采集系統(tǒng)的動(dòng)作,這是我們的技術(shù)優(yōu)勢(shì)。能否利用這個(gè)優(yōu)勢(shì),來(lái)規(guī)避掉存儲(chǔ)資源有限的短板。探針既然能夠記錄系統(tǒng)在每個(gè)請(qǐng)求發(fā)生過(guò)程中的所有的動(dòng)作;那么同樣可以記錄系統(tǒng)打印日志的動(dòng)作。

          全息日志技術(shù)思路示意圖

          我們通過(guò)探針記錄下請(qǐng)求相關(guān)的業(yè)務(wù)日志文件名、日志偏移量,并且存儲(chǔ)數(shù)據(jù)庫(kù)中。當(dāng)用戶在Jarvis管理端檢索調(diào)用鏈相關(guān)的業(yè)務(wù)日志時(shí),系統(tǒng)會(huì)先通過(guò)調(diào)用鏈 ID 去獲取相關(guān)的虛擬容器地址、日志文件名、日志偏移量等元數(shù)據(jù)信息,然后通過(guò)這些元數(shù)據(jù)去具體的容器中取到完整的日志內(nèi)容,最后展現(xiàn)給用戶。

          全息日志實(shí)際產(chǎn)品效果圖

          這樣雖然我們只消耗少量的存儲(chǔ)和計(jì)算資源,也可以輕松檢索到海量調(diào)用鏈相關(guān)的業(yè)務(wù)日志。這個(gè)受限于日志在容器中的實(shí)際存儲(chǔ)時(shí)間,但是線上問(wèn)題很少需要借助遠(yuǎn)久歷史日志來(lái)分析定位。絕大多數(shù)情況下借助當(dāng)前日志就可以滿足需求了。

          「全息日志技術(shù)是鳳睛自研技術(shù),也申請(qǐng)了相關(guān)專利」

          三、算法實(shí)現(xiàn)

          全息日志技術(shù)設(shè)計(jì)中分為兩個(gè)主要的部分:

          1. 日志元數(shù)據(jù)采集:攔截打印日志的前后操作,進(jìn)行元數(shù)據(jù)采集。
          2. 元數(shù)據(jù)解析:解析元數(shù)據(jù)定位出日志文件當(dāng)前位置以及日志所在文件的位置。

          在通常情況下,一份日志消息可能打印到多個(gè)日志文件中,日志文件可能根據(jù)配置的滾動(dòng)策略進(jìn)行基于時(shí)間或者大小的滾動(dòng),不同的時(shí)間進(jìn)行日志檢索需要能夠自動(dòng)區(qū)分出日志當(dāng)前所在的實(shí)際位置,用戶不需要感知底層日志文件位置變化。

          在設(shè)計(jì)和實(shí)現(xiàn)中關(guān)鍵問(wèn)題的解決:

          1. 元數(shù)據(jù)采集的性能和準(zhǔn)確性問(wèn)題
            為了保證元數(shù)據(jù)能夠被準(zhǔn)確的采集,需要基于鳳睛探針攔截打印日志的方法。
          元數(shù)據(jù)項(xiàng)與采集原理圖
          • 在原始打印日志操作之前插入字節(jié)碼,記錄開始時(shí)間、讀文件標(biāo)識(shí)符獲取打印前文件偏移量、文件的滾動(dòng)策略(包括文件最大大小、文件滾動(dòng)時(shí)間等)、日志級(jí)別;
          • 在原始打印日志操作之后插入字節(jié)碼,記錄結(jié)束時(shí)間、讀文件標(biāo)識(shí)符獲取打印后文件偏移量、日志內(nèi)容當(dāng)前寫入的文件、文件按滾動(dòng)策略歸檔后策略、同名歸檔時(shí)歸檔序號(hào)等.
          • 在采集文件偏移量時(shí)通過(guò)直接讀取文件描述符而不是直接讀文件內(nèi)容來(lái)提高性能。同時(shí),在日志打印內(nèi)容里注入每次調(diào)用唯一的traceId做更精準(zhǔn)的標(biāo)注,其他數(shù)據(jù)的采集用來(lái)日志檢索時(shí)解析使用。
          1. 元數(shù)據(jù)解析
            用戶發(fā)起日志檢索時(shí),使用算法解析出此時(shí)此刻日志內(nèi)容所在位置。
          檢索算法流程圖
          • 根據(jù)調(diào)用鏈traceId查詢出與該traceId相同的所以日志元數(shù)據(jù)記錄;
          • 分別獲取日志打印結(jié)束時(shí)間、日志打印時(shí)當(dāng)前文件名、文件歸檔策略;
          • 解析歸檔策略;
          • 根據(jù)歸檔策略注入不同基準(zhǔn)參數(shù),模擬出一個(gè)日志打印器,以此獲取到此時(shí)此刻文件位置;
          • 根據(jù)文件位置,以及文件前后偏移量,讀取出兩個(gè)偏移量之前的日志內(nèi)容;
          • 用traceId進(jìn)行內(nèi)容校準(zhǔn).

          四、結(jié)語(yǔ)

          鳳睛通過(guò)自研的全息日志技術(shù)能夠幫助業(yè)務(wù)方快速檢索到業(yè)務(wù)請(qǐng)求相關(guān)的完整調(diào)用鏈以及完整的業(yè)務(wù)日志。作為分布式追蹤系統(tǒng),我們也補(bǔ)齊了追蹤領(lǐng)域最后一塊短板。但是業(yè)務(wù)系統(tǒng)的復(fù)雜性,也決定了鳳睛作為一個(gè)平臺(tái)化的業(yè)務(wù)監(jiān)控產(chǎn)品所面臨的諸多挑戰(zhàn)。

          — 本文結(jié)束 —


          ●?漫談設(shè)計(jì)模式在 Spring 框架中的良好實(shí)踐

          ●?顛覆微服務(wù)認(rèn)知:深入思考微服務(wù)的七個(gè)主流觀點(diǎn)

          ●?人人都是 API 設(shè)計(jì)者

          ●?一文講透微服務(wù)下如何保證事務(wù)的一致性

          ●?要黑盒測(cè)試微服務(wù)內(nèi)部服務(wù)間調(diào)用,我該如何實(shí)現(xiàn)?



          關(guān)注我,回復(fù) 「加群」 加入各種主題討論群。



          對(duì)「服務(wù)端思維」有期待,請(qǐng)?jiān)谖哪c(diǎn)個(gè)在看

          喜歡這篇文章,歡迎轉(zhuǎn)發(fā)、分享朋友圈


          在看點(diǎn)這里
          瀏覽 55
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  香蕉国产精品视频 | 一道本高清无码在线看 | 在线观看免费观看在线黄色 | 青青自拍视频在线 | 91精品少妇高潮一区二区三区不卡 |