【腾讯云 TDSQL-C Serverless 产品体验】TDSQL-C MySQL Serverless最佳实践

一、引言:

随着云计算技术的不断发展,越来越多的企业开始选择将自己的数据库部署在云上,以更好了的支持企业数字化转型以及业务创新,在这个过程中,很多客户会遇到这样一个问题,业务会存在高峰期和低谷期,同样数据库的访问量也是会存在相应的高峰期和低谷期。

序号业务负载业务痛点
1在业务的高峰期①. 客户选择的小规格的数据库服务无法承载业务的高额负载。
②. 为避免出现数据库服务不可用的情况,需要做临时的规格升配。
③. 或者在一开始就选择够买大规格的云数据库实例。
2在业务的低谷期①. 客户又会发现大规格的数据库服务在每天产生高额的账单。
②. 导致了很多不必要的费用。

传统的数据库服务并不能很好的解决这个问题,只能依赖反复的人工升降配,即不安全稳定,又会造成额外的IT运维成本以及人力资源成本,因此在客户的强烈的降本增效呼声之中,腾讯云TDSQL-C MySQL Serverless数据库应运而生。

在这里插入图片描述

借助《腾讯云TDSQL-C联合CSDN产品测评活动》,让我们来深入了解并实践一下TDSQL-C MySQL Serverless数据库,利用产品的资源用量低、简单易用、弹性灵活和价格低廉等优点和特性,赋能业务合理优化使用成本,创造价值,进一步助力企业降本增效,为国产云数据库点赞,遥遥领先。


二、TDSQL-C MySQL Serverless数据库:

TDSQL-C MySQL Serverless数据库是腾讯云针对中小型企业或个人开发者推出的一款数据库,提供了CPU、内存的实时弹性能力,构建云架构下的数据库产品新形态。

1. 什么是Serverless?

Serverless无服务器架构是基于互联网的系统,其中应用开发不使用常规的服务进程。相反,它们仅依赖于第三方服务(例如腾讯云Serverless Framework服务),客户端逻辑和服务托管远程过程调用的组合。

云计算的发展从IaaS、PaaS、SaaS,到最新的BaaS、FasS,在这个趋势中Serverless(去服务器化)越来越明显,随着容器技术,IoT,5G,区块链等技术的快速发展,技术上对去中心化,轻量虚拟化,细粒度计算等技术需求愈发强烈,未来Serverless将在云计算的舞台上大放异彩。

云计算经历了从 IaaS -> PaaS -> Serverless/FaaS 的发展历程,下面对这些概念做一些基本介绍。

在这里插入图片描述

序号简称云服务架构中文名称作用
1IaaS服务商提供底层/物理层基础设施资源通过IaaS提供的服务平台购买虚拟资源,选择操作系统,安装软件,部署程序。
2PaaS服务商提供基础设施底层服务提供操作系统、数据库服务器、Web服务器、负载均衡器和其他中间件,相对于IaaS客户仅仅需要自己控制上层的应用程序部署与应用托管的环境。
3BaaS服务商为客户(开发者)提供整合云后端的服务如提供文件存储、数据存储、推送服务、身份验证服务等功能,以帮助开发者快速开发应用。
4FaaS服务商提供一个允许客户开发、运行和管理应用程序功能的平台,而无需构建和维护基础架构按照此模型构建应用程序是实现“无服务器”体系结构的一种方式。

总结的说,从IDC → IaaS,用户不用关注真实的物理资源。从IaaS → PaaS,用户不再关注操作系统,数据库,中间件等基础软件。从PaaS → BaaS/FaaS, 用户可以很少甚至不用关注后台。Serverless是云计算发展到一定阶段的必然产物:

  • “绿色”计算(最大程度利用资源,减少空闲资源浪费)
  • “低门槛”技术(成本低,包括学习成本及使用成本)

2. TDSQL-C MySQL Serverless数据库实例的优势:

与普通MySQL数据库实例相比,TDSQL-C MySQL Serverless数据库实例有如下6点明显的优势:

优势:
①. 由于其规格随业务需求量随时调整,总体浪费的资源很少,提升了资源利用率,降低了资源使用量。
②. 在高峰期也能完全满足业务需求,保证业务不受损,提高了系统的稳定性。
③. 打破固定资源付费的模式,做到真正负载与资源动态匹配的按量付费,可节省大量成本。
④. 无需手动变配,提高了运维效率,降低了运维管理人员和开发人员的运维成本。
⑤. 支持自动启停能力,当没有连接时,实例自动暂停,释放计算成本;当请求连接时,自动无感启动。
⑥. 对高吞吐写入场景和高并发业务进行了设计优化,同时提供了弹性伸缩能力,适合业务数据量大、并具有典型的业务访问波峰波谷场景。

