TiDB 在國信證券海量資料高併發場景中的實踐
作者介紹
陳培新,參與國信證券基礎平臺研發工作(DevOps、微服務治理、Serverless)
從 0 到 1,國信金太陽引入 TiDB
圖:國信金太陽資料服務架構
圖:賬單 1.0 單庫單表實現方式
這種方式面臨的問題是:業務上,使用者希望查詢更長時間的資料,比如五年,使用單表的話,這個需求是難以滿足的。技術上,資料查詢以及後續的更新壓力大,難以擴充套件,有時候會出現資料更新出錯,第二天使用者來查詢的時候,查到的資料就不準確了。為了應對這些業務和技術難點,國信在賬單 2.0 版本使用 sharding-jdbc 來做分庫分表。在引入這個技術的時候,我們也聽說了 TiDB,考慮到 證券業務對穩定性要求較高,當時對 TiDB 穩定性還有一定的擔憂,所以選擇了 sharding-jdbc。做了分庫分表之後,可以支援 5 年帳單的查詢,使用了 16 臺 MySQL,總共分了 512 張表。資料中心與分庫分表是如何進行同步的?資料中心還是和以前每天一樣,先把資料寫到臨時表,轉換服務會配置分庫分表的規則,從臨時表裡面取資料,最後寫到正式表裡面。資料中心有個 ETL 工具,但是它不支援擴充套件,所以就沒有直接寫入到正式表。
圖:賬單 2.0 分庫分表實現方式
大概跑了兩年時間,我們發現了新問題,分庫分表雖然可以滿足業務需求,但在擴充套件性方面有很大的約束,這些約束包括:第一,欄位擴充套件困難,我們分了 512 張表,如果要有新業務上來,需要新增一個欄位,這個時候 DBA 就會很痛苦,需要到每個分表新增欄位。第二,擴容極其麻煩,資料一開始預估不準確的話,後面分庫分表的規則就一定要變,從一開始 512 張表要變到再乘以 2,變到一千多張表,DBA 遷移的工作非常繁雜,而且很容易出錯。第三,同步還需要中間表,所以資料同步的時間也還是一樣的慢,並且制約系統上線時間。第四,分表的定時建立跟清理也比較繁瑣,每天會將一些日表刪掉,比如五年前的表,然後還要去建立第二天的表,在開發的時候,始終是要使用這個定時器來做清理和建立。第五,運維方面,也要運維多個資料庫。
圖:賬單 3.0 TiDB 分散式資料庫實現方式
接下來談談一年多來 TiDB 相關的使用心得。從開發角度來看,首先是大資料量刪除,一開始沒有經驗,還是按照以前老的套路,比如要刪除指定某一天的資料,直接就是 DELETE SQL WHERE = “某一天”,當時是週六,運維告警顯示 TiDB 的機器依次逐個地掛掉,經排查發現是 DELETE SQL 涉及的資料量太大了。後續把事務大小調到 10G,TiDB 機器的記憶體擴充套件到 64G,這部分是系統層面的擴充套件;另外一方面我們也在應用程式側做對應改造,進行分批的刪除。在有大資料刪除的情況下,可考慮使用 Range 分割槽表,直接 truncate 或 drop 分割槽即可。
第二個經驗是對新上 TiDB 的業務,儘量要使用 AUTO-RANDOM 作為主鍵,對那種持續大量的插入場景,很大情況下可以避免插入的熱點。對於多機房資料同步,TiDB 需要主鍵或者唯一索引,無主鍵或者唯一索引會造成同步程式的 OOM。在表已有大量資料的時候,如果要加這個主鍵,整個過程也會比較麻煩。
三地高可用容災架構的實現
一開始只在國信東莞主機房作為試點去做 TiDB 的部署,後續運維要求 TiDB 要做容災部署相關的工作,應用要實現三地的高可用多活。之前每個機房的應用是訪問自己本地的 TiDB ,每個季度會做災備演練,驗證東莞整個主機房故障之後,異地上海與同城福田災備的可用性。
PingCAP 的老師一開始給了三個方案。第一個方案是最簡單直白的,在三個機房都部署一套單獨的 TiDB 叢集。東莞機房做讀寫,用 TiCDC 或者 binlog 將對應的資料同步到其他兩個機房的災備叢集。這個方案的優點是比較簡單,做災備演練的時候,如果東莞主機房掛了,其他兩個機房的應用基本上不用做什麼操作,還是可以繼續使用。這個方案存在問題是副本數比較大,需要有 9 個副本,同步的時延可能也會大一點。
圖:多機房方案對比
經過三個方案的對比,最後國信還是採用了最簡單的 binlog 同步方案,每個機房部署一個 TiDB 叢集,當然這也是根據業務特點來實現的。國信的業務基本上使用查詢,不會存在多個機房同時寫入,所以最後採用了這個最簡單的方法。在多機房部署實現的過程中做了一些遷移匯入的工作:一開始 TiDB 只在東莞機房部署,因為對於 TiDB 的使用不熟悉,有一些業務表是沒有加主鍵或者沒有唯一索引。福田機房搭建新的 TiDB 叢集之後,我們發現在做兩地叢集同步的時候,同步器就直接 OOM 了,這是因為沒有加主鍵或唯一索引導致的。當時有一張最大的表已經到 60 多億了,如果直接在表上加主鍵或者唯一索引的話其實是不可能的。
服務可觀察的探索
最後談談在金太陽
服務可觀察
方面的探索。應用在使用了微服務架構之後,部署的節點會非常多,而且呼叫鏈整個過程也非常複雜,這個時候想定位一個問題就會很複雜,根據業界當前比較流行的 “服務可觀察” 概念我們做了一個應用來輔助開發的問題定位。這個 “服務可觀察應用” 主要是包含三個部分,一個是日誌,第二個是指標,最後一個是跟蹤鏈。我們針對日誌部分做了增強,把系統的請求和響應日誌通過 ETL 工具轉換到 TiDB 裡面,然後做了視覺化相關的工作。
圖:金太陽服務的可觀察性
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69994146/viewspace-2853328/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- TiDB 在安信證券資產中心與極速交易場景的實踐TiDB
- 漫談OB | OceanBase 在海量資料和高併發下的應用實踐
- MySQL在大資料、高併發場景下的SQL語句優化和"最佳實踐"MySql大資料優化
- TiDB 在咪咕雲原生場景下的實踐TiDB
- 高併發場景下JVM調優實踐之路JVM
- OceanBase 在證券行業基金資管場景落地實踐與解決方案行業
- TiDB 在微眾銀行核心批量場景的實踐TiDB
- 存算分離實踐:JuiceFS 在中國電信日均 PB 級資料場景的應用UI
- 海量資料和高併發的解決方案
- TiDB 7.1 多租戶在中泰證券中的應用TiDB
- RocketMQ實戰--高併發秒殺場景MQ
- 安信證券資管清算重要業務在原生分散式資料庫的創新實踐分散式資料庫
- 簡述高併發解決思路-如何處理海量資料(中)
- 併發場景下資料寫入功能的實現
- 海量資料的併發處理
- Flink 在中泰證券的實踐與應用
- 紫光西部資料助力中信建投證券實現海量資料儲存創新
- 618 Tech Talk|高併發場景下的資料訪問速度如何保障?
- Flink CDC + Hudi 海量資料入湖在順豐的實踐
- BES 在大規模向量資料庫場景的探索和實踐資料庫
- 新一代資料庫TiDB在美團的實踐資料庫TiDB
- 中移物聯網在車聯網場景的 TiDB 探索和實現TiDB
- 開源實踐 | OceanBase 在紅象雲騰大資料場景下的實踐與思考大資料
- Nginx Ingress 高併發實踐Nginx
- Elasticsearch在華泰證券內部的應用實踐Elasticsearch
- 聚焦證券行業資料安全,全場景方案助力能力提升行業
- TiDB 分散式資料庫在轉轉公司的應用實踐TiDB分散式資料庫
- TiDB 在小米的應用實踐TiDB
- TiDB 在特來電的實踐TiDB
- 雲原生技術在離線交付場景中的實踐
- 海量資料架構下如何保證Mycat的高可用?架構
- 國密在車聯網安全認證場景中的應用
- 消費券的中國實踐:我國消費券發放的現狀、效果和展望研究
- 高併發場景下的會話服務資料讀寫設計思路(附具體實施方案)會話
- 信達證券:2021年中國證券行業策略報告(附下載)行業
- TDengine的實踐場景
- 證券圖譜平臺國產化替代實踐
- 中國證券業協會:2022證券公司數字化轉型實踐報告及案例彙編