此次測試的TDSQL,是由騰訊云數(shù)據(jù)庫團(tuán)隊(duì)、金融云團(tuán)隊(duì)和騰訊TEG團(tuán)隊(duì)共同維護(hù)的金融級分布式架構(gòu)和MySQL內(nèi)核分支的統(tǒng)稱。目前,騰訊90%的金融、計費(fèi)、交易、區(qū)塊鏈等業(yè)務(wù)核心都承載在TDSQL架構(gòu)中,并已成功應(yīng)用于政府、銀行、保險、制造業(yè)、物流、電商等用戶。TDSQL提供專有云、公有云兩種部署方案,可以分配關(guān)系型數(shù)據(jù)庫(CDB)、分布式數(shù)據(jù)庫(DCDB)、分析性數(shù)據(jù)庫(ADB)實(shí)例。
TDSQL強(qiáng)大的性能,離不開軟硬件的共同支持,騰訊云技術(shù)團(tuán)隊(duì)通過對分布式架構(gòu)和數(shù)據(jù)庫內(nèi)核的深度優(yōu)化,同時借助英特爾?先進(jìn)技術(shù),讓TDSQL已經(jīng)成為金融企業(yè)互聯(lián)網(wǎng)轉(zhuǎn)型的一大“利器”。

分布式架構(gòu)與數(shù)據(jù)庫內(nèi)核深度優(yōu)化

與傳統(tǒng)行業(yè)技術(shù)架構(gòu)不同,大型互聯(lián)網(wǎng)企業(yè)更傾向于使用分布式數(shù)據(jù)庫(DCDB),這是因?yàn)榛ヂ?lián)網(wǎng)應(yīng)用大多都面臨著高并發(fā)數(shù)據(jù)處理,海量數(shù)據(jù)存儲的需求;而分布式數(shù)據(jù)庫底層將實(shí)際計算和存儲數(shù)據(jù)的物理表進(jìn)行自動水平拆分,通過讓負(fù)載均勻的分布到每個數(shù)據(jù)庫物理節(jié)點(diǎn)中,有效的提高了數(shù)據(jù)庫的擴(kuò)展能力。目前,騰訊充值及其相關(guān)合作伙伴的日流水量超過150億,托管賬戶接近280個億,而其中類似于春節(jié)紅包,節(jié)日大促,營銷活動,其訪問流量經(jīng)常超過日均值的2倍、10倍或更多,如果用傳統(tǒng)方案來支撐,性能和成本將無法想象。

在內(nèi)核層面,騰訊云數(shù)據(jù)庫團(tuán)隊(duì)對數(shù)據(jù)庫內(nèi)核進(jìn)行了深度優(yōu)化,增強(qiáng)了在性能,數(shù)據(jù)復(fù)制方面的能力,包括:

l 優(yōu)化線程池調(diào)度算法:啟用數(shù)據(jù)庫線程池能夠很好的提升在高并發(fā)、短事務(wù)場景下,數(shù)據(jù)庫整體吞吐量,并且能夠有效的控制數(shù)據(jù)庫內(nèi)部工作線程的數(shù)量,降低開銷。數(shù)據(jù)庫團(tuán)隊(duì)在此基礎(chǔ)上針對線程池的調(diào)度算法進(jìn)行了優(yōu)化,減少無謂的線程切換,減少請求在隊(duì)列中的等待時間,解決查詢和更新請求在線程組間分布不均衡等情況。負(fù)載越高,性能優(yōu)化效果越明顯,如下圖TDSQL與MySQL在英特爾?平臺進(jìn)行對比測試,隨著負(fù)載和CPU核數(shù)的增加,TDSQL的性能變化更接近于線性增長的趨勢,高負(fù)載情況下性能仍然能領(lǐng)先1.4倍并仍可繼續(xù)提升。

?組提交異步化:在寫入數(shù)據(jù)時,Binlog事務(wù)組提交是數(shù)據(jù)庫開銷較大的過程,Binlog組提交的基本思想是引入隊(duì)列機(jī)制保證innodb commit順序與binlog落盤順序一致,并將事務(wù)分組,組內(nèi)的binlog刷盤動作交給一個事務(wù)進(jìn)行,以實(shí)現(xiàn)組提交目的。在此過程中,一個組所有連接的工作線程,只有l(wèi)eader線程在工作,所有其他線程都需要等待leader線程完成工作。我們優(yōu)化了在engine prepare期間不刷engine 事務(wù)日志,而是在執(zhí)行binlog寫入之前,一次性flush engine事務(wù)日志。簡單來講,即數(shù)據(jù)庫的工作線程在其會話狀態(tài)進(jìn)入組提交隊(duì)列后,不再阻塞等待組提交的Leader線程完成提交,而是直接返回處理下一個請求,實(shí)現(xiàn)異步化。在英特爾?高端平臺中,為了更充分的利用機(jī)器資源的目的,我們引入多租戶場景(4個實(shí)例并發(fā)),并采用OLTP RW(讀寫混合)納入到測試場景, 4實(shí)例并發(fā)穩(wěn)定峰值為19萬 TPS。

在資源擴(kuò)展性上,隨著英特爾?至強(qiáng)? CPU核數(shù)的不斷增加,TDSQL的整體性能表現(xiàn)也不斷提升,基本處于線性增長的趨勢。

