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

作者:笔耕不辍者2024.02.28 15:10浏览量:16706

简介:云原生数据库成为云厂商的重要发展方向,阿里云、百度智能云、腾讯云均先后发布了自研的云原生数据库

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

笔者在进行大量测试之后,对主要的云厂商分别选择了“主流规格”(适合生产环境配置的)进行了对比,综合性能结果是阿里云 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核以上规格的性能明显低于百度、阿里。从腾讯公开的信息分析,腾讯也没有使用高端的硬件,因此只能说软件层面的深度优化还有很大空间。

2. 只写场景:

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

参考资料

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

[数据库技术]PolarDB-超火的云原生

云原生数据库 GaiaDB 的核心技术演进和解析

高性能和多级高可用,云原生数据库 GaiaDB 架构设计解析

腾讯云 张远:腾讯云TDSQL-C云原生数据库技术