云原生数据库性能对比(阿里云、百度智能云、腾讯云)

近些年,云原生数据库成为云厂商的重要发展方向,阿里云、百度智能云、腾讯云均先后发布了自研的云原生数据库。笔者认为云原生数据库具有更高的性价比、更极致的弹性,可以满足业务发展的不同阶段和负载场景的需求,也是云数据库从托管开源数据库到原生化自研的必然发展。
笔者一直非常深度关注、调研和使用云数据库,其中性能是关注的重点之一。一方面性能是最终成本的重要影响因素,更好的性能,通常意味着使用更少的资源支撑更高的业务量,从而降低整体成本。另外,性能还意味着在极端场景下,数据库的上限支撑能力。所以,近期对各个云数据库厂商做了一个较为系统的性能对比,供开发者和企业在云数据库选型时的参考。

笔者在进行大量测试之后,对主要的云厂商分别选择了"主流规格"(适合生产环境配置的)进行了对比,综合性能结果是阿里云 PolarDB > 百度智能云 GaiaDB > 腾讯云 TDSQL-C,详细测试数据对比见下图:

(蓝色:百度智能云 GaiaDB 红色:腾讯云 TDSQL-C 绿色:阿里云 PolarDB)


只读场景


读写场景


只写场景

测试方案

测试环境

|------------|-------------------------------------------------------------------------------|------------------------------------------------------------------------------|
| 厂商 | 虚机客户端 | 云原生数据库信息 |
| 阿里-PolarDB | 地域/可用区:华北2(北京)客户端:32核64GB实例镜像:CentOS 8.2 64位网络:云服务器 ECS 和云原生数据库集群在同一私有网络(VPC) | 内核版本:mysql8.0.2实例类型:独享型实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G节点个数:一主一只读 |
| 腾讯-TDSQL-C | 地域/可用区:北京客户端:32核64GB客户端操作系统:CentOS 8.2 64位网络:云服务器 CVM 和云原生数据库集群在同一私有网络(VPC) | 内核版本:mysql8.0实例类型:独享型实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G节点个数:一主一只读 |
| 百度-GaiaDB | 地域/可用区:华北-北京客户端:32核64GB客户端操作系统:CentOS 8.2 64位网络:云服务器BCC和云原生数据库集群在同一私有网络(VPC) | 内核版本:mysq8.0.18实例类型:独享型实例规格:2C8G、4C16G、8C32G、8C64G、16C128G、32C256G节点个数:一主一只读 |

测试工具

  • sysbench工具介绍:SysBench 是一个跨平台且支持多线程的模块化基准测试工具,用于评估系统在运行高负载的数据库时相关核心参数的性能表现。可绕过复杂的数据库基准设置,甚至在没有安装数据库的前提下,快速了解数据库系统的性能。sysbench官方文档

  • sysbench版本:1.0.20版本

  • sysbench测试模型:

    • sysbench 标准 OLTP 读写混合场景中一个事务包含18个读写 SQL。

    • sysbench 标准 OLTP 只读场景中一个事务包含14个读 SQL(10条主键点查询、4条范围查询)。

    • sysbench 标准 OLTP 只写场景中一个事务包含4个写 SQL(2条 UPDATE、1条 DETELE、1条 INSERT)。

测试指标

性能测试的指标包括:

  • 每秒执行事务数TPS(Transactions Per Second)数据库每秒执行的事务数,以COMMIT成功次数为准。

  • 每秒执行请求数QPS(Queries Per Second)数据库每秒执行的SQL数,包含INSERT、SELECT、UPDATE、DETELE、COMMIT等。

  • 所有 event 95分位耗时 95_lat(95% Latency)

评测方法

  1. 阿里云、百度智能云、腾讯云分别申请同配置云主机作为客户端

  2. 云厂商申请同等价位和配置的数据库实例

  3. Sysbench工具从云主机客户端向数据库实例发起读请求、写请求和读写请求

测试方法

  • OLTP读写场景压测

#准备数据:

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_write prepare

#运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_read_write run

#清理

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_read_write cleanup

  • OLTP只读场景压测

#准备数据:

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_read_only prepare

#运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 --skip-trx=1 --report-interval=1 oltp_read_only run

#清理

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --range_selects=0 oltp_read_only cleanup

  • OLTP只写场景压测

#准备数据

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 oltp_write_only prepare

#运行workload

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 --report-interval=1 oltp_write_only run

#清理

sysbench --db-driver=mysql --mysql-host=XXX --mysql-port=XXX --mysql-user=XXX --mysql-password=XXX --mysql-db=sbtest --table_size=25000 --tables=250 --events=0 --time=600 --threads=XXX --percentile=95 oltp_write_only cleanup

测试场景

  • 分别选择百度和竞品的6种套餐2C8G、4C16G、8C32G、8C64G、16C128G、32C256G进行测试

  • 对于每种规格选择读写、只读、只写3种场景进行测试

  • 每个套餐均新增128并发下的测试

限制与补充说明

在测试过程中的一些限制进行补充说明,供参考。

  • 不同厂商的内核兼容版本存在小版本号差别,这里忽略小版本的性能差异。

  • 不同厂商的CPU、磁盘类型、价格等各有不同,所以这是一个相对对等的测试。

  • 不同厂商的数据库实例的默认参数也各有不同,因此不能确定测试结果是最优配置,但基本是默认配置下的性能表现。

总体结论与分析:

  1. 综合性能排名:阿里云 > 百度智能云 > 腾讯云:
  • 阿里云 PolarDB 整体性能明显高于百度智能云 GaiaDB 和腾讯云 TDSQL-C,分析原因应该是 PolarDB 在云上使用了更高端的硬件,从阿里云的宣传来看应该使用了RDMA和NVM。

  • 百度智能云 GaiaDB 性能也还不错,在部分测试场景中和阿里云PolarDB差距不大。从公开的信息分析,GaiaDB没有使用高端的硬件,如果仅使用通用硬件跑出这个性能,应该还是非常不错的性能。

  • 腾讯云 TDSQL-C 性能比较出乎意料,在8核以上规格的性能明显低于百度、阿里。从腾讯公开的信息分析,腾讯也没有使用高端的硬件,因此只能说软件层面的深度优化还有很大空间。

  1. 只写场景:

只写性能百度与阿里差距较小,从最近百度发布的《核心技术演进和解析》分析,百度智能云 GaiaDB 在写链路方面做了较多优化,包括Quorum协议、高性能网络协议等。

参考资料

以下是笔者在分析性能过程中翻阅的网络材料,仅供参考:

数据库技术\]PolarDB-超火的云原生 云原生数据库 GaiaDB 的核心技术演进和解析 高性能和多级高可用,云原生数据库 GaiaDB 架构设计解析 腾讯云 张远:腾讯云TDSQL-C云原生数据库技术

相关推荐
阿里云云原生16 小时前
LLM 不断提升智能下限,MCP 不断提升创意上限
云原生
阿里云云原生16 小时前
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
云原生
数据智能老司机18 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机19 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
云上艺旅19 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
松果猿19 小时前
空间数据库学习(二)—— PostgreSQL数据库的备份转储和导入恢复
数据库
无名之逆20 小时前
Rust 开发提效神器:lombok-macros 宏库
服务器·开发语言·前端·数据库·后端·python·rust
s91236010120 小时前
rust 同时处理多个异步任务
java·数据库·rust
数据智能老司机20 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
hzulwy20 小时前
Redis常用的数据结构及其使用场景
数据库·redis