在这里插入图片描述
TDSQL-C MySQL Serverless数据库可以根据业务负载自动扩缩容实例,开发者无需关心底层资源问题,支持自定义自动暂停时间,在业务不间断情况下实现秒级冷启动,提供多种灵活计费方式供用户选择。

在这里插入图片描述

Serverless计费方式无需按固定资源付费,按照实际使用量进行收费,不使用不付费,根据业务负载自适应动态匹配资源,秒级弹性升降资源与计费,助力企业降本增效,最高可降低成本90%。

3. 生活场景阐述区别:

以在学校时,看过的一篇小说场景来进行阐述传统数据库与TDSQL-C MySQL Serverless数据库直观的对比,从生活中的实际场景来描述,从而更容易理解,从而选择合适的产品。

每一年的国庆节假已经来临,2位主角安排了自己的旅游出行,由于双方家庭经济基础不一样,所以,对于出行的安排也是会有区别的。

在这里插入图片描述

主角一:唐韵是工薪家庭
①. 为了节省成本,就根据距离的长短,弹性的乘坐性价(考量费用成本、时间成本)比合适的交通工具,距离可以当成数据库平时的配置(比如2km相当于2核2G),随着距离的大小,对应产生的计算费用也不同。
②. 所以,10个人用户的系统,使用2km的配置完全是够的,但是20个人,需要使用20km的配置,依次类推,最后,在完全满足出行的条件下,总共花费了1625元。
③. 在旅行期间,也不需要承担交通的建设、设备的购买、设备的保养、司机的工资,也不需要在非出行时间段承担相关的费用(实例不使用就不收费),只需要明确目的地就可以即方便又便宜的出行。
主角二:楚梦瑶家里有上市公司
①. 为了保障安全,家里购买了专人专用的私人飞机,可以应付所有的常规交通出行,而且也不用怕随时会有堵车(并发量过高),唯一的代价就是费用比较昂贵(高配置实例固定收费)。
②. 哪怕飞机没有起飞,也是会产生大量的费用,比如平时的保养,飞行员的人力成本(实例购买了不用的期间也会产生费用)。

4. 总结:

TDSQL-C MySQL Serverless数据库实例提供计算资源按需计费的能力,具有资源用量低、简单易用、弹性灵活和价格低廉等优点,赋能用户面向业务峰谷时对计算能力进行快速且独立的扩缩要求,做到快速响应业务变化的同时,合理优化使用成本,进一步助务企业降本增效。


三 、TDSQL-C MySQL Serverless数据库服务特性:

TDSQL-C MySQL 版提供 Serverless 服务以满足企业对特定业务场景的数据库服务要求,助力企业降本增效。

在这里插入图片描述

1. TDSQL-C MySQL Serverless的总体架构:

Serverless 服务是腾讯云自研的新一代云原生关系型数据库 TDSQL-C MySQL 版的无服务器架构版,是全 Serverless 架构的云原生数据库。Serverless 服务支持按实际计算和存储资源使用量收取费用,不用不付费,将腾讯云云原生技术普惠用户。

在这里插入图片描述

上图为TDSQL-C MySQL Serverless的总体架构,核心模块为中控节点(svls scheduler)。中控节点接收计算层采集的内存/CPU/访问情况等监控数据,根据策略决定是否扩缩容,启停实例,以及按照计费规则上报云控制台计费。

TDSQL-C MySQL Serverless有faker模块,暂停计算节点时会把四层的vip:vport绑定到faker端口,用户请求过来后,识别为有效的MySQL协议,则通知中控模块将实例重新拉起,其优点在于用户不需要为代理节点付费。

2. 资源扩缩范围(CCU):

可调整 CCU 弹性扩缩容的范围,Serverless 集群会在该范围内根据实际业务压力自动增加或减少 CCU。

2.1 CCU是啥?

CCU(TDSQL-C Compute Unit)为 Serverless 的计算计费单位,一个 CCU 近似等于1个CPU和2GB内存的计算资源,每个计费周期的 CCU 使用数量为:数据库所使用的 CPU 核数 与 内存大小的1/2 二者中取最大值。

Serverless 服务需要设定弹性范围,详细弹性范围区间可参考 算力配置。

在这里插入图片描述

2.2 MySQL实例资源选择:

通过TDSQL-C MySQL Serverless实例资源的算力配置,最低可选择0.25CCU,代表0.25的CPU以及0.5GB内存,最高可选择64CCU,代表64的CPU以及128G的内存,足以应付很多场景的覆盖。

