深入解讀騰訊云數(shù)據(jù)庫自研內(nèi)核
TXSQL 是騰訊云數(shù)據(jù)庫團隊自研 MySQL 內(nèi)核分支,100%兼容原生 MySQL 版本,針對企業(yè)級的重要場景自研眾多核心特性,如企業(yè)級透明數(shù)據(jù)加密、審計、線程池、熱點更新保護、SQL 限流、快速加列等功能,大幅提升了云數(shù)據(jù)庫的性能和穩(wěn)定性,保證線上穩(wěn)定性的同時,滿足業(yè)務對數(shù)據(jù)庫的各種需求。
TXSQL 的服務對象是公司內(nèi)部用戶和騰訊云上小至數(shù)G大至數(shù)百T的外部客戶,是支撐這些業(yè)務平穩(wěn)運行的關鍵基石,在服務用戶的同時,也打造了騰訊自己的MySQL分支。
TXSQL內(nèi)核研發(fā) 主要包括以下工作:
- 數(shù)據(jù)庫性能調優(yōu);
- 對內(nèi)核進行深度改造,滿足應用需要的性能要求,在活動促銷時保證數(shù)據(jù)庫的平穩(wěn)運行;
- 滿足業(yè)務需要的各種功能需求;
- 實現(xiàn)資源管理需要內(nèi)核支持的功能;
- MySQL DBA 在運維過程中需要的診斷相關的功能;
- MySQL 在運行過程中存在的問題定位并修復影響系統(tǒng)運行的內(nèi)核Bug;
- 保證數(shù)據(jù)庫系統(tǒng)的安全,保證云上用戶數(shù)據(jù)的安全;
TXSQL演進之路?
& 整體架構
TXSQL的演進之路
- 最早的TXSQL是MySQL官方5.1版本,騰訊云數(shù)據(jù)庫內(nèi)核團隊提供了簡單的bugfix。
- 5.5版本到5.6版本,團隊不光是做了適配云平臺的工作,還開發(fā)了許多支持DBA運維方面的工具,包括讀寫方面的優(yōu)化。
- TXSQL5.7版本目前是整個騰訊云數(shù)據(jù)庫服務用量最大的一個版本,加入了許多企業(yè)級的特性,比如審計、壓縮,還有線程池等。同時在5.7版本之后,我們做了云原生數(shù)據(jù)庫TDSQL-C(原CynosDB)的內(nèi)核。
- 最新的TXSQL8.0版本,有了索引的列存引擎,還有AEP新硬件設備引擎優(yōu)化以及更多的特性和優(yōu)化。

TXSQL的整體架構
下圖為TXSQL內(nèi)核的整體架構。客戶端進來之后通過線程池,Server層,然后會訪問存儲引擎層。

存儲引擎層目前支持多種引擎,包括傳統(tǒng)的InnoDB,自主研發(fā)的CStore列存引擎,還包括RocksDB,以及MySQL官方原來就內(nèi)置的MyISAM之類的存儲引擎,這是核心部分。
底下是獨立的高性能SSD(本地存儲磁盤)。審計系統(tǒng),通過團隊基于官方審計API 研發(fā)的審計插件提供審計服務;透明數(shù)據(jù)壓縮插件,提供數(shù)據(jù)加密、解密的企業(yè)級特性;半同步復制插件,通過binlog把數(shù)據(jù)復制到從實例,然后會做一些備份或者是RO實例、只讀實例。
TDSQL-C內(nèi)核整體架構
云原生數(shù)據(jù)庫 TDSQL-C(Cloud Native Database TDSQL-C,TDSQL-C)是騰訊云自研的新一代高性能高可用的企業(yè)級分布式云數(shù)據(jù)庫。融合了傳統(tǒng)數(shù)據(jù)庫、云計算與新硬件技術的優(yōu)勢,100%兼容 MySQL ,實現(xiàn)超百萬級 QPS 的高吞吐,128TB 海量分布式智能存儲,保障數(shù)據(jù)安全可靠。其內(nèi)核的主要特點是存儲和計算分離,快速的彈性擴展能力等。

自研列存引擎
自研列存引擎,服務OLAP復雜場景
數(shù)據(jù)庫中存在兩種典型的業(yè)務訪問場景,一種以在線事務處理為主,稱為OLTP(On-Line Transaction Processing);另一種以在線分析處理為主,稱為OLAP(On-Line Analytical Processing)。OLAP業(yè)務的主要特點是有較多的查詢操作,寫操作占比很低,并且大多數(shù)寫操作是數(shù)據(jù)的批量導入和數(shù)據(jù)的批量刪除或更新。并發(fā)的事務數(shù)相對OLTP要少很多,而且事務的響應時間要求相對比較低。
騰訊自研列式引擎主要是為OLAP場景(數(shù)據(jù)分析場景)提供服務。列存引擎有以下特點:
- 列式存儲:數(shù)據(jù)按列存儲而不是按行存儲;查詢時無需訪問無關列,減少大量 IO
- 高壓縮比:壓縮比平均在10比1,可以大大減少存儲空間
- 快速加載:支持 MySQL 標準的 LOAD 語句;多核并行處理,加載速度可達 INNODB 的 10 倍
- 執(zhí)行引擎:支持查詢?nèi)我舛嗔械慕M合;單節(jié)點可支持百億行記錄的秒級查詢;支持多種JOIN算法,包括HASH JOIN
- 查詢優(yōu)化:查詢時利用多種形式的稀疏索引過濾數(shù)據(jù);維護數(shù)據(jù)的統(tǒng)計信息,聚合類查詢預計算
- MySQL兼容:SQL 語法全面兼容 MySQL 8.0;兼容 MySQL 工具和應用,例如phpMyADmin等;支持XtraBackup 物理備份和恢復。

