程序員到架構師的必經之路:技術選型時,全鏈路日誌中間件對比

技術選型

在進行技術選型時,可以對照表 9-1 中的全鏈路日誌中間件對比。

表 9-1 全鏈路日誌中間件對比

從表 9-1 中可以看出,可供選擇的中間件很多,那麼該如何選擇呢?項目組討論後,最終梳理出了以下原則。

日誌數據結構支持 OpenTracing

平時日誌行都是獨立記錄的,只能通過線程 ID 把它們關聯起來。因此需要一個數據結構把每個請求在全部服務中的相關日誌關聯起來。目前已經有一種比較通用的全鏈路數據格式——OpenTracing,它的標準和 API 是由一個開源組織 Cloud Native Computing Foundation(雲原生計算基金會)進行維護的,這個開源組織也包含了一些全鏈路日誌系統的維護者,如圖 9-2 所示。

• 圖 9-2 OpenTracing 協議維護者

OpenTracing 通過提供一個與平臺 / 廠商無關的 API,使得開發人員能夠更方便地添加(或更換)追蹤系統,這樣即使之前引入的全鏈路日誌不好用,以後想換掉也是非常方便的。

接下來解釋一下 OpenTracing 標準,它主要包含兩個概念:一個是 Trace,一個是 Span。

先來看看下面的例子,如圖 9-3 所示。

• 圖 9-3 請求調用示意圖

從圖 9-3 中可以看到一個客戶端調用 Order API 的請求時經歷的整個流程(①~⑩),即一個 Trace;Order API 調用了 Produc Service 的整個過程(②~⑤),這就是一個 Span。每個 Span 代表 Trace 中被命名且被計時的連續性執行片段。

通過圖 9-3 還能發現,Span 中又包含了一個子 Span,比如調用 ProductService 的過程中,Product Service 會訪問一次數據庫(③④),這也是一個 Span。因此可以得出,一個 Span 可以包含多個子 Span,而 Span 與 Span 之間的關係就叫 Reference。

在技術選型時,項目組都認可:必須保證系統的可替代性,儘量不要束縛於一項開源技術上。因爲以前有過一次教訓,當時強依賴了一個框架,結果那個框架不維護了,之後維護相關代碼的人就非常痛苦,但是如果全部遷移,代價又太大且工作量也很大,付出與產出比不足以說服領導進行決策;如果不遷移,就只能一直用着過時的技術。所以這次選型使用了基於 OpenTracing 的日誌系統。

9 支持 Elasticsearch 作爲存儲系統

誠然,因爲流量大的原因,導致記錄的日誌數據量也很大,這就要求存儲這些日誌的系統必須支持海量數據且保證查詢高效。

最終,因爲公司運維人員對 Elasticsearch 比較熟悉,所以提出可以使用 Elasticsearch 對日誌進行存儲。

保證日誌的收集對性能無影響

當服務在記錄日誌時,需要確保日誌的記錄與收集對服務器的性能不會產生影響。

比如之前調研過 Pinpoint,當服務在記錄日誌時,Pinpoint 的併發數達到一定數量時整體吞吐量少了一半,對服務器的性能影響很大,這是不能接受的。

查詢統計功能的豐富程度

一般來說,查詢統計功能越豐富越好,但必須首先滿足一個基礎功能:支持每個請求樹狀結構的全鏈路日誌(如圖 9-4 和圖 9-5 所示),比如 SkyWalking 的功能就非常適用。

查詢統計系統除了滿足基本功能以外,也要實現監控報警、指標統計等功能,以此幫助減輕二次開發的工作量。

如何以最小的業務代碼侵入性引入這些功能?

• 圖 9-4 請求日誌列表示意圖

• 圖 9-5 請求日誌樹狀示意圖

項目組希望日誌數據的收集過程對寫業務代碼的人保持透明,因此,一種比較理想的解決方案是使用 Java 的探針,通過字節碼加強的方式進行埋點。不過,這種方式對系統性能也會產生一定影響。

而且在實際業務中,公司都會把訪問數據庫、Redis、MQ 的代碼進行封裝,無法通過字節碼加強的方式實現埋點,就只能嘗試在封裝的代碼中實現,這樣對開發業務代碼的人來說同樣透明。

使用案例

技術選型時,往往還需要了解哪些知名公司使用了這個技術,因爲大公司的業務場景相對複雜些,經歷的陷阱較多,一個技術如果被很多公司用過,那使用起來也就會穩定很多。

以上就是技術選型的幾個判斷標準。

最終選擇

根據以上問題剖析及性能測試結果分析,可以發現 SkyWalking 比較符合需求。

項目組做性能測試時發現,對於 500 線程壓力以下的服務,是否使用 SkyWalking 對其吞吐量影響不大,一般相差不超過 10%。

SkyWalking 官方測試報告中也提到:假如有 500 個併發用戶,每個用戶的每次請求間隔是 10 毫秒,TPS 基本沒什麼變化,如圖 9-6 所示。

• 圖 9-6 SkyWalking 壓測性能影響

另外,技術選型時不僅要關注需求本身,還需要考慮組織或個人主觀上的因素。

最後,根據筆者的實踐經驗,隨着國內技術環境的改善和中國互聯網的崛起,如今國產的很多開源框架並不比國外差,反而更貼近實際需求,比如 VUE、Dubbo,這也是項目組選擇 SkyWalking 的原因之一。

來源:

https://www.toutiao.com/article/7146481963321688580/?log_from=5bbbc755bd407_1665371246912

本文由 Readfog 進行 AMP 轉碼,版權歸原作者所有。
來源https://mp.weixin.qq.com/s/oJLAKwTjzV3Cmvztq3oK7A