建议在第一次设置弹性范围时,最小容量配置为0.25 CCU,最大容量选择较高的值。较小的容量设置可以让集群在完全空闲时最大限度地进行缩减,避免产生额外的费用,较大的容量可以在集群负载过大时最大限度地进行扩展,稳定度过业务峰值。

在这里插入图片描述
在这里插入图片描述

通过指定实例资源波动的上下限,以CCU作为单位,让数据库服务变的更加灵活,切实的帮助企业达成降本增效的目标 。

3. 弹性策略:

Serverless 集群会持续监控用户的 CPU、内存等 workload 负载情况,根据一定的规则触发自动扩缩容策略。

3.1 传统Serverless架构中的自动扩缩容方案:

下图左侧传统Serverless架构中会有一个共享的虚拟机池,里面存放的是不同大小的规格,假设需要从1核2G扩大到2核4G,则从池子里面找到2核4G的虚拟机,将对应的数据盘挂载到虚拟机,并将访问切到该虚拟机,即可完成自动扩容。

传统Serverless架构中自动扩容存在的问题点:

问题点:
①. 假设用户就只需要4核8G,传统Serverless架构仍需要从1核2G、2核4G、4核8G逐渐递增上去,扩容耗时偏长。
②. 由于选择新的虚拟机扩容,会导致BP失效,访问将经历一次冷启动过程,用户体验不是太友好。

在这里插入图片描述

3.2 传统TDSQL-C Serverless架构中的自动扩缩容方案:

而上图右侧TDSQL-C Serverless架构中,用户在购买时选择最小规格为1核2G,最大规格为4核8G。TDSQL-C Serverless会在初始就给用户提供最大CPU规格,内存则从最小规格开始。可以看出,TDSQL-C Serverless的CPU资源不会受限,可以在设置的最大规格内任意使用。优点是用户性能不受限,引入的缺点是可能整机出现满负载。

基于以下两点,TDSQL-C Serverless可以很好应对自动扩缩容:

TDSQL-C Serverless自动扩缩容方案:
①. 由于TDSQL-C采用存算分离架构,一旦监控到整机资源超过阈值,就进行快速迁移,迅速在另外一台相对空闲的机器重新拉起实例,秒级完成,在资源负载上可以精准控制。
②. 云数据库整机利用率偏低。

3.3 小结:

Serverless 服务的弹性策略是利用监控计算层实现的。通过监控业务负载情况,系统对计算资源进行自动扩缩容。

自动扩缩容原理:
①. Serverless 服务的弹性策略一开始会根据用户购买时选择的容量范围,将 CPU、内存资源限制到最大规格,极大程度降低因 CPU 和内存扩容带来的时间影响和使用限制。
②. 当集群触发到自动弹性的负载阈值后,Buffer pool 会根据监控提前进行分钟级调整。
③. 在这个方案下用户使用数据库可以无感知进行 CPU 扩容,并且不会因为连接突增导致实例 OOM。

4. 自动启停:

Serverless 服务支持自定义实例自动暂停时间,无连接时实例会自动暂停。当有任务连接接入时,实例会秒级无间断自动唤醒。

在这里插入图片描述

当没有数据库请求时,监控服务会触发计算资源的回收,并通知接入层。当用户再次访问时,接入层则会唤醒集群,再次提供访问。

5. 计费模式:

Serverless 服务通过监控业务负载情况,系统对计算资源进行自动扩缩容,并对该时刻所消耗的资源进行计费。

在这里插入图片描述

6. 存储资源包的误区:

模式描述
想像的收费模式①. 买了多少存储资源包,就能用多少量的数据存储。
②. 比如购买了10TB存储资源包,就可以长期使用,直到数据库的数据达到10TB。
实际的收费模式①. 存储资源包会按照每小时实际使用的存储量进行抵扣收费,在实际项目要特别注意一下数据量的预估。
②. 比如购买了10TB存储资源包,现有的数据量是200GB,计算的公式是10TB/(0.2* 24) = 2.08天

在使用过程中,发现一个存储资源包的相关问题,有段时间没有使用,在收取存储资源的费用,记得当时明明已经购买过存储的资源包了,这么快就用完了吗?记忆中好像用的数据量也不多。

在这里插入图片描述

查看TDSQL-C MySQL Serverless实际的使用存储量为224.57GB,但是我购买的是40TB的存储资源包,为什么这么快就用完了呢?

在这里插入图片描述

以下是购买资源包的列表,发现存储资源包已经满了。

在这里插入图片描述

因为不知道是什么原因导致的,只能无奈去提一个工单来询问一下是什么问题。