業(yè)界首創(chuàng)秒改列
業(yè)界首創(chuàng)秒改列等更多企業(yè)級特性服務B端用戶
大家都知道,Instant DDL這個patch也是由騰訊數(shù)據(jù)庫團隊進行研發(fā)并貢獻給官方的,并且官方在8.0提供了這個特性。在騰訊云TXSQL內(nèi)核里不僅支持了這個特性,而且在此基礎上進行了進一步增強。
Instant DDL特性,可以快速增加字段。而修改列也是用戶執(zhí)行比較頻繁的DDL之一,而且此操作會長時間阻塞用戶的讀寫請求,對業(yè)務的影響非常大。TXSQL及TDSQL-C內(nèi)核業(yè)界首創(chuàng),支持了instant modify column功能,達到了秒級修改列的效果。
具體的實現(xiàn)方式是:
- 元數(shù)據(jù)多版本化, 表元數(shù)據(jù)保存列的多個版本信息,用戶只能看到的總是最新的表元數(shù)據(jù)。
- 行記錄增加版本信息對應到不同版本的表元數(shù)據(jù)上。
- 修改列只修改元數(shù)據(jù),修改列的過程中不修改實際的行記錄。
- 行記錄讀取時,老版本記錄會自動轉換為最新版本的記錄。
- 行記錄更新時,老版本記錄會自動更新為最新版本的記錄。

更多企業(yè)級特性服務B端用戶
高可用-物理復制(TDSQL-C內(nèi)核):TDSQL-C內(nèi)核實現(xiàn)了基于redo log的物理復制,同步主從的數(shù)據(jù)頁面修改;復制速度快;主從數(shù)據(jù)保持物理一致。
高可用-秒級RTO:Buffer pool秒級初始化,20倍提升;Crash recovery秒級構建表鎖;并行初始化回滾段(已貢獻官方MySQL),9倍提升;秒級Shutdown。
彈性擴展-Btree一致性讀優(yōu)化(TDSQL-C內(nèi)核):InnoDB的數(shù)據(jù)以Btree方式來組織的,Btree在數(shù)據(jù)的更新過程中會發(fā)生SMO操作(即btree的分裂或合并),優(yōu)化后備庫讀不會被主庫更新產(chǎn)生的SMO操作所阻塞。
性能優(yōu)化方面,面向非易失性存儲進行寫加速、線程綁核、兼容冷熱日志分離管理。最終效果:單機場景,有redolog,性能提升15%;主備場景,有redolog&&binlog,性能提升50+%;同步場景,主機有redolog&&binlog,備機redolog&&relaylog,性能提升60+%近,在sync_relay_log為=1,強同步場景,性能提升2221%。這是基于新硬件的一種專門優(yōu)化,極大提升整體數(shù)據(jù)庫內(nèi)核的性能。
熱點更新:內(nèi)核級解決秒殺場景下的熱點數(shù)據(jù)更新問題;一鍵開啟,用戶無需修改任何應用層SQL。
功能發(fā)布層層把關,未來發(fā)展以穩(wěn)定性為首目前TXSQL系統(tǒng)內(nèi)核的開發(fā),已經(jīng)逐步形成了一個比較完善的研發(fā)體系。體系里面包括需求評估、代碼設計方案、設計方案的評審、代碼開發(fā)、代碼測試、上線之前的評審、灰度,還包括最終上線后的跟蹤。在整體流程上做到了相對完善。
從需求來講,目前大部分需求基本上是來自于用戶在線上碰到的實際問題,騰訊云數(shù)據(jù)庫內(nèi)核團隊進行有針對性的解決。需求到我們這邊之后會進行評估,接著基于需求的優(yōu)先級安排開發(fā)順序以及設計方案的評審。設計方案的評審由資深的內(nèi)核開發(fā)團隊人員來進行。
開發(fā)完之后進行測試,測試是開發(fā)流程中非常重要的一環(huán)。目前一個需求的測試,會包括專有的、有針對性的專項功能測試;上線之前的通用測試;真實模擬云上環(huán)境的一些測試等等。
測試過后灰度上線,邀請客戶來試用,驗證功能的可用性是否符合需求,灰度完之后才會真正上線。上線之后會跟蹤功能的實現(xiàn)情況,遇到bug及時響應解決。
這就是我們從需求到發(fā)布層層把關的整個過程。

數(shù)據(jù)庫內(nèi)核以穩(wěn)定性為主,因為TXSQL目前線上的實例有超過十萬,龐大的實例規(guī)模以及海量用戶,一旦出現(xiàn)問題,后果是不堪設想,所以首先是要做到穩(wěn)定性。在保證穩(wěn)定性的前提下,再去進行特性的研發(fā)和性能優(yōu)化,這樣未來我想應該還是以三大方向為主:1. 保持穩(wěn)定性,客戶線上、線下碰到就是所有問題及時解決。2. 企業(yè)級特性的研發(fā),解決DBA運維當中碰到的比較棘手的問題。3. 性能優(yōu)化,數(shù)據(jù)庫的內(nèi)核性能做到更好更強。
﹀
﹀
﹀

為云而生,云原生數(shù)據(jù)庫TDSQL-C技術突破與演進

云原生數(shù)據(jù)庫TDSQL-C PostgreSQL版內(nèi)核解密
↓↓點擊閱讀原文,了解更多優(yōu)惠
評論
圖片
表情
