浙商銀行股份有限公司(簡(jiǎn)稱(chēng)“浙商銀行”)是 12 家全國(guó)性股份制商業(yè)銀行之一,總部設(shè)在浙江杭州,全國(guó)第13家”A+H”上市銀行,致力于打造平臺(tái)化服務(wù)銀行,為客戶(hù)提供開(kāi)放、高效、靈活、共享、極致的綜合金融服務(wù)。在英國(guó)《銀行家》(The Banker) 雜志“2020 年全球銀行 1000 強(qiáng)”榜單中,位列第 97 位。
浙商銀行很早就開(kāi)始全面推進(jìn)數(shù)字化轉(zhuǎn)型,2010 年浙商銀行上線(xiàn)電子銀行服務(wù)、手機(jī)銀行業(yè)務(wù),2017 年上線(xiàn)首個(gè)區(qū)塊鏈服務(wù)平臺(tái),同年發(fā)布了直銷(xiāo)銀行品牌。2018 年浙商銀行國(guó)標(biāo) A 級(jí)數(shù)據(jù)中心啟用,并在 2020 年成立易企銀金融科技子公司。
業(yè)務(wù)背景
浙商銀行微服務(wù)可視化治理平臺(tái)是基于Java體系自研的微服務(wù)治理監(jiān)控平臺(tái),為行內(nèi)基于統(tǒng)一的微服務(wù)框架開(kāi)發(fā)的應(yīng)用提供全面、實(shí)時(shí)的微服務(wù)治理監(jiān)控功能,能夠有效提升云環(huán)境下的微服務(wù)可視化程度和服務(wù)管理控制的便捷度,減少服務(wù)故障發(fā)現(xiàn)時(shí)間,提升故障定位效率,輔助應(yīng)用程序優(yōu)化。在這樣的業(yè)務(wù)場(chǎng)景中,數(shù)據(jù)量大、監(jiān)控指標(biāo)繁雜成了我們的主要挑戰(zhàn)。
通過(guò)分析監(jiān)控?cái)?shù)據(jù),我們發(fā)現(xiàn)它有以下特點(diǎn):
- 數(shù)據(jù)高寫(xiě)入、低查詢(xún)、不修改
- 對(duì)于按時(shí)間順序插入的監(jiān)控?cái)?shù)據(jù),會(huì)涉及到少量的查詢(xún),沒(méi)有修改數(shù)據(jù)的業(yè)務(wù)場(chǎng)景。
- 無(wú)需事務(wù)支持
- 如果數(shù)據(jù)模型設(shè)計(jì)妥當(dāng),無(wú)需使用事務(wù)處理。
- 各監(jiān)控指標(biāo)之間相互獨(dú)立,無(wú)需聯(lián)合查詢(xún)
- 數(shù)據(jù)時(shí)效性較強(qiáng),超過(guò)一定時(shí)間的數(shù)據(jù)參考價(jià)值很小
核心訴求
針對(duì)這樣的場(chǎng)景,我們需要一款能高效處理時(shí)序數(shù)據(jù)的工具。在各種因素的影響下,我們有如下幾點(diǎn)需求:
- 開(kāi)源可控,且最好是國(guó)產(chǎn)軟件,且能支持國(guó)產(chǎn)化芯片
- 功能穩(wěn)定
- 社區(qū)活躍:開(kāi)發(fā)者社區(qū)人員多,問(wèn)答、討論頻繁且有穩(wěn)定的開(kāi)發(fā)團(tuán)隊(duì)支持
- 部署成本低:盡可能少的服務(wù)節(jié)點(diǎn),運(yùn)維成本低,占用 CPU、內(nèi)存資源較少
- 性能強(qiáng)大:支持萬(wàn)條數(shù)據(jù)秒級(jí)插入
時(shí)序數(shù)據(jù)庫(kù)選型
在明確了核心訴求之后,我們調(diào)研了幾款典型的時(shí)序數(shù)據(jù)庫(kù)(Time-Series Database)產(chǎn)品,包括 Apache Druid、InfluxDB 和 TDengine。 具體對(duì)比如下:
- Apache Druid:Druid 是 Apache 基金會(huì)旗下的一款高性能的實(shí)時(shí)分析數(shù)據(jù)庫(kù),支持時(shí)間序列數(shù)據(jù)。功能強(qiáng)大、可自愈、自平衡、易操作、可進(jìn)行有效的預(yù)聚合和預(yù)計(jì)算。不過(guò)對(duì)于時(shí)間跨度較大的查詢(xún)不夠靈活,而且架構(gòu)較為復(fù)雜,需要的計(jì)算資源多。
- InfluxDB:InfluxDB 是由 InfluxData 公司開(kāi)發(fā)的一款開(kāi)源的時(shí)序數(shù)據(jù)庫(kù),在業(yè)界非常流行。功能強(qiáng)大,部署簡(jiǎn)單,使用方便。不過(guò)集群功能沒(méi)有開(kāi)源。
- TDengine:能滿(mǎn)足我們的核心訴求,相關(guān)測(cè)試表明其性能優(yōu)于 InfluxDB,而且開(kāi)源了核心的集群功能。簡(jiǎn)單快捷、性能強(qiáng)大;支持 JDBC 接口,可以使我們應(yīng)用快速接入使用。還有一點(diǎn)非常重要,因?yàn)?TDengine 的核心研發(fā)團(tuán)隊(duì)在國(guó)內(nèi),很方便直接交流。
整體對(duì)比之后,我們決定嘗試 TDengine Database。
技術(shù)架構(gòu)