在这里插入图片描述

以下为腾讯云工程师给的回复,40T的存储资源包,而现在已使用的存储为0.2T,每天是24小时,按照他给的公式,表示8天左右就会使用完。

在这里插入图片描述

看来是自己理解错误了,结论是存储资源包会按照每小时实际使用的存储量进行抵扣收费 ,在购买的时候,选择计费模式的时候,上面也有备注。

在这里插入图片描述


四、TDSQL-C MySQL Serverless自动启停实验:

1. MySQL数据库连接原理:

MySQL 服务端实例启动后,就可以通过客户端建立与服务端的连接,然后发送查询/更新请求了。

在这里插入图片描述

3种MySQL客户端连接渠道:
①. 通过图形化客户端软件(如MySQL Workbench、Navicat For MySQL、DataGrip、TablePlus、Sequel Pro等)建立与 MySQL 服务端的连接。
②. 通过 MySQL 安装目录 bin 目录下的 mysql 二进制文件在终端窗口通过命令行建立与 MySQL 服务端的连接。
③. 在PHP、Go、Python、Java等后端编程语言中使用的数据库SDK建立与 MySQL 服务端的连接,只不过SDK是对数据库连接做了封装而已。

2. 可视化图形工具客户端连接数据库:

先将TDSQL-C Serverless服务器关掉,再在Navicat For MySQL填写完Host、Port、User Name、Password后,点击“Test Connection”后,可以看到服务器的实时监控,发现有连接进来后,马上把服务器进行恢复。因为没有有效的记录时间的方案,只能看折现图,可以发现Threads进程是在23时48分15秒左右马上启动起来了。

在这里插入图片描述

3. MySQL二进制文件的两种连接方式:

Linux平台环境下主要有两种连接方式,一种是TCP/IP连接方式,另一种就是socket连接:

  • 通过TCP/IP连接MySQL实例时,MySQL会先检查一张权限表,用来判断发起请求的客户端IP是否允许连接到MySQL实例,该表就是MySQL库下面的user表。
  • UNIX Socket连接方式其实不是一个网络协议,所以只能在MySQL客户端和数据库实例在同一台服务器上的情况下使用。
Unix套接字连接MySQL的优势:
①. 更快的连接速度:
Unix套接字连接不经过TCP/IP协议栈,因此速度更快。
②. 更高的安全性:
Unix套接字连接只能在本地主机上使用,因此对于需要保护数据安全的数据库应用程序来说,这是一个重要的因素。
③. 更少的网络负载:
由于Unix套接字连接只在本地主机上连接,因此不会浪费带宽和网络负载。

在这里插入图片描述

因此,本次测试会采用MySQL TCP/IP的方式进行测试。

可以使用shell脚本来操作TDSQL-C MySQL Serverless数据库自动启停,使用-e参数可以执行各种sql的(创建、删除、增、删、改、查)等各种操作。
在这里插入图片描述

3.1 时间命令time的shell脚本:

脚本的作用是当数据库暂停后,第一个mysql连接是模拟登录到Serverless数据库,出现自动启动数据库,看看时间是多久,然后,马上再次用mysql连接模拟一下在数据库启动的状态下,需要多久进行连接。

#!/bin/bash
# 数据库信息
HOSTNAME="gz-cynosdbmysql-grp-69gvou9h.sql.tencentcdb.com"
PORT="25950"
USERNAME="root"
PASSWORD="Mydb123."

# 执行查询数据
query_sql="SHOW VARIABLES LIKE 'version';"
time mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${query_sql} -vvv"
time mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${query_sql} -vvv"

mysql -v参数的作用,为了防止SQL本身执行时间影响到连接的效果,可以把SQL执行的时间也打印出来。

● 若要同时显示语句本身:-v
● 若要增加查询结果行数:-vv
● 若要增加执行时间:-vvv

3.2 时间命令date的shell脚本:

#!/bin/bash
# 数据库信息
HOSTNAME="gz-cynosdbmysql-grp-69gvou9h.sql.tencentcdb.com"
PORT="25950"
USERNAME="root"
PASSWORD="Mydb123."

# 执行查询数据
query_sql="SHOW VARIABLES LIKE 'version';"
firstStart=$(date +%s.%N)
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${query_sql}" -vvv
firstEnd=$(date +%s.%N)
firstRunTime=$(echo "$firstEnd - $firstStart" | bc)
echo "第一次首连命令执行时间:$firstRunTime 秒"

