TiDB 在安信证券资产中心与极速交易场景的实践
本文根據(jù)安信證券資深數(shù)據(jù)庫(kù)架構(gòu)師李軻在 DevCon 2022 上的分享整理,主要講述了 TiDB 在安信證券的資產(chǎn)中心與極速交易場(chǎng)景的實(shí)踐經(jīng)驗(yàn)。主要包括三部分內(nèi)容:第一是國(guó)產(chǎn)化信創(chuàng)改造總體情況,第二是 TiDB 在安信證券的一些實(shí)踐情況,第三是實(shí)踐過(guò)程中我們遇到一些問(wèn)題的反饋和建議。
安信證券股份有限公司(以下簡(jiǎn)稱“安信證券”)成立于 2006 年 8 月,并先后于 2006 年 9 月、12 月以市場(chǎng)化方式收購(gòu)了原廣東證券、中國(guó)科技證券和中關(guān)村證券的證券類(lèi)資產(chǎn)。安信證券總部設(shè)于深圳,全國(guó)設(shè)立 50 家分公司,320 家營(yíng)業(yè)部和 370 個(gè)營(yíng)業(yè)網(wǎng)點(diǎn)。安信證券現(xiàn)為全牌照綜合類(lèi)券商,多項(xiàng)業(yè)務(wù)排名進(jìn)入全國(guó)前列,連續(xù) 10 年獲得 A 類(lèi) A 級(jí)以上行業(yè)分類(lèi)評(píng)級(jí),其中 2011 年至 2013 年達(dá)到行業(yè)最高的 A 類(lèi) AA 級(jí)。2020、2021 年安信證券連續(xù)獲評(píng) A 類(lèi) AA 級(jí)。
今天分享的議題主要是 TiDB,所以就給大家介紹一下 TiDB 這個(gè)產(chǎn)品,TiDB 是原生分布式數(shù)據(jù)庫(kù)架構(gòu)設(shè)計(jì),是由 PD 以及 TiDB 和 TiKV 組件組成。PD 層主要是作為數(shù)據(jù)調(diào)度、事務(wù)調(diào)度以及 TiKV 的元數(shù)據(jù)的存儲(chǔ)。TiDB 層是無(wú)狀態(tài)的 SQL 計(jì)算引擎,因?yàn)樗菬o(wú)狀態(tài)的,所以對(duì)于后期的擴(kuò)展需求有良好的支持。第三層的 TiKV 負(fù)責(zé)具體的數(shù)據(jù)落地存儲(chǔ),TiKV 節(jié)點(diǎn)之間通過(guò) Raft 協(xié)議進(jìn)行數(shù)據(jù)同步,所以 TiDB 整體架構(gòu)是以 TiDB 作為 SQL 計(jì)算引擎,TiKV 作為落地存儲(chǔ)的存算分離架構(gòu)。
安信證券的國(guó)產(chǎn)化改造的架構(gòu)選型,服務(wù)器采用了 Taishan 服務(wù)器,底座我們是選用了鯤鵬 920 CPU 搭載運(yùn)行的是麒麟 V10 操作系統(tǒng),在上面運(yùn)行分布式數(shù)據(jù)庫(kù) TiDB,整體架構(gòu)是基于 ARM 體系。在硬盤(pán)的選擇上,因?yàn)?TiDB 對(duì)讀寫(xiě)性能要求比較高,所以在 TiKV 和 PD 節(jié)點(diǎn)選擇了額外的 NVMe 盤(pán)作為存儲(chǔ),TiDB 節(jié)點(diǎn)使用了傳統(tǒng)的 SSD。
下面來(lái)介紹 TiDB 實(shí)踐具體的應(yīng)用案例。第一個(gè)是安信客戶資產(chǎn)中心系統(tǒng),這個(gè)系統(tǒng)是一個(gè)能夠覆蓋全賬戶類(lèi)型、全產(chǎn)品、全交易行為(1500 多種不同交易行為)、所有交易狀態(tài)(20 多種交易狀態(tài))的數(shù)據(jù)共享中心,業(yè)務(wù)范圍主要是滿足客戶的查詢賬戶資產(chǎn)以及了解投資收益的各種場(chǎng)景需求,用數(shù)據(jù)幫助客戶完成自我驅(qū)動(dòng)的財(cái)富管理,覆蓋了公司 700萬(wàn)+ 的全用戶數(shù)據(jù),服務(wù)查詢性能平均響應(yīng)時(shí)間在 50 毫秒以內(nèi)。這個(gè)系統(tǒng)的改造訴求主要是高可用、穩(wěn)定、落地持久存儲(chǔ)這些方面的需求。
整個(gè)項(xiàng)目的改造歷程分為四個(gè)階段,第一階段是在 2021 年一季度我們做了可行性分析和驗(yàn)證,包括一些 TiDB 集群性能的初步驗(yàn)證,還有一些數(shù)據(jù)的同步延時(shí)。在去年一年我們做了總體的技術(shù)方案設(shè)計(jì),包括初步的開(kāi)發(fā)設(shè)計(jì)、并行驗(yàn)證、初步的系統(tǒng)上線、業(yè)務(wù)的初步連通性驗(yàn)證和具體實(shí)施。在 2022 年一季度,我們做了下游系統(tǒng)的改造,包括一些業(yè)務(wù)代碼以及系統(tǒng)對(duì)接等方面的開(kāi)發(fā)。在 2022 年底我們已經(jīng)完成了全部流量切換和備中心搭建。
可以看到這套系統(tǒng)的改造前后,主要是針對(duì)日間變化數(shù)據(jù)這套原來(lái)基于 Lamda 技術(shù)架構(gòu)做了改造,現(xiàn)在換成基于 TiDB 技術(shù)架構(gòu),下圖表示具體的數(shù)據(jù)鏈路改造的變化。
左側(cè)初始架構(gòu)是從 OGG 到 kafka 再到 Spark Streaming 的流式處理,最后到 redis 進(jìn)行落地存儲(chǔ)的消息流處理模式架構(gòu), 右側(cè)則是改造后的由四個(gè)組件現(xiàn)在簡(jiǎn)化成由 AR 數(shù)據(jù)導(dǎo)入導(dǎo)出的同步工具,再最終落地到 TiDB 進(jìn)行數(shù)據(jù)存儲(chǔ)。
改造的目的主要是出于五個(gè)方向考慮,總體也可以分為運(yùn)維角度和業(yè)務(wù)兩個(gè)角度。
第一,降低運(yùn)維難度。原架構(gòu)的數(shù)據(jù)鏈路比較長(zhǎng),設(shè)計(jì)上是從原來(lái)的柜臺(tái) DB 到 OGG 然后再到一系列的大數(shù)據(jù)組件,最后落地到 redis。隨著組件的增多,出問(wèn)題的概率會(huì)比較大一點(diǎn),并且對(duì)運(yùn)維人員技術(shù)棧的儲(chǔ)備要求較高,后續(xù)的運(yùn)維難度也比較大。大數(shù)據(jù)開(kāi)源組件的特性在使用中有可能造成在一些業(yè)務(wù)場(chǎng)景數(shù)據(jù)的丟失,會(huì)影響到客戶的使用體驗(yàn)。現(xiàn)在升級(jí)改造之后,數(shù)據(jù)鏈路換為柜臺(tái) DB 到 AR 數(shù)據(jù)同步工具,然后再落入到 TiDB ,極大地簡(jiǎn)化了一個(gè)數(shù)據(jù)流轉(zhuǎn)鏈路,也簡(jiǎn)化了技術(shù)架構(gòu),相較之前運(yùn)維也較簡(jiǎn)便。TiDB 是一個(gè)關(guān)系型數(shù)據(jù)庫(kù),對(duì) DBA 來(lái)說(shuō)運(yùn)維技術(shù)的過(guò)渡轉(zhuǎn)換也是十分方便的,加上 TiDB 的強(qiáng)一致性也可以保障寫(xiě)入數(shù)據(jù)的高可靠。
第二,性能容量提升。原有架構(gòu)以 redis 作為最終數(shù)據(jù)落地存儲(chǔ),設(shè)計(jì)初始更多的是基于高可用的出發(fā)點(diǎn)進(jìn)行設(shè)計(jì),用了哨兵模型進(jìn)行部署。而證券行業(yè)特點(diǎn)使流量負(fù)載和流量峰值很難預(yù)測(cè),原有的架構(gòu)設(shè)計(jì)在一些業(yè)務(wù)峰值的數(shù)據(jù)承載以及性能上會(huì)有一定的瓶頸,特別是在數(shù)據(jù)峰值比較大的時(shí)候,如果需要擴(kuò)展,對(duì)架構(gòu)的改動(dòng)較大,風(fēng)險(xiǎn)也相應(yīng)提高。原有架構(gòu)在線水平橫向擴(kuò)展能力上不足,缺少對(duì)逐漸增加的業(yè)務(wù)流量承載能力。TiDB 可以支持在線水平彈性擴(kuò)展,最主要的特點(diǎn)就是彈性擴(kuò)展對(duì)業(yè)務(wù)是無(wú)感知的,如果說(shuō)缺少計(jì)算方面的能力,那么直接擴(kuò)展 TiDB 節(jié)點(diǎn)即可,如果數(shù)據(jù)量增多,可以直接擴(kuò)展 TiKV ,并且擴(kuò)展只需增加節(jié)點(diǎn)數(shù),不需要對(duì)原有架構(gòu)進(jìn)行改動(dòng)。
第三,縮短應(yīng)急處理周期。之前的架構(gòu)因?yàn)榇髷?shù)據(jù)組件比較多,特別是 kafka 的消費(fèi)以及重試機(jī)制,如果出現(xiàn)問(wèn)題的話,因?yàn)槠淞魇郊軜?gòu)設(shè)計(jì),出現(xiàn)故障的時(shí)候第一我們要定位,第二在時(shí)間點(diǎn)的處理方式上我們可能會(huì)基于更早的時(shí)間點(diǎn)去進(jìn)行消息重放,需要有一定的時(shí)間去進(jìn)行消息處理,從而進(jìn)一步拉長(zhǎng)應(yīng)急處理周期,降低故障處理速度,我們發(fā)現(xiàn)在一些應(yīng)急處理場(chǎng)景并沒(méi)有達(dá)到預(yù)期。改造后,在出現(xiàn)故障的時(shí)候可以通過(guò) AR 導(dǎo)數(shù)工具快速將指定時(shí)間的數(shù)據(jù)恢復(fù)到下游 TiDB,能在很短的時(shí)間內(nèi)將業(yè)務(wù)恢復(fù),提高系統(tǒng)的運(yùn)維連續(xù)性和可用性。
前三點(diǎn)主要是從運(yùn)維角度出發(fā)的,后兩點(diǎn)更多是從業(yè)務(wù)和開(kāi)發(fā)角度去進(jìn)行改造。
也就是第四點(diǎn),簡(jiǎn)化數(shù)據(jù)流轉(zhuǎn)復(fù)雜度。之前是使用 redis 作為最終的數(shù)據(jù)落地存儲(chǔ),這塊第一我們?cè)谝婚_(kāi)始設(shè)計(jì)的時(shí)候沒(méi)有打算做長(zhǎng)期的存儲(chǔ)保留,而源數(shù)據(jù)端柜臺(tái) DB 是傳統(tǒng)型關(guān)系數(shù)據(jù)庫(kù),例如 DB2、Oracle 以及 MySQL,從柜臺(tái)數(shù)據(jù)同步到 redis 會(huì)經(jīng)過(guò)一些數(shù)據(jù)轉(zhuǎn)換,從結(jié)構(gòu)化數(shù)據(jù)轉(zhuǎn)換到 KV 結(jié)構(gòu)數(shù)據(jù),對(duì)于下游的開(kāi)發(fā)、設(shè)計(jì)也會(huì)增加了復(fù)雜度。現(xiàn)在轉(zhuǎn)為 TiDB 后,同樣都是關(guān)系型數(shù)據(jù)庫(kù)架構(gòu),從柜臺(tái) DB 到 TiDB 的數(shù)據(jù)結(jié)構(gòu)對(duì)于開(kāi)發(fā)團(tuán)隊(duì)來(lái)說(shuō)沒(méi)有什么太大的區(qū)別,直接進(jìn)行開(kāi)發(fā)使用,簡(jiǎn)化數(shù)據(jù)流轉(zhuǎn)復(fù)雜度,提高開(kāi)發(fā)的靈活度。
第五點(diǎn),支持歷史查詢以及復(fù)雜分析。隨著業(yè)務(wù)發(fā)展不斷增加的需求,例如報(bào)表分析等。原來(lái)的架構(gòu)無(wú)法滿足我們將來(lái)的一些復(fù)雜分析以及客戶的特定需求,業(yè)務(wù)痛點(diǎn)基于原有架構(gòu)很難去解決。改造成 TiDB 之后,首先單集群能夠支持 200TB 以上的數(shù)據(jù)量,可以進(jìn)行歷史數(shù)據(jù)的長(zhǎng)期存儲(chǔ), TiFlash 分析引擎可以很好地支持復(fù)雜分析,OLTP 和 OLAP 事務(wù)分離,也可以跟我們的大數(shù)據(jù)棧進(jìn)行無(wú)縫銜接,支持后續(xù)業(yè)務(wù)發(fā)展。
接下來(lái)我們來(lái)看實(shí)時(shí)資產(chǎn)項(xiàng)目的部署架構(gòu),2022 年南方主中心生產(chǎn)上線,每臺(tái)機(jī)器上部署了兩個(gè) TiKV,是一個(gè) 32 的架構(gòu),PD 和 TiDB 采用混合部署,也是 3(1PD*2TiDB) 的架構(gòu)設(shè)計(jì),在 TiDB Server上層做了 HAProxy ,負(fù)責(zé)流量的接入以及負(fù)載均衡的調(diào)度。2022 年底已完成部署深圳備中心。TiDB 數(shù)據(jù)主要是通過(guò) binlog 方式將主中心的數(shù)據(jù)進(jìn)行同步。
以上就是客戶資產(chǎn)中心系統(tǒng)的改造總體情況,接下來(lái)介紹 ATP 極速交易系統(tǒng)。
ATP 極速交易系統(tǒng)作為安信證券首批的交易系統(tǒng)改造是比較慎重的。對(duì)這個(gè)項(xiàng)目的系統(tǒng)改造要求也比較特殊,這套系統(tǒng)改造是一個(gè)全面的國(guó)產(chǎn)化改造,要支持國(guó)產(chǎn)化服務(wù)器、操作系統(tǒng)甚至是路由器,包括一些前端應(yīng)用全部都是國(guó)產(chǎn)化的設(shè)計(jì)。作為交易系統(tǒng)所以改造的最終訴求就是適配性好、業(yè)務(wù)改造簡(jiǎn)單,而源端的數(shù)據(jù)庫(kù)原來(lái)使用的是 MySQL,TiDB 對(duì) MySQL 的兼容性好,可以降低原有開(kāi)發(fā)團(tuán)隊(duì)的適配難度,只要把數(shù)據(jù)直接導(dǎo)入再進(jìn)行相應(yīng)的適配開(kāi)發(fā)。交易系統(tǒng)的定級(jí)也需要滿足證券行業(yè)的兩地三中心的技術(shù)要求。
ATP 的整體項(xiàng)目進(jìn)度還處在上線及試用階段,預(yù)計(jì)要在 24 年中才會(huì)根據(jù)改造進(jìn)度和業(yè)務(wù)需求進(jìn)行大規(guī)模的客戶遷移和流量接管。
ATP 極速交易業(yè)務(wù)架構(gòu)是采用三中心部署。項(xiàng)目比較有特點(diǎn)的地方就是它是一個(gè)自底向上全國(guó)產(chǎn)化方案,一般的項(xiàng)目改造可能只是針對(duì)服務(wù)器以及數(shù)據(jù)庫(kù)進(jìn)行替換。而 ATP 系統(tǒng)是從底層網(wǎng)絡(luò)的交換機(jī)到服務(wù)器以及 CPU,還有操作系統(tǒng)和數(shù)據(jù)庫(kù)全部采用產(chǎn)品。在上層應(yīng)用,也采用華銳的 ATP 國(guó)產(chǎn)化版本,包括機(jī)構(gòu)交易平臺(tái)和分布式高性能計(jì)算平臺(tái)。
這套系統(tǒng)主中心的應(yīng)用組件采用主備高可用部署方式,組件間實(shí)時(shí)同步保持強(qiáng)一致性,只要有單點(diǎn)故障的出現(xiàn),可以實(shí)現(xiàn)自動(dòng)切換,滿足 RPO=0,RTO<10 秒的要求。也能支持系統(tǒng)的水平擴(kuò)展,作為一個(gè)極速交易系統(tǒng),核心訴求就是快,進(jìn)行國(guó)產(chǎn)化改造之后,需要保證交易時(shí)延也要與原來(lái)的系統(tǒng)一致。所以在低時(shí)延這塊,也能做到微秒級(jí)的全鏈路時(shí)延。
接下來(lái)看具體的部署架構(gòu)。以南方主中心,深圳科技園備中心,上海金橋?yàn)?zāi)備中心形成一個(gè)兩地三中心,一主兩備的級(jí)聯(lián)部署。備中心和災(zāi)備中心的配置類(lèi)數(shù)據(jù)是通過(guò) TiDB 本身數(shù)據(jù)庫(kù)的 binglog,以異步同步的方式進(jìn)行數(shù)據(jù)同步。考慮到時(shí)延和性能, 各機(jī)房會(huì)處理自己的交易類(lèi)數(shù)據(jù),然后直接落盤(pán)到本地庫(kù),這樣可以保證交易數(shù)據(jù)快速地入庫(kù)以及對(duì)外提供服務(wù)。
在網(wǎng)絡(luò)環(huán)境上采用了華為的交換機(jī),接入交換機(jī)是采用雙機(jī)的組網(wǎng),配置 V-STP 模式對(duì)外提供服務(wù),同時(shí)配置了雙活網(wǎng)關(guān),對(duì)于業(yè)務(wù)網(wǎng)絡(luò)來(lái)說(shuō),把交換機(jī)鏈路單獨(dú)劃分出一個(gè) VLAN,專(zhuān)門(mén)用來(lái)業(yè)務(wù)網(wǎng)絡(luò)使用。交換機(jī)三層與核心交換機(jī)進(jìn)行互聯(lián),通過(guò)靜態(tài)以及動(dòng)態(tài)路由實(shí)現(xiàn)兩地三中心業(yè)務(wù)的互通。
TiDB 的整體使用收益,我們從兩個(gè)業(yè)務(wù)場(chǎng)景看。第一個(gè)是資產(chǎn)中心,資產(chǎn)中心受益的地方,就是極大地精簡(jiǎn)了數(shù)據(jù)流轉(zhuǎn)鏈路,把原來(lái)多個(gè)大數(shù)據(jù)組件的一套架構(gòu),改造成 TiDB 一個(gè)國(guó)產(chǎn)化數(shù)據(jù)庫(kù),承載的功能不變。數(shù)據(jù)處理流轉(zhuǎn)比較簡(jiǎn)單,從傳統(tǒng)的柜臺(tái)關(guān)系型數(shù)據(jù)庫(kù)到 TiDB 是關(guān)系型到關(guān)系型,對(duì)于開(kāi)發(fā)使用也比較友好。TiDB 提供數(shù)據(jù)的強(qiáng)一致性保證,支持后續(xù)的高并發(fā)聯(lián)合查詢、水平擴(kuò)展、復(fù)雜分析、開(kāi)發(fā)需求等等。對(duì)于極速交易來(lái)說(shuō),TiDB 首先滿足全棧國(guó)產(chǎn)化和全功能兼容的要求,從原來(lái)的 MySQL 切換到 TiDB,功能上和兼容性來(lái)說(shuō)是都是不錯(cuò)的。其次,TiDB 支持兩地三中心的高可用部署,也滿足高可用需求。
最后分享一下 TiDB 在安信證券實(shí)踐過(guò)程中遇到的一些問(wèn)題,以及具體是我們?cè)趺醋龅?#xff0c;希望這些能給大家一些啟發(fā)。
首先第一點(diǎn),就是數(shù)據(jù)讀寫(xiě)熱點(diǎn)。TiDB 的底層存儲(chǔ) TiKV 的數(shù)據(jù)是以 region 為單位進(jìn)行存儲(chǔ),在 region 上按照 key 值有序追加,如果不做特殊處理的話,數(shù)據(jù)會(huì)一路往后面追加,在高并發(fā)場(chǎng)景下比較容易產(chǎn)生讀寫(xiě)的熱點(diǎn)。因?yàn)閿?shù)據(jù)比較集中,讀事務(wù)與寫(xiě)事務(wù)都會(huì)集中在一塊資源上,會(huì)產(chǎn)生讀寫(xiě)熱點(diǎn)。對(duì)于這個(gè)問(wèn)題,我們的建議是在進(jìn)行表結(jié)構(gòu)設(shè)計(jì)時(shí),盡量使用 Auto Random 方式的自增主鍵,把數(shù)據(jù)打散,分散存儲(chǔ),可以減少熱點(diǎn)沖突的現(xiàn)象。
第二點(diǎn)就是 TiDB 內(nèi)部組件資源爭(zhēng)用的現(xiàn)象。這個(gè)場(chǎng)景比較特殊,因?yàn)槲覀兊臉I(yè)務(wù)場(chǎng)景是有很多的 DDL。在大量 DDL 場(chǎng)景操作下,TiDB 的 region cache 可能會(huì)因?yàn)槟承﹥?nèi)在機(jī)制沒(méi)有及時(shí)清理,后續(xù)的 SQL 查詢語(yǔ)句進(jìn)來(lái)的時(shí)候,可能會(huì)找到實(shí)際上已經(jīng)不存在,但是它認(rèn)為沒(méi)有被清理的region。當(dāng)SQL語(yǔ)句發(fā)現(xiàn)數(shù)據(jù)不存在時(shí),就去尋找下一個(gè)可能存在的region,這種情況導(dǎo)致 SQL 執(zhí)行時(shí)間就被不斷拉長(zhǎng),使SQL 執(zhí)行效率下降進(jìn)而影響到集群的其他語(yǔ)句,最終表現(xiàn)形式就是業(yè)務(wù)處理性能下降。我們的處理方式是將 DDL 的應(yīng)用與其中的一個(gè) TiDB server 進(jìn)行綁定,也就是將 DDL 場(chǎng)景以及語(yǔ)句進(jìn)行聚合,盡量爭(zhēng)取是在一個(gè) TiDB server 進(jìn)行處理,然后其他的業(yè)務(wù) 通過(guò) HAProxy 進(jìn)行負(fù)載均衡,把其他的一些讀事務(wù)分發(fā)到其他的 TiDB server 進(jìn)行處理,減少 DDL 事務(wù)與讀事務(wù)之間的影響,從而保障讀性能。
第三就是鎖沖突。大部分企業(yè)都是從傳統(tǒng)的 Oracle、MySQL 以及 DB2 等數(shù)據(jù)庫(kù)進(jìn)行改造。而TiDB 的鎖處理機(jī)制與傳統(tǒng)數(shù)據(jù)庫(kù)不一樣,其同時(shí)存在樂(lè)觀事務(wù)和悲觀事務(wù)。對(duì)于開(kāi)發(fā)團(tuán)隊(duì)來(lái)說(shuō),一些 SQL 的執(zhí)行在原來(lái)數(shù)據(jù)庫(kù)上的執(zhí)行結(jié)果與現(xiàn)有的 TiDB 的執(zhí)行結(jié)果可能會(huì)出現(xiàn)差異。建議在改造遷移的時(shí)候,比如說(shuō)從 MySQL 等數(shù)據(jù)庫(kù)遷移,在開(kāi)發(fā)的時(shí)候要重視開(kāi)發(fā)規(guī)范,比如嚴(yán)格使用事務(wù)顯式聲明,像 begin 加上需要執(zhí)行的SQL語(yǔ)句,加上 commit 的方式,特別是對(duì)于 DML 語(yǔ)句,盡可能保證這個(gè)事務(wù)機(jī)制與原來(lái)的傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)(像 MySQL)一致,減少開(kāi)發(fā)的復(fù)雜度,保證數(shù)據(jù)的準(zhǔn)確性。
寫(xiě)在最后,自主創(chuàng)新之路確實(shí)會(huì)出現(xiàn)許多大大小小的問(wèn)題,這也需要我們一起去協(xié)作解決和攻克這些阻礙。
道阻且長(zhǎng),行則將至。行而不綴,未來(lái)可期。
總結(jié)
以上是生活随笔為你收集整理的TiDB 在安信证券资产中心与极速交易场景的实践的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: puzzle(1321)时间旅人
- 下一篇: 学习andriod开发之 自己开发短信发