2017年,Bloodhound SSC超音速汽車將陸地極限速度提高到1678千米/小時,號稱陸地「超音速戰鬥機」。無獨有偶,一樣也在2017年,在英特爾®、騰訊金融雲團隊的共同見證下,騰訊雲數據庫TDSQL採用英特爾®提供的高端平臺,跑出了創造歷史的最快性能數據——峯值286萬QPS。相比於上一代處理器,性能提高了近4倍,是32核/220GB實例的38倍,騰訊雲TDSQL正在打造數據庫領域的「超音速戰機」。mysql
這次測試的TDSQL,是由騰訊雲數據庫團隊、金融雲團隊和騰訊TEG團隊共同維護的金融級分佈式架構和MySQL內核分支的統稱。目前,騰訊90%的金融、計費、交易、區塊鏈等業務核心都承載在TDSQL架構中,並已成功應用於政府、銀行、保險、製造業、物流、電商等用戶。TDSQL提供專有云、公有云兩種部署方案,能夠分配關係型數據庫(CDB)、分佈式數據庫(DCDB)、分析性數據庫(ADB)實例。算法
TDSQL強大的性能,離不開軟硬件的共同支持,騰訊雲技術團隊經過對分佈式架構和數據庫內核的深度優化,同時藉助英特爾®先進技術,讓TDSQL已經成爲金融企業互聯網轉型的一大「利器」。sql
分佈式架構與數據庫內核深度優化數據庫
與傳統行業技術架構不一樣,大型互聯網企業更傾向於使用分佈式數據庫(DCDB),這是由於互聯網應用大多都面臨着高併發數據處理,海量數據存儲的需求;而分佈式數據庫底層將實際計算和存儲數據的物理表進行自動水平拆分,經過讓負載均勻的分佈到每一個數據庫物理節點中,有效的提升了數據庫的擴展能力。目前,騰訊充值及其相關合做夥伴的日流水量超過150億,託管帳戶接近280個億,而其中相似於春節紅包,節日大促,營銷活動,其訪問流量常常超過日均值的2倍、10倍或更多,若是用傳統方案來支撐,性能和成本將沒法想象。性能優化
在內核層面,騰訊雲數據庫團隊對數據庫內核進行了深度優化,加強了在性能,數據複製方面的能力,包括:session
l優化線程池調度算法:啓用數據庫線程池可以很好的提高在高併發、短事務場景下,數據庫總體吞吐量,而且可以有效的控制數據庫內部工做線程的數量,下降開銷。數據庫團隊在此基礎上針對線程池的調度算法進行了優化,減小無謂的線程切換,減小請求在隊列中的等待時間,解決查詢和更新請求在線程組間分佈不均衡等狀況。負載越高,性能優化效果越明顯,以下圖TDSQL與MySQL在英特爾®平臺進行對比測試,隨着負載和CPU核數的增長,TDSQL的性能變化更接近於線性增加的趨勢,高負載狀況下性能仍然能領先1.4倍並仍可繼續提高。架構
l組提交異步化:在寫入數據時,Binlog事務組提交是數據庫開銷較大的過程,Binlog組提交的基本思想是引入隊列機制保證innodb commit順序與binlog落盤順序一致,並將事務分組,組內的binlog刷盤動做交給一個事務進行,以實現組提交目的。在此過程當中,一個組全部鏈接的工做線程,只有leader線程在工做,全部其餘線程都須要等待leader線程完成工做。咱們優化了在engine prepare期間不刷engine 事務日誌,而是在執行binlog寫入以前,一次性flush engine事務日誌。簡單來說,即數據庫的工做線程在其會話狀態進入組提交隊列後,再也不阻塞等待組提交的Leader線程完成提交,而是直接返回處理下一個請求,實現異步化。在英特爾®高端平臺中,爲了更充分的利用機器資源的目的,咱們引入多租戶場景(4個實例併發),並採用OLTP RW(讀寫混合)歸入到測試場景, 4實例併發穩定峯值爲19萬 TPS。併發
在資源擴展性上,隨着英特爾®至強® CPU核數的不斷增長,TDSQL的總體性能表現也不斷提高,基本處於線性增加的趨勢。異步
l異步強同步複製:針對金融場景對數據強一致的需求,有效解決MySQL同步機制問題,TDSQL結合中斷思路,實現了用戶線程異步化,當用戶線程執行到寫binlog,將會話保存到session時,就緊接着異步去處理其餘請求。這樣就能有效利用CPU資源,避免因等待備機應答而形成的線程阻塞,充分利用線程池中的線程。目前,對於OLTP類事務,TDSQL強同步複製性能(TPS/QPS)已與異步複製模式已無差異。一樣,在OLTP RW(讀寫混合,主從架構),且開啓強同步場景(MySQL 5.7爲異步),相較於社區版mysql5.7,性能提高約1.2倍。socket
爲進一步驗證強同步數據一致性,咱們在每秒插入2萬行數據的場景下,直接殺掉主機數據庫進程,並在切換備機後導出流水作對比,發現數據徹底一致。
硬件與軟件的強強結合,充分發揮數據庫性能
這次測試,英特爾®爲騰訊雲提供了英特爾® 至強® 可擴展處理器、英特爾® 傲騰* 固態盤產品等先進產品。依託這些先進產品的優秀表現,在另外一項針對數據庫讀寫性能的測評中,與上一代機型相比,英特爾® 至強® 可擴展處理器與英特爾®傲騰* 固態盤產品使寫性能提升3倍,峯值達到了109萬TPS(Transactions Per Second,每秒事務數),讀性能提升4倍,峯值達到了286萬QPS(Queries Per Second,每秒查詢率)。
經過以上性能數據咱們能夠看出,TDSQL在高併發場景下的良好表現,能夠輕鬆支撐起億級用戶的訪問需求。而若是您追求兼容性,可選擇關係型數據庫(CDB )實例,若是您追求超高性能彈性擴展可選擇分佈式數據庫(DCDB)。當前,基於TDSQL的騰訊金融雲已在衆多金融領域關鍵業務場景得到普遍應用,已成爲國內提供金融科技服務最重要的平臺之一。
附錄
實測的硬件/操做系統配置以下。
指標 |
型號 |
CPU |
Intel(R) Xeon(R) Platinum 8164 CPU @ 2.00GHz 4*26 cores |
內存 |
512G |
硬盤 |
英特爾®傲騰*固態盤 |
網卡 |
萬兆網卡 Intel Corporation Ethernet Controller 10-Gigabit X540-AT2 |
OS |
CentOS 7.3 3.10.0-514.21.2.el7.x86_64 |
性能測試工具及用例採用sysbench OLTP。相關命令行參數以下。
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
強同步測試用例方案參考。相關命令行參數以下。
1,準備100萬測試數據,數據要求爲有序流水數據,有自增主鍵的表,以下表語句 create table cdat ( seq INT(20), id INT(20) not null AUTO_INCREMENT, primary key (id) ); 2,模擬2萬行/秒插入數據,確保TDSQL強同步開啓,採用一主二從架構。 3,插入數據過程當中,模擬主機故障(如殺掉mysql進程,或直接拔網線)。 3,切換備機後導出流水,自增主鍵與有序流水保持一致($1爲自增序列,$2mysql自增主鍵),第一行的seq與插入順序強一致。 |