secondStart=$(date +%s.%N)
mysql -h${HOSTNAME}  -P${PORT}  -u${USERNAME} -p${PASSWORD} -e "${query_sql}" -vvv
secondEnd=$(date +%s.%N)
secondRunTime=$(echo "$secondEnd - $secondStart" | bc)
echo "第二次连接命令执行时间:$secondRunTime 秒"

4. 准备两台不同配置的机器:

评测的目标机器为TDSQL-C Serverless,使用的模式为按量收费,机房的位置在广州四区。

在这里插入图片描述

准备两台测试机器,一台是腾讯云的CVM云服务器,2核4G 10Mps,广州七区与Serverless实例在同一个区,一台是华为云耀云服务器2核2G 3Mps,华北北京四区,测一下不同服务器、不同区域的结果做比较。

在这里插入图片描述

腾讯云的CVM云服务器,可以通过orcaterm进行远程登录,可以进行如下的测试脚本执行流程:

# 复制脚本
vi query.sh
# 增加执行权限
chmod -R 777 query.sh
# 执行shell脚本
./query.sh
# 检查是否有mysql
mysql
# ubuntu安装mysql客户端
apt-get install -y mysql-client-core-8.0

在这里插入图片描述

5. 测试脚本分析实验数据:

通过2种查看linux执行时间的命令的shell脚本,每次执行前,先将服务器进行暂停,脚本中第1个mysql命令表示服务器暂停时默认启用,看一下执行的时间多久,这里需要注意的是因为SQL本身也会存在执行时间,比如执行一个慢查询,这里为了得到比较合理的值,增加了-vvv参数来输出SQL命令本身执行的时间,得到的公式:

命令的总执行时间 – SQL本身执行的时间 = Serverless服务器自动启动时间

在这里插入图片描述

每个脚本分别在2台云服务器腾讯云CVM、华为云云耀云服务器各执行5次,得出以下结果:

  • 可能由于腾讯云服务器与Serverless在相同的区域广州机房,时间略比华为云服务器要短。
  • 基本上在2s左右就能完成Serverless服务器自动启动。

在这里插入图片描述

云服务器(Cloud Virtual Machine,CVM)是腾讯云提供的可扩展的计算服务。使用云服务器避免了使用传统服务器时需要预估资源用量及前期投入,帮助在短时间内快速启动任意数量的云服务器并即时部署应用程序,推荐应用在部署时,参考以下方案:

在这里插入图片描述

6. Java代码连接MYSQL数据库方式:

JDBC是Java数据库连接(Java Database Connectivity),是一套用于执行SQL语句的Java API。应用程序可以通过这套API连接到关系型数据库,并使用SQL语句完成对数据中数据的查询、增加、更新和删除等操作。

JDBC在应用程序与数据库之间起到了一个桥梁作用,当应用程序使用JDBC访问特定的数据库时,需要通过不同数据库驱动与不同数据库进行连接,连接后即可对该数据库进行相应的操作。
在这里插入图片描述

采用的逻辑是先将Java代码启动并且连接上数据库,这时候,程序设定延迟1分钟,此时,手动在服务器控制台进行暂停服务器后,再让程序进行SQL的操作,看看实际生产的一个真实情况能不能满足?

在这里插入图片描述

Java核心的代码:

@Component
public class Service implements ApplicationContextAware {
    @Autowired
    private ShopMapper shopMapper;

    @Override
    public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
        try {
            Thread.sleep(60*1000);
        } catch (InterruptedException e) {
            throw new RuntimeException(e);
        }
        // 第一次首次连接(Serverless服务器自动触发启动)
        long firstStartTime = System.currentTimeMillis();
        System.out.println("SQL语句执行前时间:" + firstStartTime);
        shopMapper.insertTest();
        long firstRunTime = System.currentTimeMillis()-firstStartTime;
        System.out.println("第一次总耗时:"+ firstRunTime);
        // 第二次连接
        long secondStartTime = System.currentTimeMillis();
        System.out.println("SQL语句执行前时间:" + secondStartTime);
        shopMapper.insertTest();
        long secondRunTime = System.currentTimeMillis()-secondStartTime;
        System.out.println("第二次总耗时:"+ secondRunTime);
    }
}

执行结果:

在这里插入图片描述

  • 项目启动时,要对数据库进行了实例化连接
  • 程序启动后,会有一个60s的延迟设置,此时,手动暂停Serverless实例,模拟在程序启动后,在一定时间内不使用,Serverless服务器实例自动暂停
  • 第一次连接,触发Serverless恢复感知器自动启动服务器,可以看到在3.127s就完成了
  • 第二次连接,Serverless已经恢复了,可以看到在0.089s内完成操作

6. 小结:

