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