TDengine在浙商銀行微服務監控中的實踐

濤思資料TDengine發表於2021-11-04
作者:樓永紅 王軒宇|浙商銀行 
 
浙商銀行股份有限公司(簡稱“浙商銀行")是 12 家全國性股份制商業銀行之一,總部設在浙江杭州,全國第13家"A+H"上市銀行,致力於打造平臺化服務銀行,為客戶提供開放、高效、靈活、共享、極致的綜合金融服務。在英國《銀行家》(The Banker) 雜誌“2020 年全球銀行 1000 強"榜單中,位列第 97 位。
 
浙商銀行很早就開始全面推進數字化轉型,2010 年浙商銀行上線電子銀行服務、手機銀行業務,2017 年上線首個區塊鏈服務平臺,同年釋出了直銷銀行品牌。2018 年浙商銀行國標 A 級資料中心啟用,並在 2020 年成立易企銀金融科技子公司。
 

業務背景

浙商銀行微服務視覺化治理平臺是基於Java體系自研的微服務治理監控平臺,為行內基於統一的微服務框架開發的應用提供全面、實時的微服務治理監控功能,能夠有效提升雲環境下的微服務視覺化程度和服務管理控制的便捷度,減少服務故障發現時間,提升故障定位效率,輔助應用程式優化。在這樣的業務場景中,資料量大、監控指標繁雜成了我們的主要挑戰。
 
通過分析監控資料,我們發現它有以下特點:
• 資料高寫入、低查詢、不修改
對於按時間順序插入的監控資料,會涉及到少量的查詢,沒有修改資料的業務場景。
• 無需事務支援
如果資料模型設計妥當,無需使用事務處理。
• 各監控指標之間相互獨立,無需聯合查詢
• 資料時效性較強,超過一定時間的資料參考價值很小
 

核心訴求

針對這樣的場景,我們需要一款能高效處理時序資料的工具。在各種因素的影響下,我們有如下幾點需求:
• 開源可控,且最好是國產軟體,且能支援國產化晶片
• 功能穩定
• 社群活躍:開發者社群人員多,問答、討論頻繁且有穩定的開發團隊支援
• 部署成本低:儘可能少的服務節點,運維成本低,佔用 CPU、記憶體資源較少
• 效能強大:支援萬條資料秒級插入
 

時序資料庫選型

在明確了核心訴求之後,我們調研了幾款典型的時序資料庫產品,包括 Apache DruidInfluxDBTDengine
具體對比如下:
 
Apache Druid:Druid 是 Apache 基金會旗下的一款高效能的實時分析資料庫,支援時間序列資料。功能強大、可自愈、自平衡、易操作、可進行有效的預聚合和預計算。不過對於時間跨度較大的查詢不夠靈活,而且架構較為複雜,需要的計算資源多。
 
InfluxDB:InfluxDB 是由 InfluxData 公司開發的一款開源的時序資料庫,在業界非常流行。功能強大,部署簡單,使用方便。不過叢集功能沒有開源。
 
TDengine:能滿足我們的核心訴求,相關測試表明其效能優於 InfluxDB,而且開源了核心的叢集功能。簡單快捷、效能強大;支援 JDBC 介面,可以使我們應用快速接入使用。還有一點非常重要,因為 TDengine 的核心研發團隊在國內,很方便直接交流。
 
整體對比之後,我們決定嘗試 TDengine。
 

技術架構

 

 

 
視覺化服務治理平臺的一個核心功能就是實時的監控功能,監控資料通過微服務框架自帶的埋點傳送到資料接收模組,經過資料處理和格式轉換之後傳送到 Apache Kafka。資料處理模組會接收 Kafka 中的各類監控資料,根據不同的資料型別進行加工計算,儲存到 Elasticsearch 和 TDengine 中。使用者通過前端與後端的服務層對監控資料進行查詢分析。
目前為止,儲存於 TDengine 中的資料主要為時序類資料,如CPU、記憶體使用率等系統執行資料,微服務呼叫、分散式鎖、資料庫操作處理時間,業務執行緒池、連線池等各類指標資料。
 

資料模型

目前收集的監控資料型別如下:
• JVMGC 相關指標
• JVMThread 相關指標
• JVMMemory 相關指標
• 系統負載相關指標
• 資料庫連線池監控資料
• Transaction 呼叫監控資料
• Dubbo 執行緒池監控資料
 
我們針對每一個監控型別都採用了超級表建表,以 JVMGC 為例,建表語句為:
 create stable JVMGC (happentime timestamp, jvmUsedMemory bigint, jvmUsedMemoryyPercentage double, nonHeapMemoryUsed double, oldGenUsed bigint, oldGenUsedPercentage double , directBufferUsed bigint) tags (application NCHAR(300), host NCHAR(500), ip NCHAR(50)) 
 
與此同時,對每一個監控節點都建立一張子表,這樣處理的好處在於:
• 相同指標在進行多表查詢時,可以利用超級表在一個 SQL 語句中完成查詢
• 超級表可以實現表與表之間的資料聚合
• 對於單節點的監控資料,查詢只需要訪問單一子表即可
 

使用體驗

目前微服務視覺化服務治理平臺對併發要求較高,但是 TDengine 可以很好地滿足需求,插入/查詢平均耗時均在 10ms 以內。
TDengine 的開源版本小而精緻,開發測試人員可以自己搭建私有的 TDengine 叢集進行測試,無須擔心影響他人,非常方便。
TDengine 的社群非常活躍,遇到問題在 GitHub 上提 issue,或直接在官方的微信交流群裡討論,都可以快速得到響應。
 

總結

TDengine 很好地滿足了我們的需求,效能和穩定性都非常出色,同時極大降低了部署和運維成本。
TDengine 的支援團隊也非常積極熱心,能夠快速解決我們遇到的大部分問題,為我們免除了後顧之憂。
作為一款為物聯網場景設計的時序資料庫,TDengine 以儲存效率高、效能強大、功能穩定等特點在傳統網際網路應用架構中同樣有著相當出色的發揮,超級表的設計省去了不少聯表查詢邏輯,大大簡化了業務層的開發工作。接下來,我們也期待在行內挖掘出更多 TDengine 的應用場景。

相關文章