通过3种MySQL客户端连接方式的进行测试,TDSQL-C MySQL Serverless自动启停实验,可以完全满足生产环境的需求。


五、TDSQL-C MySQL Serverless弹性伸缩实验:

在这里插入图片描述

为了可以有效的进行测试观察结果,TDSQL-C MySQL Serverless选择了一个较大的算力弹性区间范围[1,32],即最小可以是1核2G的云数据库服务器(可能会更小,0.1都可能存在),最大可能是32核64G云数据库服务器。

通过对压测的结果进行分析,TDSQL-C MySQL Serverless在不使用的时候,就会释放计算节点,只收取存储的费用。当服务器启动后,就会再加上计算节点的CCU费用,可以看到TDSQL-C MySQL Serverless在最开始的算力为1,可以随着压测的流量变大,同步增加到最大32个算力,当压测停止后,又自动在后面缩容到算力到0为止。

在这里插入图片描述

以下为分3个阶段进行TDSQL-C MySQL Serverless的测试。

在这里插入图片描述

以下为从监控平台得到压力测试这段时间内,得到各个指标参数的值,这里没有把每一分钟的变化值罗列出来,只是把一些波动变化比较大的值,在以下进行列举:

时间段CPU百分比内存百分比内存使用量CCU算力值
11:501.04%0.98%700.24M1
11:593.77%1.73%1232.21M1.21
12:035.41%3.89%2763.62M1.73
12:056.38%3.89%2766.62M2.04
12:088.36%3.89%2764.70M2.68
12:0910.68%7%5332.13M3.42
12:1015.12%8.87%6304.86M4.84
12:1123.08%15.09%10731.04M7.39
12:1533.33%18.08%12856.34M10.67
12:1643.13%34.1%24250.74M13.8
12:1837.91%35.29%25095.05M12.25
12:1959.37%35.29%25098.40M19
12:2065.51%52.72%37488.47M24.81
12:2158.39%79.58%56593.07M27.89
12:2797.81%80.35%57140.87M31.3
12:2891.53%80.35%57140.92M29.29
12:29100%80.36%57145.35M32
12:3291.61%80.37%57150.45M29.32
12:33100%80.37%57153.46M32
12:3487.61%80.37%57151.07M28.04
12:371.79%58.81%41821.7M27.89
12:381.81%35.05%24923.48M12.3
12:390.93%15.68%11147.32M6.2
12:400.55%7.42%5278.11M3.14
12:410.31%3.39%2412.45M1.43
12:460.02%1.98%1410.64M1
12:480%0%0M0
12:500%0%0M0

通过以上的指标数据,我们把他放到echats中去查看,因为内存使用量的值比较大,就不参与计算,通过对11:50到12:50这一个小时压测得到的指标数据,可以形成以下折现图。

option = {
  title: {
    text: 'TDSQL-C Serverless CCU趋势图'
  },
  tooltip: {
    trigger: 'axis'
  },
  legend: {
    data: ['CPU使用率', '内存的使用率', 'CCU算力值', 'Direct', 'Search Engine']
  },
  grid: {
    left: '3%',
    right: '4%',
    bottom: '3%',
    containLabel: true
  },
  toolbox: {
    feature: {
      saveAsImage: {}
    }
  },
  xAxis: {
    type: 'category',
    boundaryGap: false,
    data: ["11:50", "11:59", "12:03", "12:05", "12:08", "12:09", "12:10", "12:11", "12:15", "12:16", "12:18", "12:19", "12:20", "12:21", "12:27", "12:28", "12:29", "12:32", "12:33", "12:34", "12:37", "12:38", "12:39", "12:40", "12:41", "12:46", "12:48", "12:50"]
  },
  yAxis: {
    type: 'value'
  },
  series: [
    {
      name: 'CPU使用率',
      type: 'line',
      stack: 'Total',
      data: ["1.04", "3.77", "5.41", "6.38", "8.36", "10.68", "15.12", "23.08", "33.33", "43.13", "37.91", "59.37", "65.51", "58.39", "97.81", "91.53", "100", "91.61", "100", "87.61", "1.79", "1.81", "0.93", "0.55", "0.31", "0.02", "0", "0"]
    },
    {
      name: '内存的使用率',
      type: 'line',
      stack: 'Total',
      data: ["0.98", "1.73", "3.89", "3.89", "3.89", "7", "8.87", "15.09", "18.08", "34.1", "35.29", "35.29", "52.72", "79.58", "80.35", "80.35", "80.36", "80.37", "80.37", "80.37", "58.81", "35.05", "15.68", "7.42", "3.39", "1.98", "0", "0",]
    },
    {
      name: 'CCU算力值',
      type: 'line',
      stack: 'Total',
      data: ["1", "1.21", "1.73", "2.04", "2.68", "3.42", "4.84", "7.39", "10.67", "13.8", "12.25", "19", "24.81", "27.89", "31.3", "29.29", "32", "29.32", "32", "28.04", "27.89", "12.3", "6.2", "3.14", "1.43", "1", "0", "0",]
    },
  ]
};

