【腾讯云 TDSQL-C Serverless 产品测评】- 云原生时代的TDSQL-C MySQL数据库技术实践

一、活动介绍:

"腾讯云 TDSQL-C 产品测评活动"是由腾讯云联合 CSDN 推出的针对数据库产品测评及产品体验活动,本次活动主要面向 TDSQL-C Serverless版本,初步的产品体验或针对TDSQL-C产品的自动弹性能力、自动启停能力、兼容性、安全、并发、可靠性等多方面的产品测评。

有幸在CSDN的推广上看到了腾讯云推出的TDSQL-C产品测评活动,数据库在我们的开发工作占比比较大,尤其是高并发、高负载的架构,数据库更是重中之重。直接将影响系统的稳定运行,也可以一起来看看互联网的大事件:

  • B站有一次瘫痪,用户反映"追番一直提示获取视频内容失败""显示页面加载失败
  • 微博由于某位明星上了热搜,服务器直接瘫痪

通过这次的活动,希望也能了解一些云数据库的优势,为以后公司业务的发展做一些铺垫,万一公司的业务量翻了几十倍呢?不打没有准备之战。


二、手册体验:

在进行报名后,加入微信群,助手提供了2个实验手册用来体验TDSQL-C MySQL的一个简单入门,由于新电脑还没有装Ptyhon环境,所以,这里选择《Vue+Koa+TDSQL实现问答系统》来实际操作一下。

通过不到15分钟的时间,按照手册的功能描述步骤,从0到1完成了TDSQL-C MySQL的体验,接下来就让我们深入的体验一下TDSQL-C MySQL的功能。


三、 数据库介绍:

1. 数据库是什么?

数据库(Database,简称DB)是长期储存在计算机内、有组织、可共享的大量数据的集合。

数据库中的数据按一定的数据模型组织、描述和储存。具有较小冗余度、较高数据独立性、易扩展性,并可为各种用户共享。

2. 数据库、数据库管理工具的关系:

3. 常见数据库管理系统:

在平时的开发中,接触过MySQL、SQL Server2种数据库,在早期使用过.NET就是使用SQL Server数据库进行开发,后面学习了PHP后,大多数都是PHP + MySQL进行Web相关的开发工作。其间,对于PostgreSQL也是学习调研过。

4. 如何操作数据库:

数据库管理系统可以通过SQL(结构化查询语言)来定义和操作数据,维护数据的完整性和安全性,以及进行各种数据库的管理等。

像我平时的工作就是全栈开发,php + vue + uniapp小程序,后端基本上70%的时间,都是跟MySQL打交道,平时,也遇到过不少MySQL的问题点。希望通过这次学习,也可以复盘一下自己的所学。


四、 TDSQL-C介绍:

从最上面活动的截图,我们先大致了解一下,TDSQL-C是什么?TDSQL-C有什么样的作用呢?以下是我的一个总结,可以先了解一下TDSQL-C的基本功能、场景、作用。

TDSQL是腾讯推出的一款兼容MySQL,自主可控,兼高一致性的分布式数据库。

1. 功能:

  • 具有高可用性、高性能和可扩展性
  • 支持水平自动拆分,有完整的业务逻辑表,而且数据被均匀拆分到多个物理分片中
  • 有效的解决超大并发,超高性能,超大容量的OLTP类场景

2. 作用:

  • 对金融级高可用、企业级安全性、数据强一致性等场景支持友好
  • 提供完善的生态、完善的服务保障能力

五、 TDSQL-C MYSQL实操:

1. 官网购买TDSQL-C MYSQL数据库:

