云数据库 VS 自建数据库,到底该如何抉择?

一 前言有赞的基础架构使用了UCloud的基础服务,我们有相当比例的数据库是UCloud的RDS(一部分使用云RDS,一部分使用购买他们的物理服务器自建数据库) 。
近期我们了解到 UCloud 推出一款基于快杰主机的UDB实例,因为他们在整机架构上针对CPU,OS内核,磁盘,网络结构有比较大的改进和增强,数据库性能也有很大的性能提升 。
所以本文写写针对快杰UDB和基于快杰自建实例的性能测试对比,为我们以后的实例选型做个技术参考 。
什么是快杰?其实快杰就是云主机,不是单独的物理服务器,基于物理机做了一层分布式存储系统,利用CPU 网络等硬件技术,优化OS内核,它具有以下特性:
计算、存储与网络性能卓越的旗舰云主机 。支持AMD 第二代EPYC CPU(2.9GHz主频)或 Intel Cascadelake CPU(2.5GHz主频)最大网络性能达到1000W PPS,最大存储性能达到120W IOPS 。规格灵活,最高支持96核768G的超大规格实例 。在Web服务,游戏服务,数据库,数据分析处理等绝大多数场景表现出色,性价比极佳 。

从官网上来看一个比较重要的特性是磁盘空间可以拓展到32T,这个算是比较吸引我们的一个特性,运维数据库的过程中经常遇到空间不足的情况,必须迁移实例,调整到其他机器上,成本比较高 。
本文测试的是基于Intel CPU的快杰机型,(和一些硬件的朋友聊 AMD指令集对MySQL的运行可能和Intel指令集合的结果不一样 。)
二 环境准备UCloud的 数据库版本 MySQL 5.7.25 。
RDS 实例选择选用他们默认的 my.cnf 模板 。核心参数配置如下:
| binlog_format                  | ROW                  || innodb_adaptive_flushing       | ON                   || innodb_adaptive_hash_index     | ON                   || innodb_buffer_pool_instances   | 8                    || innodb_buffer_pool_size        | 8589934592           || innodb_file_per_table          | ON                   || innodb_flush_log_at_trx_commit | 2                    || innodb_flush_method            | O_DIRECT             || innodb_io_capacity             | 15000                || innodb_lock_wait_timeout       | 50                   || innodb_log_buffer_size         | 8388608              || innodb_log_file_size           | 1073741824           || innodb_log_files_in_group      | 2                    || innodb_max_dirty_pages_pct     | 50.000000            || innodb_open_files              | 1024                 || innodb_read_io_threads         | 8                    || innodb_write_io_threads        | 8                    || innodb_stats_on_metadata       | OFF                  || innodb_thread_concurrency      | 20                   || max_binlog_cache_size          | 18446744073709547520 || max_binlog_size                | 1073741824           || max_connect_errors             | 1000000              || max_connections                | 2000                 || max_user_connections           | 0                    || open_files_limit               | 1000000              || sync_binlog                    | 1                    || table_definition_cache         | 464                  || table_open_cache               | 128                  || thread_cache_size              | 50                   |


推荐阅读