在这里插入图片描述

在TDSQL-C MySQL Serverless达到波峰的时候,CPU达到100%,顺便测试了一下查询语句,还是能够很快速的访问并得到结果,只要项目中没有大量的慢查询,项目估计还是可以正常的运行的。

在这里插入图片描述


六、公司业务导入TDSQL-C MySQL Serverless可行性分析:

公司的业务是做定制化车险的,在创业前期大多采用与第三方机构合作,快速验证商业模式,用以迅速打开市场。

在这里插入图片描述

随着业务体系的逐渐完善,公司也慢慢的导入自研的体系,以下是公司可回溯系统的建设体系,对比TDSQL-C MySQL Serverless数据库对比的场景优化思考。

在这里插入图片描述

1. 回溯的场景周期较短,剩余时间不使用也要付费:

开发的某类产品分为投保期和理赔期,投保期一般为2-3个月,等到承保期后,就不再使用了,就是理赔的阶段,这样来看,目前也是按照包年模式来购买的数据库,这样会造成资源的过剩,应该是周期性的资源购买。

2. 归档后,只有少量的异常案例需要回溯,使用率不高:

可以省出计算节点的费用,只单纯的使用存储量的费用,如果进一步集成COS,可能费用会再一次压缩与缩减。


七、总结:

TDSQL-C MySQL Serverless数据库实例不仅提供网络资源、命名空间、存储空间的垂直资源隔离能力,还提供计算资源按需计费的能力,具有资源用量低、简单易用、弹性灵活和价格低廉等优点,赋能用户面向业务峰谷时对计算能力进行快速且独立的扩缩要求,做到快速响应业务变化的同时,合理优化使用成本,进一步助务企业降本增效。

在这里插入图片描述

在业务波动较大的场景下,普通数据库实例和TDSQL-C MySQL Serverless数据库实例资源使用和规格变化情况,可以看出普通实例在波谷期浪费的资源较多,在高峰期资源不足会导致客户业务受损,而TDSQL-C MySQL Serverless数据库实例凭借其极致的弹性,完美的支持了客户不同时段的业务负载,并且在最大程度上避免了资源的浪费,节省了大量的成本。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/110263.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计讯物联外贸公司--佰沃恩应邀出席第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛

10月22日,以“数智创新能动未来”为主题的第三届“嘉庚论坛”—科技创新推动经济高质量发展分论坛于集美海景皇冠假日酒店正式启幕。此论坛聚焦集美区战略前沿产业,汇聚来自全国各地优秀的企业家、高校及科研院所专家学者,并邀请相关领域的亲…

对象补充-原型和函数原型-创建对象

