前言
Serverless数据库是随着Serverless架构的发展而兴起的一种数据库服务模式,它将数据库的部署、运维、扩展等工作交给云服务商来完成,用户只需关注数据库的使用即可。
Serverless数据库具有以下优势:
- 高弹性:Serverless数据库可以根据业务需求进行弹性伸缩,在业务高峰时自动扩容,在业务低谷时自动缩容,帮助用户降低成本。
- 低成本:Serverless数据库采用按需付费的模式,用户只需为实际使用的资源付费,可以帮助用户节省数据库的成本。
- 易用性:Serverless数据库的部署、运维等工作都由云服务商来完成,用户只需关注数据库的使用即可,降低了数据库的使用门槛。
随着Serverless架构的不断发展,Serverless数据库将会更加普及,其优势也将更加明显。未来,Serverless数据库将在以下几个方面继续发展:
- 支持更多数据库类型:目前,Serverless数据库主要支持关系型数据库,未来将会支持NoSQL数据库、时序数据库等更多数据库类型。
- 提供更细粒度的资源伸缩:目前,Serverless数据库的资源伸缩颗粒度相对较大,未来将会提供更细粒度的资源伸缩,满足不同业务场景的需求。
- 支持更灵活的资源伸缩策略:目前,Serverless数据库的资源伸缩策略相对较为简单,未来将会支持更灵活的资源伸缩策略,满足不同业务需求。
正如阿里云的官方文档中上图,对于Serverless数据库与普通数据库在资源使用对比图描述的情况,我们可以看到Serverless数据库集群的强大生命力。
PolarDB MySQL版Serverless提供了CPU、内存、存储、网络资源的实时弹性能力,构建计算与存储分离架构下的PolarDB MySQL版产品新形态。Serverless不仅提供网络资源、命名空间、存储空间的垂直资源隔离能力,还提供计算存储资源按需计费的能力,具有资源用量低、简单易用、弹性灵活和价格低廉等优点,赋能用户面向业务峰谷时对计算、存储能力进行快速且独立的扩缩要求,做到快速响应业务变化的同时,合理优化使用成本,进一步助力企业降本增效。
PolarDB 数据库的成长史
Polar数据库是阿里云自研的云原生关系型数据库。
Polar数据库采用了云原生架构,具有高性能、高可用、高扩展性等特点。
Polar数据库的发展可以分为以下几个阶段:
- 2020年:Polar数据库正式发布,支持MySQL协议,提供单机、双机高可用、多活容灾等部署模式。
- 2021年:Polar数据库支持HTAP(混合事务分析处理)能力,可以满足OLTP和OLAP的双重需求。
- 2022年:Polar数据库推出Serverless版本,可以根据业务需求进行弹性伸缩,帮助用户降低成本。
Polar数据库相对普通数据库的优势
Polar数据库相对于普通数据库具有以下优势:
- 高性能:Polar数据库采用了云原生架构,具有高性能、高可用、高扩展性等特点。在测试中,Polar数据库的性能与传统数据库相比基本无差异。
- 低成本:Polar数据库采用了按需付费的模式,可以根据业务需求进行资源伸缩,帮助用户降低成本。
- 易用性:Polar数据库提供了简单易用的管理界面,可以帮助用户快速部署和管理数据库。
PolarDB MySQL版与普通的MySQL数据库有哪些异同
PolarDB MySQL版与普通的MySQL数据库在以下方面存在异同:
异同
- 相同点
- 兼容MySQL协议,可以使用MySQL的所有常用功能和命令。
- 支持MySQL的生态系统,可以与MySQL的第三方工具和应用程序无缝集成。
- 不同点
- 架构:PolarDB MySQL版采用了云原生架构,具有高性能、高可用、高扩展性等特点。
- 性能:PolarDB MySQL版的性能与传统数据库相比基本无差异。
- 成本:PolarDB MySQL版采用了按需付费的模式,可以根据业务需求进行资源伸缩,帮助用户降低成本。
具体的异同
- 架构
- PolarDB MySQL版采用了云原生架构,将数据库的部署、运维、扩展等工作交给云服务商来完成,用户只需关注数据库的使用即可。
- 传统的MySQL数据库由用户自行部署、运维,需要用户具备一定的数据库管理能力。
- 性能
- PolarDB MySQL版采用了云原生架构,可以充分利用云计算的资源优势,提升数据库的性能。
- 传统的MySQL数据库的性能受限于用户的硬件资源,难以满足高并发、大数据量的业务需求。
- 成本
- PolarDB MySQL版采用了按需付费的模式,用户只需为实际使用的资源付费,可以帮助用户节省数据库的成本。
- 传统的MySQL数据库采用了预付费的模式,用户需要提前购买固定数量的资源,即使实际使用量不足,也需要支付全额费用。
当我们明白了,这款产品的价值之后,我们对其进行详细的体验。
PolarDB MySQL版本
MySQL 5.7版本和MySQL 8版本是目前最常见的MySQL版本:
- 兼容性:MySQL 5.7版本和MySQL 8版本与之前的MySQL版本兼容性良好,用户可以无缝迁移现有应用。
- 稳定性:MySQL 5.7版本和MySQL 8版本经过了长期的测试和验证,具有良好的稳定性。
- 功能:MySQL 5.7版本和MySQL 8版本提供了丰富的功能,满足用户的各种需求。
具体来说,MySQL 5.7版本是MySQL的长期支持版本,于2013年发布,将于2023年10月31日停止支持。
MySQL 8版本是MySQL的最新版本,于2018年发布,具有许多新特性和改进,例如:
- InnoDB存储引擎的改进
- JSON数据类型的支持
- 流式查询的支持
- 多主复制模式的支持
因此,MySQL 5.7版本和MySQL 8版本是目前最合适的MySQL版本。
以下是一些查询的资料显示的具体的数据,可以辅助说明MySQL 5.7版本和MySQL 8版本的普及程度:
- 在Stack Overflow的2023年开发者调查中,MySQL是使用最广泛的数据库,其中MySQL 5.7版本占比37.7%,MySQL 8版本占比26.8%。
- 根据W3Techs的数据,在2023年12月,使用MySQL的数据库网站中,MySQL 5.7版本占比45.5%,MySQL 8版本占比31.9%。
PolarDB 紧紧地围绕MySQL的最稳定版本,同时支持小版本的兼容,可以让用户无感的快速迁入使用。
在购买PolarDB 数据库时,体现了Serverless数据库的优势,可以按需,选择相应的配置,不至于资源浪费,有效的控制成本。
开通后,由独立的域名(https://polardb.console.aliyun.com/overview)进行资源访问,这块建议可以融合下,在阿里云资源看板,放置快捷入口。
对于其官方文档(https://help.aliyun.com/zh/polardb/polardb-for-mysql/?spm=a2c4g.11186623.0.0.58f67f32yp56t5),信息比较丰富,但是个人感觉,缺失了PolarDB 数据库与MySQL的对比。对于PolarDB 来讲,同时也有分布式版、PostgreSQL版等,又有什么样的异同,用户如何快速选择。可以增加更多的指引性信息。
Serverless数据库 PolarDB
点击集群ID实例,进行集群详情。当前集群详情,采用了一主一从两个数据库节点,资源伸缩广度上,PolarDB支持自动纵向扩展(0~32核)和横向扩展(0~8个节点),支持0~256核范围内伸缩;资源伸缩的颗粒度,PolarDB支持最小0.5PCU颗粒度的资源伸缩
PolarDB 以计算能力(PCU)定价,真正做到按量付费,帮助客户节省成本。成本下降最高可达80%。用户在使用时使用Serverless的弹性配置进行灵活选择资源大小。
tips:PCU(处理器核心单元)是一种用于衡量容器资源消耗的单位。PCU(PolarDB Capacity Unit):1个PCU的性能约等于1核2GB规格的PolarDB计算节点性能。
点击Serverless配置按钮,进行集群的Serverless参数配置
支持上文说的灵活的资源伸缩。
开启无活动暂停,可以配置检测时长,当在时长范围内,服务无访问需要,服务可将资源置为0,保证不浪费资源。
资源弹升速度非常优秀,迅速的完成的资源的伸缩
主节点Serverless弹性压测
点击Serverless配置按钮,调整配置为下图所示:
模拟客户端对PolarDB发起写请求,验证主节点的Serverless智能弹性能力。
通过Sysbench脚本访问集群地址进行压测,PolarDB主节点的规格能够根据负载进行自动伸缩与自动配置,达到Serverless的能力。
tips: Sysbench是一款开源的多线程性能测试工具,可以执行数据库只读、只写、读写混合等类型的性能测试。
连接控制台,执行性能测试工具命令,
初始化数据代码如下:
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf6qu5ij9wp2ruyfg.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 prepare
执行读写混合的压测类型(oltp_read_write),并发数为32线程。创建128张表,然后分别插入1000000条记录
正式压力测试,代码如下:
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf6qu5ij9wp2ruyfg.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
随着时间的推移,在同样的并发数下,tps逐渐上升,延迟(lat)逐渐下降,最终到达一个稳定值,这说明PolarDB的处理能力借助Serverless弹性获得提升。
在控制台集群实例详情内点击性能监控,会看到我们压测的结果,说明了PolarDB的弹性伸缩的能力。
只读节点Serverless弹性压测
PolarDB for MySQL Serverless集群除了支持主节点自动弹性伸缩之外,还支持创建只读节点分摊主节点的读请求。当使用集群地址时,PolarDB for MySQL Serverless可以基于读负载的比例,智能地调整只读节点的个数和各自的规格,来达到最佳的Serverless能力。
PolarDB for MySQL Serverless集群主节点PCU扩容到弹升上限后,会自动创建新的只读节点并分摊部分主节点的读负载,最终使整个集群能够支撑更高的TPS请求量。
场景一:读写混合压测
调整参数配置,用于后续的测试。
继续使用压测工具,执行以下代码:
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf6qu5ij9wp2ruyfg.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
效果很明显,和上一节测试类似,从Sysbench输出可以直接观察到,随着时间的推移,在同样的并发数下,tps逐渐上升,延迟(lat)逐渐下降,最终到达一个稳定值。这说明PolarDB的处理能力借助Serverless弹性获得提升。
同样,我们回到性能监控页面,能够看到
PolarDB收到读写混合请求后,主节点会首先迅速弹升到最大的32 PCU,之后监控逐步出现两个只读节点。当只读节点分摊主节点的读请求后,主节点CPU使用率逐步下降,规格最终稳定在22 PCU。
场景二:只读并发压测
(一)自动扩容能力测试
执行代码
sysbench /usr/share/sysbench/oltp_read_only.lua --mysql-host=pc-uf6qu5ij9wp2ruyfg.rwlb.rds.aliyuncs.com --mysql-port=3306--mysql-user=test_user --mysql-password=Password123 --mysql-db=sbtest --tables=128--table-size=1000000--report-interval=1--range_selects=1--db-ps-mode=disable --rand-type=uniform --threads=256--time=12000 run
可以看到节点自动增加
性能监控处,也验证了资源的相关变化
(二)自动缩容能力测试
当执行脚本停止后,节点会自动缩容
全局数据强一致性
PolarDB for MySQL Serverless实例默认开启严格强一致性集群SCC(Strict Consistency Cluster)服务。SCC功能为PolarDB for MySQL Serverless提供了跨节点无损读扩展的能力。PolarTrans事务系统利用提交时间戳技术CTS和RDMA网络,在内核层面提供集群强一致性读SCC服务,在不损失性能的基础上,保证发往集群任意副本的读请求都可以获得强一致性的结果。
开源的mysqlsct工具用于检验数据库集群的强一致性读能力, 该工具通过跨session的写入+读取+结果对比的方式来测试数据库集群强一致性读的功能和性能。
重新进行serverless参数配置,调整为只读上限7下限1,如下图所示:
执行代码命令
/root/mysqlsct --host-rw=pc-uf6qu5ij9wp2ruyfg.rwlb.rds.aliyuncs.com --host-ro=pc-uf6qu5ij9wp2ruyfg.rwlb.rds.aliyuncs.com --port-rw=3306--port-ro=3306--user=test_user --password=Password123 --iterations=100000--table-cnt=1--table-size=1000-f=0--concurrency=1--database=sct --sc-gap-us=0--report-interval=2--test-mode=sct
执行后,可以看到一致性检查全部通过,输出的信息如下截图:
回到控制台,改变参数配置,关闭SCC能力
等待修改完成
重新执行测试命令,此时将出现错误
PolarDB for MySQL Serverless借助高性能全局一致性SCC特性,提供了跨节点无损读扩展的能力。
总结
- 资源弹升速度
PolarDB Serverless的资源弹升速度非常快,从0核到32核,探测窗口5秒,弹升时间约为1秒。
- 资源伸缩广度
PolarDB Serverless支持自动纵向扩展(0~32核)和横向扩展(0~8个节点),支持0~256核范围内伸缩。
- 资源伸缩的稳定性
PolarDB Serverless支持对业务无感的纵向扩缩容与横向扩展,在测试中,在进行资源扩展或缩减时,业务均没有受到影响。
- 资源伸缩的颗粒度
PolarDB Serverless支持最小0.5PCU颗粒度的资源伸缩,可以满足不同业务场景下的资源需求。
- 可支持自动启停
PolarDB Serverless可支持在没有访问需求时,计算资源可缩为0。当有访问需求时,10秒即可唤醒资源。
- 全局数据的强一致性
PolarDB Serverless可支持所有只读节点的数据强一致性,并且性能不下降。
与同类型产品对比
PolarDB Serverless与同类型产品相比,在资源弹升速度、资源伸缩广度、资源伸缩的稳定性、资源伸缩的颗粒度、可支持自动启停等方面均具有优势。
- 资源弹升速度
PolarDB Serverless的资源弹升速度最快,可以满足突发流量的需求。
- 资源伸缩广度
PolarDB Serverless支持0~256核范围内的伸缩,可以满足不同业务场景下的资源需求。
- 资源伸缩的稳定性
PolarDB Serverless支持对业务无感的资源伸缩,可以保障业务的连续性。
- 资源伸缩的颗粒度
PolarDB Serverless支持最小0.5PCU颗粒度的资源伸缩,可以满足不同业务场景下的资源需求。
- 可支持自动启停
PolarDB Serverless可支持在没有访问需求时,计算资源可缩为0,可以帮助用户降低成本。
反馈与建议
总体而言,PolarDB Serverless的Serverless能力非常优秀,在资源弹升速度、资源伸缩广度、资源伸缩的稳定性、资源伸缩的颗粒度、可支持自动启停等方面均具有优势。
对于PolarDB Serverless,我有以下反馈与建议:
- 可以提供更多细粒度的资源伸缩颗粒度
目前,PolarDB Serverless支持的最小资源伸缩颗粒度为0.5PCU,可以满足大多数业务场景的需求。但是,对于一些对性能要求很高的业务场景,可能需要更细粒度的资源伸缩颗粒度。
- 可以提供更灵活的资源伸缩策略
目前,PolarDB Serverless提供的资源伸缩策略相对比较简单,仅支持根据CPU使用率来进行伸缩。可以考虑提供更灵活的资源伸缩策略,例如根据业务流量、业务指标等来进行伸缩。
PolarDB Serverless的优势
PolarDB Serverless的优势主要体现在以下几个方面:
- 高性能
PolarDB Serverless采用了云原生架构,具有高性能、高可用、高扩展性等特点。在测试中,PolarDB Serverless的性能与传统数据库相比基本无差异。
- 低成本
PolarDB Serverless采用了按需付费的模式,可以根据业务需求进行资源伸缩,帮助用户降低成本。
- 易用性
PolarDB Serverless提供了简单易用的管理界面,可以帮助用户快速部署和管理数据库。
PolarDB Serverless的应用场景
PolarDB Serverless适用于以下场景:
- 对性能要求较高的业务场景,例如电商、金融、游戏等。
- 对成本敏感的业务场景,例如中小企业、创业公司等。
- 对弹性需求较高的业务场景,例如突发流量、季节性业务等。
PolarDB Serverless的未来发展
PolarDB Serverless是阿里云云原生数据库的最新产品,具有很大的发展潜力。未来,PolarDB Serverless有望在以下几个方面进行改进和完善:
- 提供更细粒度的资源伸缩颗粒度,满足不同业务场景的需求。
- 提供更灵活的资源伸缩策略,满足不同业务需求。
- 支持更多数据库类型,满足不同用户的需求。