浙商(shang)銀(yin)(yin)(yin)行股份有限(xian)公司(si)(簡稱“浙商(shang)銀(yin)(yin)(yin)行”)是 12 家(jia)(jia)全國(guo)性股份制商(shang)業銀(yin)(yin)(yin)行之(zhi)一,總部設在(zai)浙江杭州,全國(guo)第13家(jia)(jia)”A+H”上市銀(yin)(yin)(yin)行,致力于打造平臺化服務(wu)銀(yin)(yin)(yin)行,為客戶提(ti)供開放、高效、靈活、共享、極致的(de)綜合金(jin)融服務(wu)。在(zai)英國(guo)《銀(yin)(yin)(yin)行家(jia)(jia)》(The Banker) 雜(za)志“2020 年全球銀(yin)(yin)(yin)行 1000 強(qiang)”榜單中,位(wei)列第 97 位(wei)。
浙(zhe)商銀行(xing)很早就開始全面(mian)推進數字化轉型(xing),2010 年(nian)浙(zhe)商銀行(xing)上線(xian)電子銀行(xing)服務、手機銀行(xing)業務,2017 年(nian)上線(xian)首個區(qu)塊鏈服務平(ping)臺,同年(nian)發布了(le)直銷銀行(xing)品牌。2018 年(nian)浙(zhe)商銀行(xing)國標 A 級數據中心啟用(yong),并在 2020 年(nian)成立易企銀金融科技子公司。
業務背景
浙商銀行(xing)微(wei)(wei)(wei)服(fu)務(wu)(wu)(wu)可視化(hua)治(zhi)理平臺(tai)是(shi)基(ji)于Java體系(xi)自研的微(wei)(wei)(wei)服(fu)務(wu)(wu)(wu)治(zhi)理監控(kong)平臺(tai),為(wei)行(xing)內基(ji)于統一的微(wei)(wei)(wei)服(fu)務(wu)(wu)(wu)框架開(kai)發(fa)的應(ying)用提供(gong)全面、實時(shi)的微(wei)(wei)(wei)服(fu)務(wu)(wu)(wu)治(zhi)理監控(kong)功能,能夠有效(xiao)提升云(yun)環(huan)境(jing)下的微(wei)(wei)(wei)服(fu)務(wu)(wu)(wu)可視化(hua)程度(du)和服(fu)務(wu)(wu)(wu)管理控(kong)制的便捷(jie)度(du),減少服(fu)務(wu)(wu)(wu)故障發(fa)現(xian)時(shi)間,提升故障定位效(xiao)率,輔助應(ying)用程序優化(hua)。在這樣(yang)的業務(wu)(wu)(wu)場景中,數(shu)據量大、監控(kong)指標繁雜成了(le)我們(men)的主要挑戰。
通(tong)過分(fen)析監控數(shu)據,我(wo)們發現它有以(yi)下(xia)特點:
- 數據高寫入、低查詢、不修改
- 對于按時間順序插入的監控數據,會涉及到少量的查詢,沒有修改數據的業務場景。
- 無需事務支持
- 如果數據模型設計妥當,無需使用事務處理。
- 各監控指標之間相互獨立,無需聯合查詢
- 數據時效性較強,超過一定時間的數據參考價值很小
核心訴求
針對這樣的場景(jing),我(wo)們需要一款能高效處(chu)理時序數據(ju)的工具。在各種因素的影響下(xia),我(wo)們有如下(xia)幾點需求:
- ,且最好是國產軟件,且能支持國產化芯片
- 功能穩定
- 社區活躍:開發者社區人員多,問答、討論頻繁且有穩定的開發團隊支持
- 部署成本低:盡可能少的服務節點,運維成本低,占用 CPU、內存資源較少
- 性能強大:支持萬條數據秒級插入
時序數據庫選型
在明確了核心訴求之后,我們調研了幾款典型的時序數據庫(Time-Series Database)產品,包括 、 和 TDengine。 具體對(dui)比如下:
- Apache Druid:Druid 是 Apache 基金會旗下的一款高性能的實時分析數據庫,支持時間序列數據。功能強大、可自愈、自平衡、易操作、可進行有效的預聚合和預計算。不過對于時間跨度較大的查詢不夠靈活,而且架構較為復雜,需要的計算資源多。
- InfluxDB:InfluxDB 是由 InfluxData 公司開發的一款開源的時序數據庫,在業界非常流行。功能強大,部署簡單,使用方便。不過集群功能沒有開源。
- TDengine:能滿足我們的核心訴求,相關測試表明其性能優于 InfluxDB,而且開源了核心的集群功能。簡單快捷、性能強大;支持 JDBC 接口,可以使我們應用快速接入使用。還有一點非常重要,因為 TDengine 的核心研發團隊在國內,很方便直接交流。
整體對比之(zhi)后,我們決定嘗試 TDengine Database。
技術架構