可視化服務(wù)治理平臺(tái)的一個(gè)核心功能就是實(shí)時(shí)的監(jiān)控功能,監(jiān)控?cái)?shù)據(jù)通過(guò)微服務(wù)框架自帶的埋點(diǎn)發(fā)送到數(shù)據(jù)接收模塊,經(jīng)過(guò)數(shù)據(jù)處理和格式轉(zhuǎn)換之后發(fā)送到 Apache Kafka。數(shù)據(jù)處理模塊會(huì)接收 Kafka 中的各類(lèi)監(jiān)控?cái)?shù)據(jù),根據(jù)不同的數(shù)據(jù)類(lèi)型進(jìn)行加工計(jì)算,存儲(chǔ)到 Elasticsearch 和 TDengine 中。用戶(hù)通過(guò)前端與后端的服務(wù)層對(duì)監(jiān)控?cái)?shù)據(jù)進(jìn)行查詢(xún)分析。
目前為止,存儲(chǔ)于 TDengine 中的數(shù)據(jù)主要為時(shí)序類(lèi)數(shù)據(jù),如CPU、內(nèi)存使用率等系統(tǒng)運(yùn)行數(shù)據(jù),微服務(wù)調(diào)用、分布式鎖、數(shù)據(jù)庫(kù)操作處理時(shí)間,業(yè)務(wù)線(xiàn)程池、連接池等各類(lèi)指標(biāo)數(shù)據(jù)。
數(shù)據(jù)模型
目前收集的監(jiān)控?cái)?shù)據(jù)類(lèi)型如下:
- JVMGC 相關(guān)指標(biāo)
- JVMThread 相關(guān)指標(biāo)
- JVMMemory 相關(guān)指標(biāo)
- 系統(tǒng)負(fù)載相關(guān)指標(biāo)
- 數(shù)據(jù)庫(kù)連接池監(jiān)控?cái)?shù)據(jù)
- Transaction 調(diào)用監(jiān)控?cái)?shù)據(jù)
- Dubbo 線(xiàn)程池監(jiān)控?cái)?shù)據(jù)
我們針對(duì)每一個(gè)監(jiān)控類(lèi)型都采用了超級(jí)表建表,以 JVMGC 為例,建表語(yǔ)句為:
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))
與此同時(shí),對(duì)每一個(gè)監(jiān)控節(jié)點(diǎn)都建立一張子表,這樣處理的好處在于:
- 相同指標(biāo)在進(jìn)行多表查詢(xún)時(shí),可以利用超級(jí)表在一個(gè) SQL 語(yǔ)句中完成查詢(xún)
- 超級(jí)表可以實(shí)現(xiàn)表與表之間的數(shù)據(jù)聚合
- 對(duì)于單節(jié)點(diǎn)的監(jiān)控?cái)?shù)據(jù),查詢(xún)只需要訪(fǎng)問(wèn)單一子表即可
使用體驗(yàn)
目前微服務(wù)可視化服務(wù)治理平臺(tái)對(duì)并發(fā)要求較高,但是 TDengine 可以很好地滿(mǎn)足需求,插入/查詢(xún)平均耗時(shí)均在 10ms 以?xún)?nèi)。
TDengine 的開(kāi)源版本小而精致,開(kāi)發(fā)測(cè)試人員可以自己搭建私有的 TDengine 集群進(jìn)行測(cè)試,無(wú)須擔(dān)心影響他人,非常方便。
TDengine 的社區(qū)非?;钴S,遇到問(wèn)題在 GitHub 上提 issue,或直接在官方的微信交流群里討論,都可以快速得到響應(yīng)。
總結(jié)
TDengine Database很好地滿(mǎn)足了我們的需求,性能和穩(wěn)定性都非常出色,同時(shí)極大降低了部署和運(yùn)維成本。
TDengine 的支持團(tuán)隊(duì)也非常積極熱心,能夠快速解決我們遇到的大部分問(wèn)題,為我們免除了后顧之憂(yōu)。
作為一款為物聯(lián)網(wǎng)場(chǎng)景設(shè)計(jì)的時(shí)序數(shù)據(jù)庫(kù),TDengine 以存儲(chǔ)效率高、性能強(qiáng)大、功能穩(wěn)定等特點(diǎn)在傳統(tǒng)互聯(lián)網(wǎng)應(yīng)用架構(gòu)中同樣有著相當(dāng)出色的發(fā)揮,超級(jí)表的設(shè)計(jì)省去了不少聯(lián)表查詢(xún)邏輯,大大簡(jiǎn)化了業(yè)務(wù)層的開(kāi)發(fā)工作。接下來(lái),我們也期待在行內(nèi)挖掘出更多 TDengine 的應(yīng)用場(chǎng)景。



互聯(lián)網(wǎng).png)



-1.png)




.png)


證.png)


伙伴.png)
伙伴.png)
伙伴.png)



