【腾讯云 TDSQL-C Serverless 产品体验】TDSQL-C MySQL Serverless实践之路
腾讯云TDSQL-C联合CSDN推出了一款云数据库产品测评活动,让我们一起来体验一下。
一、什么是云数据库?
云数据库是指被优化或部署到一个虚拟计算环境中的数据库,可以实现按需付费、按需扩展、高可用性以及存储整合等优势。
云数据库的特性有:实例创建快速、支持只读实例、读写分离、故障自动切换、数据备份、Binlog备份、SQL审计、访问白名单、监控与消息通知等。
1. 优势:
- 可以使用户按照存储容量和带宽的需求付费
- 可以将数据库从一个地方移到另一个地方(云的可移植性)
- 可实现按需扩展
- 高可用性(HA)
1.1 轻松部署:
用户能够在控制台轻松的完成数据库申请和创建,数据库实例在几分钟内就可以准备就绪并投入使用。
1.2 高可靠:
云数据库具有故障自动单点切换、数据库自动备份等功能,保证实例高可用和数据安全。
1.3 低成本:
数据库支付的费用远低于自建数据库所需的成本,用户可以根据自己的需求选择不同套餐,使用很低的价格得到一整套专业的数据库支持服务。
云数据库发展经历了三个时代:
- 1.0时代是以云托管数据库为主
- 2.0时代是容器架构的云原生数据库时代
- 3.0时代,云Serverless数据库将成为主流趋势。
腾讯云数据库TDSQL-C Serverless新版发布,标志着云原生数据库Serverless化正式步入全面推进阶段。
二、TDSQL-C MySQL云数据库:
TDSQL是腾讯云自研企业级分布式数据库,旗下涵盖金融级分布式、云原生、分析型等多引擎融合的完整数据库产品体系,提供业界领先的金融级高可用、计算存储分离、数据仓库、企业级安全等能力,同时具备智能运维平台、Serverless版本等完善的产品服务体系。
TDSQL,100%兼容MySQL和PostgreSQL,包含三大产品系列,分别为分析型数据库TDSQL-A(Tencent Analytical Database)、云原生数据库TDSQL-C (Tencent CloudNative Database)和分布式数据库TDSQL(Tencent DistributedDatabase),全方位满足各行各业的业务需求。
云原生数据库TDSQL-C MySQL,采用计算和存储分离(日志即数据库)的 Shared Storage 架构,融合了传统数据库、云计算与新硬件技术的优势,100%兼容 MySQL 等开源数据库,实现了超百万级 QPS 的吞吐,超百 TB 的海量分布式智能存储,能够很好地支撑大数据量的归档存储和高效查询性能。
三、TDSQL-C MySQL Serverless版本:
Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。Serverless 服务支持按实际计算和存储资源使用量收取费用,不用不付费。
1. Serverless 服务架构:
- 按需启动,不需要时可关闭。
- 自动扩展/收缩。
- 缩放对应用程序无影响。
四、购买并开通TDSQL-C MySQL Serverless:
如下我们在选择数据库实例时,可以看到预置资源的MySQL,一年的费用是3250.94,就是说你哪怕是数据库没有使用,只要买了,就要付这么多的钱。那想像一下,我们在学校开发系统,只有白天才会使用,到了晚上的话、周未时间段,基本上没有使用的,这样买数据库的话,感觉十分的浪费。
但是我们切换Serverless来看一下,是按小时来收费的,不就是按量收费吗?这样是不是很符合我们的场景呢?
接下来的几个选项:
- 数据库版本,有5.7、有8.0,可以符合大部分的需求场景
- 算力配置,CCU(TDSQL-C Compute Unit)为 Serverless 的计算计费单位,一个 CCU 近似等于1个 CPU 和 2GB 内存的计算资源,每个计费周期的 CCU 使用数量为:数据库所使用的 CPU 核数 与 内存大小的1/2 二者中取最大值。
- 自动启停,数据库在该时间内没有连接和 CPU 使用时,将自动暂停,暂停后计算不计费,存储仍然按实际使用量计费。
- 存储资源包,通过资源包,可以提前预留资源,而且,相对于按量付费方式,资源包可以帮助节省更多成本,资源包的购买容量越大,有效期越长,越划算。
我们可以看到存储的资源包也是比较便宜的,相对于传统MySQL的实例的空间要划算多了。
创建完数据库集群实例后,可以看到控制台显示。
也可以查看数据库实例运行很多指标的监控,可以让我们及时查看数据库实例的一些症状,提前做一些预防措施。
- CPU使用率
- 内存使用率
- 内存使用量
- 存储使用率
- 存储使用量
- 数据表空间使用量
- 临时表空间使用量
- undo表空间使用量
- CCU
- 每秒发送客户端流量
- 每秒接收客户端流量
创建一个账号管理,方便用来管理账号。
创建一个数据库,用来存储数据管理。
其它的选项暂时没用到,就不仔细介绍一下了。
五、官方手册体验:
通过官方提供的手册,很快我们就完成了TDSQL-C MySQL的实际操作,问答系统手册案例也比较简单,与平时所使用的 Sql 语法差不多一致,基本上没有什么学习成本,开箱即用,可以快速上手,同时,也欢迎大家一起探索云原生数据库 TDSQL-C Serverless 更多的功能,为工作中赋能增效降本!
以下为官方手册对着的效果。
六、测评特性:
TDSQL-C MySQL 版提供 Serverless 服务以满足企业对特定业务场景的数据库服务要求,助力企业降本增效。
1. 资源扩缩范围(CCU)
可调整 CCU 弹性扩缩容的范围。Serverless 集群会在该范围内根据实际业务压力自动增加或减少 CCU。
2. 弹性策略
Serverless 集群会持续监控用户的 CPU、内存等 workload 负载情况,根据一定的规则触发自动扩缩容策略。
3. 自动启停
Serverless 服务支持自定义实例自动暂停时间,无连接时实例会自动暂停。当有任务连接接入时,实例会秒级无间断自动唤醒。
七、自动启停评测:
先将服务器进行关闭。
改造代码,并且关掉数据库服务,测试看看能不能进行自动启停。
// 获取前10名分数,用于跑马灯效果
router.post('/api/getScores', async (ctx, next) => {
console.log('获取前10名分数信息日志')
const date1 = new Date();
let sql = 'SELECT * FROM `data_scores` order by id desc limit 10';
const [results] = await connection.execute(sql);
const date2 = new Date();
const date3 = date2.getTime() - date1.getTime()
console.log("查询语句的开始时间", date1);
console.log("\n查询语句的结束时间", date2);
console.log("\n查询语句的相差时间", date3);
ctx.response.type = 'application/json';
ctx.response.body = {"code": '200', "message": '成功', "data": results };
});
这里的相差的时间,为8989毫秒,相差8秒多,而且服务器确实自动唤起了,感觉时间还是不太准确。
只有重启代码才能自动唤起链接,想想一下其它方案,使用mysql命令进行登录。
在 Linux 命令行中,可以使用 time 命令来统计命令执行时间。time 命令可以测量指定命令的执行时间、CPU 使用率、系统调用等信息,并将这些信息输出到终端上。
执行完命令后,终端将输出三个时间值,分别是:
- 实际时间(real time):指命令从开始到结束的实际耗时。
- 用户 CPU 时间(user time):指命令在用户态运行的 CPU 时间,不包括系统调用时间。- 系统 CPU 时间(system time):指命令在内核态运行的 CPU 时间,包括系统调用时间。
time mysql -h gz-cynosdbmysql-grp-6euxe8df.sql.tencentcdb.com -P 27859 -u root -pTestSchool123 -e "show status;"
可以看到real显示执行子3秒,表示在服务器暂停状态下,在3秒中,完成了mysql的连接,当然,这里也有网络的原因,但是说明服务器在默认设置的时间内,没有使用,就会停用。有连接进来的时候,就会马上几秒钟就能连接。
八、弹性策略:
mysqlslap 是 MySQL 官方自带的一个压力测试工具。它通过模拟多个并发客户端访问 MySQL 来执行压力测试,通过结果信息可以了解数据库的性能状况。
mysqlslap 是系统运维和 DBA 人员应该掌握一些常见的压力测试工具之一,其主要工作场景就是对数据库服务器做基准测试。
比如:服务器的硬件资源能够支持多大的访问压力呢?优化了操作系统的内核参数后,是否提升了性能?调整了 MySQL 配置参数后,对性能有多少影响?
mysqlslap -h gz-cynosdbmysql-grp-6euxe8df.sql.tencentcdb.com -P 27859 -uroot -p TestSchool123 --concurrency=200 --number-of-queries=1000 --create-schema=test_school --query=``"INSERT INTO data_scores (\`name\`, \`score\`) VALUES ('david', 30)" --iterations=300
–concurrency=200:指定同时有 200 个客户端连接
–number-of-queries=1000:指定总的测试查询次数(并发客户端数 * 每个客户端的查询次数),这样本样例平均每个客户端查询 10 次
运行结果如下:
Average number of seconds to run all queries:运行所有语句的平均秒数
Minimum number of seconds to run all queries:运行所有语句的最小秒数
Maximum number of seconds to run all queries:运行所有语句的最大秒数
Number of clients running queries:客户端数量
Average number of queries per client:每个客户端运行查询的平均数
如下为CCU的变化示意图,可以看到CCU从0.2到0.6再到0.2的一个变化,用多少就会弹性多少。
CPU使用率阤是从0%到16%,再到0%。
内存的使用率也是一样的,从0%,到2.4%,再到3.63%。
Serverless 服务的弹性策略一开始会根据用户购买时选择的容量范围,将 CPU、内存资源限制到最大规格,极大程度降低因 CPU 和内存扩容带来的时间影响和使用限制。当集群触发到自动弹性的负载阈值后,Buffer pool 会根据监控提前进行分钟级调整。在这个方案下用户使用数据库可以无感知进行 CPU 扩容。
九、Serverless 服务架构:
Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。
- 按需启动,不需要时可关闭。
- 自动扩展/收缩。
- 缩放对应用程序无影响。
连接不断转发请求能力:
当有连接访问时,系统会秒级自动启动处于暂停状态的数据库,用户不需设置重连机制。
TDSQL-C MySQL 版的接入层增加了一个恢复感知器(简称 perceptron)的模块来实现请求转发,perceptron 在和客户端握手之后,不会使用户端到集群的连接断连。恢复集群后,与 TDSQL-C MySQL 版握手,后续转发四层报文。
整体流程设计采用了两个挑战随机数进行鉴权,以实现中继模块 perceptron 不存储用户名密码的情况下也可以完成用户名密码验证,保证了用户密码的安全性,也不会引入存储密码不一致的问题。
十、微信云托管:
微信云托管 是微信团队提供的以云原生为基础的,免运维、高可用服务上云解决方案,无需服务器,1分钟即可部署小程序/公众号服务端。
微信云托管支持目前绝大多数语言/框架项目,开发者可以从服务器平滑迁移;并且微信云托管的自动运维和扩缩容特性,无需开发者关心服务的可用性,专注于业务,极大节省人力和服务资源成本。
同时,微信云托管还集成持续交付部署,DevOps自动化,安全鉴权等众多能力,致力于帮助没有深层运维经验的业务开发者和研发团队,用最低的成本,打造出稳定性高,安全性强的后端服务。
1. 流量不稳定触发型业务:
流量不稳定服务闲时资源利用率低造成资源浪费。 接入微信云托管可按实时流量自动扩缩容,突发场景下可在20s内快速扩容支持业务运行,1小时内无流量实例副本数支持缩容到0,做到无流量时无成本消耗。 同时微信云托管按实际用量计费大大降低成本,再结合MySQL数据库、对象存储等服务也可以同时降低数据库存储的使用成本。
2. 费用预估对比:
费用预估均基于刊例价,不考虑折扣、特惠活动、资源包、优惠券等。可理解为理论上的最高价。
Q:如何理解CPU计费单位(核*小时)和内存计费单位(GB * 小时)?
A:在云托管中,每个服务下有一个运行中的版本(在发布过程中,服务同时有新旧两个版本在运行中),每个版本会消耗一定数量的实例。每个实例的规格(CPU几核、内存几GB),就好像它的“功率”。实例运行了多久,它所消耗的资源量就是规格乘以运行时间(精确到秒)。
一个0.25核0.5GB的实例运行4个小时,消耗的资源量是:
CPU:0.25 * 4 = 1 (核*小时)
内存:0.5 * 4 = 2 (GB * 小时)
一个1核2GB的实例运行1个小时,消耗的资源量是:
CPU:1 * 1 = 1 (核*小时)
内存:2 * 1 = 2 (GB * 小时)
两个0.5核1GB的实例运行1个小时,消耗的资源量是:
CPU:0.5 * 2 * 1 = 1 (核*小时)
内存:1 * 2 * 1 = 2 (GB * 小时)
可以看到,他们消耗的资源量是完全相同的,产生的费用也是完全一样的。
从另一个角度来说,传统模式下以包月方式购买有效期一个月的一台1核2GB的云服务器,实际是你买断了一个月的固定的CPU和内存消耗量:
CPU:1 * 24 * 30 = 720 (核小时)
内存:2 * 24 30 = 1440 (GB * 小时)
和云托管的按量计费模式区别在于,一个月内无论你的云服务器实际利用率多少,你都支付了全部资源量的费用(用不够一个月也按一个月算)。基于云托管的自动弹性伸缩特性,你可以完全释放冗余的计算资源,大幅降低成本。
Q:如何理解MySQL的计费单位CCU(个*小时)?
A:CCU是MySQL的算力单位,0.25CCU对应传统模式中0.25核0.5GB的数据库的计算能力,1CCU对应传统模式中1核2GB的数据库的计算能力,依此类推。CCU最大可达到16CCU,对应传统模式中16核32GB的数据库的计算能力。数据库计算消耗的资源量就是实时算力乘以运行时间(精确到秒)。
从另一个角度来说,传统模式下以包月方式购买有效期一个月的一个1核2GB的云数据库(等效1CCU的算力),实际是你买断了一个月的固定的CCU算力消耗量:1 * 24 * 30 = 720 (个*小时)。
和云托管MySQL的按量计费模式区别在于,一个月内无论你的云数据库实际利用率多少,你都支付了全部资源量的费用(用不够一个月也按一个月算)。基于云托管的自动弹性伸缩特性,你可以完全释放冗余的计算资源,大幅降低成本。
Q:弹性伸缩很方便,但是用量不透明,感觉心里没底?
A:云托管提供详细的监控数据,可实时掌握资源的实际用量、伸缩情况。和云服务器对比,你也依然需要通过云服务器的实时监控才能确认你包月买断的服务器资源中,有多少是真正在被使用、多少其实是冗余浪费。真正的实际用量方面,云托管和云服务器的透明度是一致的。
Q:弹性伸缩如果不断扩容,会不会导致费用大幅超出预期,“醒来房子没了”?
A:这其实就是控制费用上限的问题。
(1)每个版本的实例数上限为50个,超过上限不会再继续扩容,即每日费用上限完全可控。如果费用预算较紧,还可以手动调低版本的实例最大副本个数。
例如:实例数上限50个,每个实例规格为0.25核0.5GB,则每日消耗资源量上限为:
CPU:0.25 * 50 * 24 = 300 (核*小时)
内存:0.5 * 50 * 24 = 600 (GB * 小时)
(2)微信云托管即将提供额度监控功能,当CPU/内存/数据库计算/数据库存储等任意资源的用量超过你设置的阈值时,会发送告警信息。你可以选择立刻冻结服务,停止新的费用产生。此时线上业务也会中断,请谨慎评估。
Q:数据库什么情况下会触发自动暂停(不产生任何数据库算力用量和费用)?
A:任何对数据库的读写和运算操作,都会消耗数据库的算力。开启数据库的自动暂停后,连续10分钟内没有任何读写和运算操作,数据库即进入暂停状态。暂停状态不会产生数据库算力资源用量,但还会有数据库存储用量。
Q:什么情况下服务会缩容到0(不产生任何容器相关用量和费用)?
A:服务下版本的实例最小副本数为0,且当前服务连续半小时没有任何访问时,会触发缩容到0。
总结:
TDSQL-C MySQL 版提供 Serverless 服务以满足企业对特定业务场景的数据库服务要求,助力企业降本增效。