defineProperties可以定义多个属性描述符 var obj {// 私有属性(js里面是没有严格意义的私有属性)_age: 18,_eat: function() {} }Object.defineProperties(obj, {name: {configurable: true,enumerable: true,writable: true,value: "why"}…

Redis快速上手篇七(集群-六台虚拟机)

Redis集群 主从复制的场景无法吗满足主机单点故障时需要引入集群配置 一般数据库要处理的读请求远大于写请求 ,针对这种情况,我们优化数据库可以采用读写分离的策略。我们可以部 署一台主服务器主要用来处理写请求,部署多台从服务器 &#…

C#学习相关系列之多线程---ConfigureAwait的用法

一、ConfigureAwait的作用 ConfigureAwait方法是Task类中的一个实例方法,它用于配置任务的运行上下文。运行上下文指的是任务在执行期间所处的环境,包括线程、同步上下文等。ConfigureAwait方法接受一个布尔值参数,用于决定是否捕获上下文。当…

导弹拦截(最大不上升 或 不下降子序列,dp)

算法分析: 1.求最长子序列 1.每次输入时,计算每个元素对应的序列的长度 1.向前遍历找大于当前元素的数 2.若之前元素对应长度1 大于当前长度,更新当前长度 2.若当前元素对应长度 大于最大长度,更新最大长度 2.dilworth定理 故需…

HarmonyOS开发:NodeJs脚本实现组件化动态切换

前言 上篇文章,我们使用NodeJs脚本完成了HarmonyOS项目的组件化运行,但是由于脚本是基于4.0.0.400版本的DevEco Studio开发的,可能在配置文件的修改上有些许差距,那么遇到这种情况怎么办,一种是再写一套针对性的脚本文…

系列四十二、Spring的事务传播行为案例演示(二)#REQUIRED

一、演示Spring的默认传播行为(REQUIRED) 1.1、运行之前表中的数据 1.2、StockServiceImpl /*** Author : 一叶浮萍归大海* Date: 2023/10/30 15:43* Description:*/ Service(value "stockServiceREQUIRED") public class StockServiceImpl…

MSQL系列(十) Mysql实战-Join驱动表和被驱动表如何区分

Mysql实战-Join驱动表和被驱动表如何区分 前面我们讲解了Mysql的查询连接Join的算法原理, 我发现大家都知道小表驱动大表,要让小表作为驱动表, 现在有2个问题 查询多表, 到底哪个是驱动表?哪个是被驱动表, 如何区分?索引如何优化,到底是加在驱动表上,还是被驱动表上? &…

二维数组如何更快地遍历

二维数组如何更快地遍历 有时候,我们会发现,自己的代码和别人的代码几乎一模一样,但运行时间差了很多,别人是 AC \text{AC} AC,你是 TLE \text{TLE} TLE,这是为什么呢? 一个可能的原因是数组的…

2023高德地图poi资源下载

全国8千万地图poi地图数据:含名称、地址、电话、省份、城市、区县、经纬度、电话等信息

第五章 I/O管理 六、I/O核心子系统

目录 一、核心子系统 1、I/O调度 2、设备保护 二、假脱机技术 1、脱机: 2、假脱机(SPOOLing技术): 3、应用: 1.独占式设备: 2.共享设备: 4、共享打印机原理分析 三、总结 一、核心子系…

metaRTC集成flutter ui demo编译指南

概要 Flutter是由Google开发的开源UI工具包,用于构建跨平台应用程序,支持linux/windows/mac/android/ios等操作系统。 metaRTC新增flutter demo,支持linux/windows/mac/android/ios操作系统,此demo在ubuntu桌面环境下测试成功。…

Jenkins项目部署

使用jenkins部署项目 简易版使用jenkins部署项目 将war包部署到tomcat中 将已有的war包部署到tomcat中(jenkins与tomcat在同一台主机) 点击Jenkins主页的新建任务 输入任务名称 选择构建一个自由风格的软件项目后点击确定 在构建内添加构建步骤,选择执行shell 输入…

时间序列预测大模型-TimeGPT

时间序列预测领域正在经历一个非常激动人心的时期。仅在过去的三年里,我们就看到了许多重要的贡献,例如N-BEATS、N-HiTS、PatchTST和TimesNet。 与此同时,大型语言模型 (LLM)最近在 ChatGPT 等应用程序中广受欢迎,因为它们无需进…

自动化项目实战 [个人博客系统]

自动化博客项目 用户注册登录验证效验个人博客列表页博客数量不为 0 博客系统主页写博客 我的博客列表页效验 刚发布的博客的标题和时间查看 文章详情页删除文章效验第一篇博客 不是 "自动化测试" 注销退出到登录页面,用户名密码为空 用户注册 Order(1)Parameterized…

Spring Cloud之API网关(Zuul)

目录 Zuul 简介 功能 工作流程 搭建 1.引入依赖 2.添加注解 3.路由转发 4.测试 实现原理 EnableZuulProxy注解 ZuulServlet FilterProcessor Zuul内置过滤器 常用配置 Zuul 简介 zuul是SpringCloud子项目的核心组件之一,可以作为微服务架构中的API网…

【C】C语言文件操作

1.为什么使用文件 我们前面学习结构体时,写通讯录的程序,当通讯录运行起来的时候,可以给通讯录中增加、删除数据,此时数据是存放在内存中,当程序退出的时候,通讯录中的数据自然就不存在了,等下…

超全整理,Jmeter性能测试-脚本error报错排查/分布式压测(详全)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 性能脚本error报错…

域名系统 DNS

DNS 概述 域名系统 DNS(Domain Name System)是因特网使用的命名系统,用来把便于人们使用的机器名字转换成为 IP 地址。域名系统其实就是名字系统。为什么不叫“名字”而叫“域名”呢?这是因为在这种因特网的命名系统中使用了许多的“域(domain)”&#x…

S5PV210裸机(九):ADC

本文主要探讨210的ADC相关知识。 ADC ADC:模数转换(模拟信号转数字信号) 量程:模拟电压信号范围(210为0~3.3V) 精度:若10二进制位来表示精度(210为10位或12位),量…