打开官网 (TDSQL-C MYSQL链接)[https://cloud.tencent.com/product/tdsqlc\] ,点击"立即选购"。

新账号的话,有一些前置动作,需要进行实名制一下,否则会提示不能购买。

再往账号中充一点值,好进行产品的购买,这里用于测试的话,充了10块钱进行体验一下。

在产品选购页面,实例形态这里一定要选择"Serverless"的产品,TDSQL-C分为两个产品:一个是MySQL、一个是PostgreSQL,这里我们选择"MySQL"数据库引擎。

可以看到地域还支持国外的地域,给产品点赞,牛!

我们选择最新的数据库版本"MySQL 8.0",可以根据自己的业务设置自动暂停时,选择"1个小时",存储计费模式,可以用使用资源包,点击"购买资源包"进行购买。

选择"存储资源包",容量的话,根据自己的需求进行调整,可以看出也比较便宜。

通过几个确认下单的步骤,购买成功存储资源包。

再回到数据库购买页面,将刚刚购买的存储资源包进行绑定。

第二步,可以设置数据库密码、默认字符集,自定义端口,表名大小写等参数。

经过几个确认步骤,集群创建成功,很有的意思是,这里不叫数据库实例,而是叫集群。

2. 数据库集群功能介绍:

默认数据库集群实例的外网是关闭的,需要自己开启。这里为了方便演示,将"自动暂停时长"设置为10分钟,有个疑问是数据库刚开启怎么就有24M存储空间了?

可以看到对应的资源包是0,并没有存储数据。

通过数据库管理工具DMC,可以看到系统默认有一些系统库,猜测这24M数据是它们的。

3. 开启外网访问地址:

点击上面"开启",在开通外网访问地址后,注意host是一个域名(并非是IP),端口是一个随机的(并非是3306)。

4. 账号管理:

添加一个开发的账号,有只读的权限,不能有操作的权限。

5. 数据库管理:

可以单独对一些账号进行权限的控制。

6. 参数设置:

针对一些数据库的参数可以自己去修改,符合自己的需求。

7. 体验中遇到的问题:

使用数据库密码时,不能使用"Mysql.",试了很多次,发现是密码有问题,改为"Test123."

导入了一点表,在Navicat中删除后,看到表的空间并没有释放?

手册中的mysql2在并发流量时,好像不是太好用,下次试试Java的多线程。


六、TDSQL-C MySQL降本策略:

1. 自动启停:

Serverless的好处,当设置10分钟(可以随时调配)没有使用时,数据库就会暂停状态,暂停后计算将不再计费,如下数据库集群实例状态是"已暂停"。

一般像我们的网站,在夜晚的是没有流量的,可以节省一段时间的费用,如果是一年,那也是一笔比较可观的节能收入。

2. Serverless秒级伸缩:

改造一下上面手册的后端Node代码,进行并发写入数据库数据,模拟线上突然QPS上升的场景。

js 复制代码
const mysql = require('mysql2/promise');

// 初始化数据库连接
let connection = null
async function initDb () {
  connection = await mysql.createConnection({
    host: 'bj-cynosdbmysql-grp-8znse6hq.sql.tencentcdb.com',
    user: 'root',
    password: 'Test123..',
    database: 'shop',
    port: 26668,
  });

  async function selectData () {
    for (let i = 0; i < 999999; i++) {
      let sql = "INSERT INTO `tb_seckill_goods` VALUES (943095, NULL, 'xxxxxxx', 'http://img14.360buyimg.com/n7/jfs/t23629/293/671156875/53383/8ab4ce73/5b3c24abN8090cb25.jpg', 825.26, 82.53, '2019-05-24 06:51:00', '2019-05-24 06:51:00', '1', '2019-05-23 16:00:00', '2019-05-23 17:59:00', 79, 75, 'xxxxx')";
      connection.execute(sql);
    }
  }
  
  selectData()
}
initDb()


可以看到,我们买的配置当时是最小0.5,最大1,按以前的经验来说,可能CPU就达到了100%,SQL的进程在阻塞了,而TDSQL-C MySQL Serverless版本,可以自动的将CPU由最大1扩大到上面的差不多5。

3. 总结:

可以看到TDSQL-C MySQL Serverless版本有高度弹性灵活的使用方式,根据实际使用量进行计费,非常适合对业务量波动较大的中小企业。用这种按需按量的计费模式,极大降低了使用成本和资源浪费。


七、 TDSQL-C MySQL 提效策略:

1. 权限管控:

我们可以通过上面设置的权限进行有效的控制角色的操作类型,防止团队中有些人误操作,传统的工作可能是DBA在分配,这里的可以直接设置,比较方便。可以看到当我们使用dev_chen进行insert操作时,直接就报错了。

2. SQL导入:

在Navicat中导入数据需要差不多5分钟,而在DMC管理平台导入数据节省了差不多一半的时间。

个人猜测,可能是DMC先把SQL上传到服务器上,然后,再相当于本地导入,速度就快很多。导出的速度也是比较快的,不过建议用zip压缩一下,这样可以节省流量,速度也比较快。

可以看到在Navicat中导入表数据的过程中,发现这张表有数据了。

但是在DMC上查询却是空的,只有在表导完数据后,才能在下面这张图查出数据。

3. Mysql 5.7迁移到8.0:

可以看到Mysql 5.7的表,在8.0中导入,有一些小报错,但是不影响使用。基本上可以100%进行迁移。

4. 总结:


八、 TDSQL-C MySQL 运维的能力:

用户可以通过"数据库智能管家DBbrain"强大的监控功能,来获得DB实例节点的数据磁盘使用率、日志磁盘使用率、链接数使用率、SQL请求量、慢查询量、备延迟耗时、异常情况、运营情况、健康报告等指标。

1. 诊断优化:

可以从整体来查看数据库的一些指标参数,如CPU、内存、存储、流量、健康得分等情况,其中,还能显示我们平时比较关心的慢SQL,在"诊断提示"中也有一些报警的提醒。

2. 诊断提示详情:

下图可以看到,我们模拟突然大量的写入,导致CPU的急剧增加,直接飙到了近80%,当然,也可以看到这个监控指标"cpu_use_rate",也可以自己去设置一下告警值。

如下为慢SQL的诊断详情,可以看到这里大于等于1s执行时间的,会被记录为慢SQL。

3. 性能趋势:

可以对数据库的一个实时、历史走势的一个监控,包括CPU、内存、存储、流量、TPS、QPS、连接数、请求数等参数的折线图,通过这些参数,我们可以及时分析现有问题是什么,也可以对以往的负载做一个大概的评估,利用技术架构的升级。

4. 慢SQL分析:

慢SQL也是平时项目开发,比较关注的一个点,如下可以看到无论是插入、查询,或者有更新、删除的语句,只要超过阀值都会被记录为慢SQL,这个指标会直接影响项目功能的使用,及项目的质量。




九、 总结:

TDSQL是腾讯云企业级分布式数据库,旗下涵盖金融级分布式、云原生、分析型等多引擎融合的完整数据库产品体系,提供业界领先的金融级高可用、计算存储分离、数据仓库、企业级安全等能力,同时具备智能运维平台、Serverless版本等完善的产品服务体系。

我也是在通过活动、自己动手操作手册、自己在项目中实践TDSQL-C MySQL 8.0,从0到1的由浅到深的了解,从一些论点实际去操作,了解到TDSQL-C MySQL确实能给我们的业务带来提效降本的方案,希望在以后能够在业务中去落地并实践TDSQL-C MySQL。

综上所述,可以看到TDSQL-C MySQL 是一个强大、灵活、可扩展的数据库中间件,适用于中大型企业级应用程序。如果需要寻找一种可靠、高性能、可扩展的数据库解决方案,TDSQL-C MySQL 版本是一个很不错的选择。

相关推荐
月光水岸New2 小时前
Ubuntu 中建的mysql数据库使用Navicat for MySQL连接不上
数据库·mysql·ubuntu
狄加山6752 小时前
数据库基础1
数据库
我爱松子鱼2 小时前
mysql之规则优化器RBO
数据库·mysql
chengooooooo2 小时前
苍穹外卖day8 地址上传 用户下单 订单支付
java·服务器·数据库
Rverdoser3 小时前
【SQL】多表查询案例
数据库·sql
Galeoto3 小时前
how to export a table in sqlite, and import into another
数据库·sqlite
人间打气筒(Ada)4 小时前
MySQL主从架构
服务器·数据库·mysql
Bright16684 小时前
centos9安装k8s集群
云原生·容器·kubernetes
leegong231114 小时前
学习PostgreSQL专家认证
数据库·学习·postgresql
喝醉酒的小白4 小时前
PostgreSQL:更新字段慢
数据库·postgresql