可視化服(fu)(fu)務治理平(ping)臺的(de)(de)一個核心功能(neng)就(jiu)是(shi)實時的(de)(de)監控功能(neng),監控數(shu)據(ju)(ju)(ju)通過微服(fu)(fu)務框(kuang)架自帶的(de)(de)埋點發送到數(shu)據(ju)(ju)(ju)接收模(mo)塊,經過數(shu)據(ju)(ju)(ju)處理和格式轉換(huan)之后(hou)發送到 Apache Kafka。數(shu)據(ju)(ju)(ju)處理模(mo)塊會接收 Kafka 中(zhong)的(de)(de)各類監控數(shu)據(ju)(ju)(ju),根據(ju)(ju)(ju)不(bu)同(tong)的(de)(de)數(shu)據(ju)(ju)(ju)類型進行加(jia)工計(ji)算,存儲到 Elasticsearch 和 TDengine 中(zhong)。用(yong)戶通過前端與后(hou)端的(de)(de)服(fu)(fu)務層(ceng)對監控數(shu)據(ju)(ju)(ju)進行查詢分(fen)析。
目前為止(zhi),存(cun)儲于 TDengine 中的數據(ju)(ju)主要為時(shi)序類數據(ju)(ju),如(ru)CPU、內存(cun)使用率(lv)等系(xi)統運行(xing)數據(ju)(ju),微服務調用、分布式鎖(suo)、數據(ju)(ju)庫(ku)操作處理時(shi)間,業務線程(cheng)池(chi)、連接(jie)池(chi)等各類指(zhi)標(biao)數據(ju)(ju)。
數據模型
目前收集的監(jian)控(kong)數據(ju)類型如下:
- JVMGC 相關指標
- JVMThread 相關指標
- JVMMemory 相關指標
- 系統負載相關指標
- 數據庫連接池監控數據
- Transaction 調用監控數據
- Dubbo 線程池監控數據
我們針對每一個監控類型都采用了超級表建(jian)表,以 JVMGC 為例,建(jian)表語(yu)句(ju)為:
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))
與此同時,對每(mei)一(yi)個監(jian)控(kong)節(jie)點都建(jian)立一(yi)張(zhang)子(zi)表,這樣(yang)處理的好處在于:
- 相同指標在進行多表查詢時,可以利用超級表在一個 SQL 語句中完成查詢
- 超級表可以實現表與表之間的數據聚合
- 對于單節點的監控數據,查詢只需要訪問單一子表即可
使用體驗
目前(qian)微服(fu)(fu)務(wu)(wu)可視(shi)化服(fu)(fu)務(wu)(wu)治(zhi)理平臺對并發(fa)要求(qiu)較高(gao),但是 TDengine 可以很好地滿足需求(qiu),插入(ru)/查詢平均(jun)耗時均(jun)在(zai) 10ms 以內。
TDengine 的開(kai)源(yuan)版本(ben)小而(er)精致,開(kai)發測(ce)試人(ren)員可以自(zi)己搭建(jian)私有的 TDengine 集群進行測(ce)試,無(wu)須(xu)擔心影響他人(ren),非(fei)常方便。
TDengine 的社區非(fei)常活躍,遇到問題在 GitHub 上提 issue,或直接在官方的微信交流群里討論,都可以(yi)快速得(de)到響應。
總結
TDengine Database很好地滿足(zu)了(le)我(wo)們的需求,性能和穩定(ding)性都非常出色(se),同時極大降低了(le)部署(shu)和運維成本。
TDengine 的支(zhi)持團隊(dui)也非常積極(ji)熱(re)心,能夠快速解決我們遇到的大(da)部分問(wen)題(ti),為我們免除(chu)了后顧之憂(you)。
作為一款為物聯網場景設計的時序數據庫,TDengine 以存儲效率高、性能強大、功能穩定等特點在傳統互聯網應用架構中同樣有著相當出色的發揮,超級表的設計省去了不少聯表查詢邏輯,大大簡化了業務層的開發工作。接下來,我們也期待在行內挖掘出更多 TDengine 的應用場景。


























