TDSQL是騰訊提供的一套完整的MySQL數(shù)據(jù)庫(kù)集群化管理解決方案,作為私有云TStack平臺(tái)重要的數(shù)據(jù)庫(kù)產(chǎn)品能力,旨在解決高可用、高性能、分布式、配套設(shè)施等方面問(wèn)題。
TDSQL除了在騰訊內(nèi)部有大量的使用場(chǎng)景,在外部市場(chǎng)中也有諸多應(yīng)用場(chǎng)景;2014年被WeBank選中,作為其核心交易系統(tǒng)的數(shù)據(jù)庫(kù)解決方案,以私有云方式交付;2015年,在騰訊云上正式推出。目前已經(jīng)為500+機(jī)構(gòu)提供數(shù)據(jù)庫(kù)的公有云及專有云服務(wù),客戶覆蓋計(jì)費(fèi)、第三方支付、銀行、保險(xiǎn)、互聯(lián)網(wǎng)金融、物聯(lián)網(wǎng)、互聯(lián)網(wǎng)+、政務(wù)等領(lǐng)域。
**TDSQL私有云版本的核心思路是:標(biāo)準(zhǔn)化、模塊化、豐儉由人!**
例如TDSQL的模塊設(shè)計(jì)是充分解耦的,彼此之間通過(guò)接口銜接,客戶可以自行組裝或用自己現(xiàn)有模塊替換;又比如在設(shè)計(jì)部署架構(gòu)時(shí),客戶可在成本(自身數(shù)據(jù)中心建設(shè)情況),業(yè)務(wù)數(shù)據(jù)安全可靠性、業(yè)務(wù)可用性三者之間做不同的平衡選擇,可以做到N地N中心的部署,數(shù)據(jù)副本亦可做到一主N備(N>=0);甚至在設(shè)計(jì)讀寫分離機(jī)制時(shí),只讀賬戶可根據(jù)主備延遲狀態(tài),選擇是從備機(jī)讀取,還是從主機(jī)讀取,還是直接返回錯(cuò)誤;數(shù)據(jù)庫(kù)引擎,TDSQL也提供MariaDB、Percona、MySQL社區(qū)版三個(gè)版本支持。類似這樣的設(shè)計(jì)貫穿TDSQL私有云版本的整個(gè)研發(fā)過(guò)程,以給予客戶足夠的靈活性和選擇權(quán)。
# TDSQL關(guān)鍵特性
** 數(shù)據(jù)可靠性**
在各種異常災(zāi)難情況下,例如主機(jī)故障、網(wǎng)絡(luò)故障、數(shù)據(jù)中心故障等,都能確保數(shù)據(jù)安全可靠。
?**系統(tǒng)可用性**
基于數(shù)據(jù)多副本,系統(tǒng)保證在各種異常災(zāi)難情況下,可根據(jù)客戶不同的數(shù)據(jù)可靠性級(jí)別,快速恢復(fù)可用,把不可用時(shí)長(zhǎng)降至最低。強(qiáng)同步數(shù)據(jù)節(jié)點(diǎn)之間自動(dòng)切換,RTO為40s,RPO為0。
** 高性能**
對(duì)MySQL三大分支(MariaDB、Percona、MySQL community)深度優(yōu)化,使得在主備網(wǎng)絡(luò)延遲5ms的情況下,能做到跨IDC強(qiáng)同步性能相較于異步同步零損耗;同時(shí)sysbench OLTP TPS數(shù)據(jù)是原生版本185%。
**水平擴(kuò)展性**
提供Auto Sharding機(jī)制,可實(shí)現(xiàn)實(shí)時(shí)在線無(wú)縫擴(kuò)容,確保集群性能和容量呈線性增長(zhǎng);同時(shí)提供健壯的分布式事務(wù)機(jī)制,在性能損耗極低(損耗30%)的情況下,大大降低了傳統(tǒng)業(yè)務(wù)遷移分布式架構(gòu)的難度。
**自動(dòng)化運(yùn)營(yíng)**
提供完善的運(yùn)營(yíng)體系,自動(dòng)化運(yùn)營(yíng)發(fā)布平臺(tái),機(jī)器資源自動(dòng)管理,智能監(jiān)控平臺(tái)及展示,數(shù)據(jù)庫(kù)智能診斷等。
**配套設(shè)施**
TDSQL還提供Binlog訂閱、安全審計(jì)、冷備系統(tǒng)、多源同步等配套系統(tǒng),供客戶選擇。
# 核心架構(gòu)
**Set機(jī)制**
TDSQL所有的高可用機(jī)制均是在Set之內(nèi)實(shí)現(xiàn),每個(gè)Set之內(nèi)多個(gè)數(shù)據(jù)節(jié)點(diǎn)(1主N備),主備之間可以是基于Raft協(xié)議的強(qiáng)同步復(fù)制機(jī)制,也可以是異步復(fù)制機(jī)制。在主機(jī)出現(xiàn)故障的情況下,在調(diào)度模塊的協(xié)助下,將挑選備機(jī)按照規(guī)定流程提升為主機(jī),快速恢復(fù)業(yè)務(wù),全程無(wú)需人工干預(yù)。在我們常規(guī)的使用過(guò)程中,通常是建議1主2備,主備之間強(qiáng)同步,這樣在主節(jié)點(diǎn)故障情況下,能確保自動(dòng)切換,RTO為40s,RPO為0。
**水平擴(kuò)容**
分布式版本對(duì)外呈現(xiàn)為一個(gè)完整的邏輯實(shí)例,后端數(shù)據(jù)實(shí)際上是分布在若干Set上(獨(dú)立的物理節(jié)點(diǎn))組成。邏輯實(shí)例屏蔽了物理層實(shí)際存儲(chǔ)規(guī)則,業(yè)務(wù)無(wú)需關(guān)心數(shù)據(jù)層如何存儲(chǔ),也無(wú)需在業(yè)務(wù)代碼中集成拆分方案或再購(gòu)買中間件,只需要像使用集中式(單機(jī))數(shù)據(jù)庫(kù)一樣使用即可。同時(shí)支持實(shí)時(shí)在線擴(kuò)容,擴(kuò)容過(guò)程對(duì)業(yè)務(wù)完全透明,無(wú)需業(yè)務(wù)停機(jī),擴(kuò)容時(shí)僅部分分片存在秒級(jí)的只讀(只讀是實(shí)際在做數(shù)據(jù)校驗(yàn)),整個(gè)集群不會(huì)受影響。
**分布式事務(wù)**
TDSQL基于MySQL的XA實(shí)現(xiàn)了分布式事務(wù)機(jī)制,對(duì)各種異常處理做了充分的魯棒測(cè)試(發(fā)現(xiàn)了10多個(gè)XA相關(guān)的Bug并進(jìn)行修復(fù)提交到社區(qū),并做了大量性能方便的改進(jìn),擴(kuò)展了事務(wù)狀態(tài)方面的統(tǒng)計(jì)信息以實(shí)現(xiàn)全局分布式死鎖檢測(cè)),且相對(duì)于單機(jī)事務(wù),性能損失僅30%。
**高級(jí)特性**
**二級(jí)分區(qū)**
第一級(jí)即我們常說(shuō)的水平拆分,原理是使用HASH算法,使得數(shù)據(jù)能均勻的分散到后端的所有節(jié)點(diǎn);第二級(jí)分區(qū)使用RANGE算法,使得相關(guān)的數(shù)據(jù)能夠落在一個(gè)邏輯分區(qū),例如可以按時(shí)間分區(qū)(類似每天每周每月一個(gè)分區(qū)等),亦可以按業(yè)務(wù)特性分區(qū)(類似每個(gè)省市一個(gè)分區(qū)等)等等。二級(jí)分片可以均衡數(shù)據(jù)分布和訪問(wèn),為快速一鍵擴(kuò)容提供基礎(chǔ)支撐,也可以滿足快速刪除數(shù)據(jù)等場(chǎng)景。
**讀寫分離**
基于數(shù)據(jù)庫(kù)訪問(wèn)賬號(hào)的讀寫分離方案,客戶能基于業(yè)務(wù)需求對(duì)賬號(hào)設(shè)定相關(guān)參數(shù),以確保既不會(huì)讀取到過(guò)舊的數(shù)據(jù),也不會(huì)影響寫業(yè)務(wù),且業(yè)務(wù)無(wú)需改動(dòng)代碼即可實(shí)現(xiàn)讀寫分離。這可以極大的降低業(yè)務(wù)運(yùn)營(yíng)成本。
此外,TDSQL還有全局唯一數(shù)字序列、統(tǒng)一參數(shù)管理、兼容MySQL函數(shù),熱點(diǎn)更新等眾多高級(jí)特性,可滿足各類業(yè)務(wù)需求。
**內(nèi)核優(yōu)化**
TDSQL在數(shù)據(jù)庫(kù)內(nèi)核這塊的優(yōu)化,主要集中在數(shù)據(jù)復(fù)制、性能、安全性等方面。
**強(qiáng)同步機(jī)制**
TDSQL針對(duì)金融場(chǎng)景的強(qiáng)同步機(jī)制,有效解決了MySQL原生半同步機(jī)制的問(wèn)題:性能降低以及超時(shí)退化為異步。目前TDSQL在強(qiáng)同步模式下,系統(tǒng)的并發(fā)量(TPS/QPS)與異步模式已無(wú)差別,基本能做到性能無(wú)損失。
**性能優(yōu)化**
1、我們對(duì)MariaDB/Percona的線程池調(diào)度算法進(jìn)行了優(yōu)化,改進(jìn)當(dāng)系統(tǒng)處于重負(fù)載時(shí),查詢和更新請(qǐng)求在線程組間分布不均衡等極端情況。并且能夠更好地利用計(jì)算資源,減少無(wú)謂的線程切換,減少請(qǐng)求在隊(duì)列中的等待時(shí)間,及時(shí)處理請(qǐng)求。
2、組提交(Group Commit)的異步化。工作線程在其會(huì)話狀態(tài)進(jìn)入組提交隊(duì)列后,不再阻塞等待組提交的Leader線程完成提交,而是直接返回處理下一個(gè)請(qǐng)求。
3、InnoDBBuffer Pool使用優(yōu)化。例如全表掃描時(shí),避免占滿InnoDB Buffer Pool,而是只取一塊來(lái)使用。
4、InnoDB在MySQL組提交期間避免與組提交有mutex沖突的活動(dòng),例如InnoDB Purge,降低沖突,以提升性能。
類似的性能優(yōu)化的點(diǎn),還有不少,可能在某些場(chǎng)景下,單個(gè)點(diǎn)效果不明顯,但是集合起來(lái)看,目前性能指標(biāo)整體是不錯(cuò)的。基于Sysbench OLTP測(cè)試結(jié)果,相同的硬件及測(cè)試環(huán)境下,TDSQL性能相比原生版本提升85%。
此外,我們長(zhǎng)期關(guān)注MySQL的三個(gè)分支版本:MariaDB、Percona、MySQL community,對(duì)于社區(qū)的新特性,也會(huì)定期的合入。
**部署方案**
基于成本因素考慮,客戶可根據(jù)自身業(yè)務(wù)數(shù)據(jù)的容災(zāi)要求,以及數(shù)據(jù)中心分布情況,選擇不同的部署方案。TDSQL可以針對(duì)客戶不同的數(shù)據(jù)中心架構(gòu),在數(shù)據(jù)可靠性與可用性上做出權(quán)衡,做到靈活部署。目前常見的兩種部署方案包括:
**兩地三中心**
該方案,ZK分布在兩地的三個(gè)中心內(nèi)。
? ? ?1、主IDC故障不會(huì)丟數(shù)據(jù),自動(dòng)切換到備IDC,此時(shí)蛻化成單個(gè)IDC的強(qiáng)同步。
? ? ?2、僅僅主機(jī)故障,在對(duì)比兩個(gè)同城備節(jié)點(diǎn)及一個(gè)同城Watcher節(jié)點(diǎn)后,切換到數(shù)據(jù)最新的節(jié)點(diǎn),優(yōu)先選擇同IDC的Watcher節(jié)點(diǎn),盡可能減少跨IDC切換。
? ? ?3、備IDC故障,通過(guò)另外一個(gè)城市的ZK能自動(dòng)做出選舉:
? ? ? ? ?a) 備IDC確實(shí)故障,自動(dòng)提升主IDC的Watcher節(jié)點(diǎn)為Slave,由主提供服務(wù)。
? ? ? ? ?b) 主備網(wǎng)絡(luò)不通,與a)一樣的處理方式。
**兩地四中心**
該方案適應(yīng)性最強(qiáng),但是對(duì)機(jī)房數(shù)量要求也高一些。
? ? ? 1、同城三中心集群化部署,簡(jiǎn)化同步策略,運(yùn)營(yíng)簡(jiǎn)單,數(shù)據(jù)可用性、一致性高
? ? ? 2、單中心故障不影響數(shù)據(jù)服務(wù)
? ? ? 3、 深圳生產(chǎn)集群三中心多活
? ? ? 4、 整個(gè)城市故障可以人工切換
# 周邊配套
對(duì)于私有云客戶來(lái)說(shuō),數(shù)據(jù)庫(kù)產(chǎn)品其配套設(shè)施、可維護(hù)性、透明性等對(duì)于客戶來(lái)說(shuō)至關(guān)重要,因?yàn)檫@決定了他們能否及時(shí)發(fā)現(xiàn)問(wèn)題,針對(duì)問(wèn)題能快速的做出變更及應(yīng)對(duì)。所以TDSQL私有云版本,提供完善的周邊配套體系。
**冷備系統(tǒng)**
基于HDFS或其他分布式文件系統(tǒng),可以做到自動(dòng)備份,一鍵恢復(fù),支持物理備份,邏輯備份,增量備份等各種策略。
**消息隊(duì)列**
基于Kafka定制的Binlog訂閱服務(wù)?;谠撓㈥?duì)列,TDSQL還提供了SQL審計(jì)、多源同步(相同表結(jié)構(gòu)的數(shù)據(jù)合并到一張表)等服務(wù)。
**資源管理**
基于cgroup的對(duì)TDSQL實(shí)例進(jìn)行編排,提高機(jī)器資源利用率。
**OSS**
對(duì)TDSQL的所有操作,例如擴(kuò)容、備份、恢復(fù)、手動(dòng)切換、申請(qǐng)(修改/刪除)實(shí)例等操作,均提供統(tǒng)一的HTTPS接口,可以有效自動(dòng)化,降低人肉運(yùn)維的風(fēng)險(xiǎn)。
**數(shù)據(jù)采集**
TDSQL所有的內(nèi)部運(yùn)營(yíng)狀態(tài)或數(shù)據(jù),都能實(shí)時(shí)采集到,業(yè)務(wù)可以基于這些數(shù)據(jù)做定制分析或者構(gòu)建運(yùn)營(yíng)監(jiān)控平臺(tái)。
**監(jiān)控平臺(tái)**
業(yè)務(wù)可以基于數(shù)據(jù)采集模塊采集到的所有數(shù)據(jù),對(duì)接自建的監(jiān)控系統(tǒng),亦可直接使用TDSQL自帶的監(jiān)控系統(tǒng)。
**管理平臺(tái)**
基于以上模塊,TDSQL自帶運(yùn)營(yíng)管理平臺(tái)(內(nèi)部平臺(tái)代號(hào)赤兔),DBA基本上可以通過(guò)該管理臺(tái)進(jìn)行所有常規(guī)的運(yùn)營(yíng)操作,不再需要登錄后臺(tái)。
**審計(jì)模塊**
審計(jì)模塊通過(guò)對(duì)用戶訪問(wèn)數(shù)據(jù)庫(kù)行為的日志采集及分析,用來(lái)幫助客戶事后生成合規(guī)報(bào)告、事故追根溯源,同時(shí)加強(qiáng)內(nèi)外部數(shù)據(jù)庫(kù)網(wǎng)絡(luò)行為記錄,提高數(shù)據(jù)資產(chǎn)安全。
以上這些模塊可以自由組合,沒(méi)有強(qiáng)依賴關(guān)系,客戶也可以通過(guò)TDSQL的提供的接口自行對(duì)接自己現(xiàn)有的平臺(tái)(如監(jiān)控、告警、審計(jì)等)
**寫在最后**
TDSQL經(jīng)過(guò)多年發(fā)展,上面提到的特性,均在騰訊內(nèi)部的海量業(yè)務(wù)實(shí)踐運(yùn)營(yíng)過(guò)程中得到檢驗(yàn),這也是TDSQL對(duì)外版本發(fā)布的基本原則:只有經(jīng)過(guò)現(xiàn)網(wǎng)運(yùn)營(yíng)驗(yàn)證并覺得充分成熟的特性,才會(huì)發(fā)布給客戶。
?
本文摘自 :https://blog.51cto.com/u