2017年,Bloodhound SSC超音速汽车将陆地极限速度提升到1678公里/小时,号称陆地“超音速战斗机”。无独有偶,同样也在2017年,在英特尔®、腾讯金融云团队的共同见证下,腾讯云数据库TDSQL采用英特尔®提供的高端平台,跑出了创造历史的最快性能数据——峰值286万QPS。相比于上一代处理器,性能提升了近4倍,是32核/220GB实例的38倍,腾讯云TDSQL正在打造数据库领域的“超音速战机”。
此次测试的TDSQL,是由腾讯云数据库团队、金融云团队和腾讯TEG团队共同维护的金融级分布式架构和MySQL内核分支的统称。目前,腾讯90%的金融、计费、交易、区块链等业务核心都承载在TDSQL架构中,并已成功应用于政府、银行、保险、制造业、物流、电商等用户。TDSQL提供专有云、公有云两种部署方案,可以分配关系型数据库(CDB)、分布式数据库(DCDB)、分析性数据库(ADB)实例。
TDSQL强大的性能,离不开软硬件的共同支持,腾讯云技术团队通过对分布式架构和数据库内核的深度优化,同时借助英特尔®先进技术,让TDSQL已经成为金融企业互联网转型的一大“利器”。
分布式架构与数据库内核深度优化
与传统行业技术架构不同,大型互联网企业更倾向于使用分布式数据库(DCDB),这是因为互联网应用大多都面临着高并发数据处理,海量数据存储的需求;而分布式数据库底层将实际计算和存储数据的物理表进行自动水平拆分,通过让负载均匀的分布到每个数据库物理节点中,有效的提高了数据库的扩展能力。目前,腾讯充值及其相关合作伙伴的日流水量超过150亿,托管账户接近280个亿,而其中类似于春节红包,节日大促,营销活动,其访问流量经常超过日均值的2倍、10倍或更多,如果用传统方案来支撑,性能和成本将无法想象。
在内核层面,腾讯云数据库团队对数据库内核进行了深度优化,增强了在性能,数据复制方面的能力,包括:
l 优化线程池调度算法:启用数据库线程池能够很好的提升在高并发、短事务场景下,数据库整体吞吐量,并且能够有效的控制数据库内部工作线程的数量,降低开销。数据库团队在此基础上针对线程池的调度算法进行了优化,减少无谓的线程切换,减少请求在队列中的等待时间,解决查询和更新请求在线程组间分布不均衡等情况。负载越高,性能优化效果越明显,如下图TDSQL与MySQL在英特尔®平台进行对比测试,随着负载和CPU核数的增加,TDSQL的性能变化更接近于线性增长的趋势,高负载情况下性能仍然能领先1.4倍并仍可继续提升。
此次测试,英特尔®为腾讯云提供了英特尔® 至强® 可扩展处理器、英特尔® 傲腾* 固态盘产品等先进产品。依托这些先进产品的优秀表现,在另一项针对数据库读写性能的测评中,与上一代机型相比,英特尔® 至强® 可扩展处理器与英特尔®傲腾* 固态盘产品使写性能提高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与插入顺序强一致。 |