286 万 QPS!腾讯云 TDSQL 打造数据库领域的「超音速战机」

摘要

在英特尔®、腾讯金融云团队的共同见证下,腾讯云数据库 TDSQL 采用英特尔®提供的高端平台,跑出了创造历史的最快性能数据——峰值 286 万 QPS。相比于上一代处理器,性能提升了近 4 倍,是 32 核/220GB 实例的 38 倍,腾讯云 TDSQL 正在打造数据库领域的「超音速战机」

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 倍并仍可继续提升。

  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 倍。
  l

  为进一步验证强同步数据一致性,我们在每秒插入 2 万行数据的场景下,直接杀掉主机数据库进程,并在切换备机后导出流水做对比,发现数据完全一致。

  硬件与软件的强强结合,充分发挥数据库性能
  此次测试,英特尔®为腾讯云提供了英特尔® 至强® 可扩展处理器、英特尔® 傲腾* 固态盘产品等先进产品。依托这些先进产品的优秀表现,在另一项针对数据库读写性能的测评中,与上一代机型相比,英特尔® 至强® 可扩展处理器与英特尔®傲腾* 固态盘产品使写性能提高 3 倍,峰值达到了 109 万 TPS(Transactions Per Second,每秒事务数),读性能提高 4 倍,峰值达到了 286 万 QPS(Queries Per Second,每秒查询率)。
  通过以上性能数据我们可以看出,TDSQL 在高并发场景下的良好表现,可以轻松支撑起亿级用户的访问需求。而如果您追求兼容性,可选择关系型数据库 (CDB ) 实例,如果您追求超高性能弹性扩展可选择分布式数据库 (DCDB)。当前,基于 TDSQL 的腾讯金融云已在众多金融领域关键业务场景获得广泛应用,已成为国内提供金融科技服务最重要的平台之一。
  附录
  实测的硬件/操作系统配置如下。

指标型号
CPUIntel(R) Xeon(R) Platinum 8164 CPU @ 2.00GHz 4*26 cores
内存512G
硬盘英特尔®傲腾*固态盘
网卡万兆网卡 Intel Corporation Ethernet Controller 10-Gigabit X540-AT2
OSCentOS 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 与插入顺序强一致。


最新文章

极客公园

用极客视角,追踪你最不可错过的科技圈。

极客之选

新鲜、有趣的硬件产品,第一时间为你呈现。

顶楼

关注前沿科技,发表最具科技的商业洞见。