?異步強(qiáng)同步復(fù)制:針對金融場景對數(shù)據(jù)強(qiáng)一致的需求,有效解決MySQL同步機(jī)制問題,TDSQL結(jié)合中斷思路,實(shí)現(xiàn)了用戶線程異步化,當(dāng)用戶線程執(zhí)行到寫binlog,將會話保存到session時,就緊接著異步去處理其他請求。這樣就能有效利用CPU資源,避免因等待備機(jī)應(yīng)答而造成的線程阻塞,充分利用線程池中的線程。目前,對于OLTP類事務(wù),TDSQL強(qiáng)同步復(fù)制性能(TPS/QPS)已與異步復(fù)制模式已無差別。同樣,在OLTP RW(讀寫混合,主從架構(gòu)),且開啟強(qiáng)同步場景(MySQL 5.7為異步),相較于社區(qū)版mysql5.7,性能提升約1.2倍。

為進(jìn)一步驗(yàn)證強(qiáng)同步數(shù)據(jù)一致性,我們在每秒插入2萬行數(shù)據(jù)的場景下,直接殺掉主機(jī)數(shù)據(jù)庫進(jìn)程,并在切換備機(jī)后導(dǎo)出流水做對比,發(fā)現(xiàn)數(shù)據(jù)完全一致。

硬件與軟件的強(qiáng)強(qiáng)結(jié)合,充分發(fā)揮數(shù)據(jù)庫性能

此次測試,英特爾?為騰訊云提供了英特爾? 至強(qiáng)? 可擴(kuò)展處理器、英特爾? 傲騰* 固態(tài)盤產(chǎn)品等先進(jìn)產(chǎn)品。依托這些先進(jìn)產(chǎn)品的優(yōu)秀表現(xiàn),在另一項(xiàng)針對數(shù)據(jù)庫讀寫性能的測評中,與上一代機(jī)型相比,英特爾? 至強(qiáng)? 可擴(kuò)展處理器與英特爾?傲騰* 固態(tài)盤產(chǎn)品使寫性能提高3倍,峰值達(dá)到了109萬TPS(Transactions Per Second,每秒事務(wù)數(shù)),讀性能提高4倍,峰值達(dá)到了286萬QPS(Queries Per Second,每秒查詢率)。

通過以上性能數(shù)據(jù)我們可以看出,TDSQL在高并發(fā)場景下的良好表現(xiàn),可以輕松支撐起億級用戶的訪問需求。而如果您追求兼容性,可選擇關(guān)系型數(shù)據(jù)庫(CDB )實(shí)例,如果您追求超高性能彈性擴(kuò)展可選擇分布式數(shù)據(jù)庫(DCDB)。當(dāng)前,基于TDSQL的騰訊金融云已在眾多金融領(lǐng)域關(guān)鍵業(yè)務(wù)場景獲得廣泛應(yīng)用,已成為國內(nèi)提供金融科技服務(wù)最重要的平臺之一。

附錄

實(shí)測的硬件/操作系統(tǒng)配置如下。

指標(biāo) 型號
CPU Intel(R) Xeon(R) Platinum 8164 CPU @ 2.00GHz 4*26 cores
內(nèi)存 512G
硬盤 英特爾?傲騰*固態(tài)盤
網(wǎng)卡 萬兆網(wǎng)卡 Intel Corporation Ethernet Controller 10-Gigabit X540-AT2
OS CentOS 7.3 ??3.10.0-514.21.2.el7.x86_64

性能測試工具及用例采用sysbench OLTP。相關(guān)命令行參數(shù)如下。

OLAP POINT SELECT
LD_PRELOAD=/usr/lib64/libjemalloc.so ./src/sysbench
–num-threads=1024 –test=./tests/include/oltp_legacy/oltp.lua –oltp-table-size=1000000
–oltp-dist-type=uniform –max-requests=0 –max-time=900
–mysql-socket=/root/prod/mysql.sock –mysql-user=root –mysql-password=123456
–mysql-db=sbtest –mysql-table-engine=INNODB –db-driver=mysql
–oltp-point-selects=1 –oltp-simple-ranges=0 –oltp-sum-ranges=0
–oltp-order-ranges=0 –oltp-distinct-ranges=0 –oltp-skip-trx=on
–oltp-read-only=on –oltp_tables_count=8 –percentile=99 –report-interval=1 run
OLTP RW
LD_PRELOAD=/usr/lib64/libjemalloc.so ./src/sysbench –num-threads=1024
–test=./tests/include/oltp_legacy/oltp.lua –oltp-table-size=1000000
–oltp-dist-type=uniform –max-requests=0 –max-time=900
–mysql-socket=/root/ prod/mysql.sock –mysql-user=root –mysql-password=123456
–mysql-db=sbtest –mysql-table-engine=INNODB
–db-driver=mysql –oltp-point-selects=1 –oltp-simple-ranges=0 –oltp-sum-ranges=0
–oltp-order-ranges=0 –oltp-distinct-ranges=0 –oltp-skip-trx=on –oltp-read-only=off
–oltp_tables_count=8 –oltp-index-updates=1 –oltp-non-index-updates=0
–percentile=99 –report-interval=1 run

強(qiáng)同步測試用例方案參考。相關(guān)命令行參數(shù)如下。

1,準(zhǔn)備100萬測試數(shù)據(jù),數(shù)據(jù)要求為有序流水?dāng)?shù)據(jù),有自增主鍵的表,如下表語句
create table cdat
(
seq ? ? ? ? ? ? ? ???INT(20),
id ? ? ? ? ? ? ? ? ? INT(20) not null AUTO_INCREMENT,
primary key (id)
);
2,模擬2萬行/秒插入數(shù)據(jù),確保TDSQL強(qiáng)同步開啟,采用一主二從架構(gòu)。
3,插入數(shù)據(jù)過程中,模擬主機(jī)故障(如殺掉mysql進(jìn)程,或直接拔網(wǎng)線)。
3,切換備機(jī)后導(dǎo)出流水,自增主鍵與有序流水保持一致($1為自增序列,$2mysql自增主鍵),第一行的seq與插入順序強(qiáng)一致。
分享到

songjy

相關(guān)推薦