PolarDB MySQL 版 Serverless全方位压测实验测评报告
一、测评前言
之前就一直在用polarDB,现在出了PolarDB MySQL 版 Serverless,对我来说是相当兴奋的,这代表着我们国产的云数据库又向前迈进了一大步,我先看了一下相关的介绍,其实和原来版本变化不大,只是现在兼容了mysql8,并且把serverless融进来了,这样让用户不用太关注升降配的问题,自动调控
阿里云的PolarDB MySQL版云原生数据库,这款产品是一款完全由阿里云自主研发的数据库,百分之百兼容MySQL,提供了强大的多主多写、多活容灾和HTAP等功能,具备多项令人印象深刻的特性。首先,它的交易性能比开源数据库高出六倍,分析性能更是高达四百倍之多。这意味着它可以显著提高应用程序的速度和效率,对于那些依赖于数据库的企业而言,这款产品可以带来惊人的竞争优势。
这款产品的TCO(总持有成本)比传统自建数据库降低了五十个百分点。这意味着企业在维护成本上的投入将大幅度减少,而能获得的服务质量却远超预期。这无疑是对企业投资回报的一个巨大福音。PolarDB MySQL版还提供了良好的兼容性。它支持多种MySQL版本,包括MySQL 5.6、MySQL 5.7和MySQL 8.0,这对于使用旧版本或者升级到最新版本的用户而言都是非常实用的。需要强调一下PolarDB MySQL版的企业级特性,它采用了创新的云原生架构、计算存储分离、软硬件一体化的设计,为企业提供超高弹性和性能、高可用和高可靠保障。作为一个企业,您能够享受安全可靠的数据库服务,而这正是业务正常运营的基础。
详细的可以点链接进行查看云原生数据库 PolarDB-阿里云帮助中心 (aliyun.com)
一、全方位测评
点击立即试用,选择默认交换机,随机创建,把集群名称维护好我们就可以0元获取三个月的使用机会了。
选择试用,绑定好资源后输入网址https://polardb.console.aliyun.com/,这里我们可以看到瑶池数据库
在集群列表页面顶部菜单栏中,切换资源所在地域。
在集群列表页面,找到您的PolarDB实例,单击实例ID。
在基本信息页面的数据库节点区域中,单击右上角的Serverless配置。
在设置Serverless配置参数对话框中,参考如下说明配置参数,单击确定。
参数说明:
单节点资源弹性上限为:32 PCU。
单节点资源弹性下限为:1 PCU。
只读节点个数扩展上限:0。
只读节点个数扩展下限:0。
是否开启无活动暂停:关闭。
定时执行:立即执行
1个PCU的性能约等于1核2GB规格的PolarDB计算节点性能。
客户端对PolarDB发起写请求,验证主节点的Serverless智能弹性能力。通过Sysbench脚本访问集群地址进行压测,PolarDB主节点的规格能够根据负载进行自动伸缩与自动配置,达到Serverless的能力。
在我们的ecs里进行256并发读写混合压测将mysql-host参数修改为您的PolarDB实例的集群私网地址。PolarDB实例的集群私网地址如下。
根据上述信息输入如下命令模拟压测环境
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf69e5l2iwrr4u5je.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
根据Sysbench输出可以直接观察到,随着时间的推移,在同样的并发数下,tps逐渐上升,延迟(lat)逐渐下降,最终到达一个稳定值,这说明PolarDB的处理能力借助Serverless弹性获得提升。
在左侧导航栏中,单击性能监控,在监控页上,单击计算节点,选择压测的时间段。
随着主节点PCU CPU使用率的不断提升,PCU数量从1分钟内从1 PCU弹升到最大上限32 PCU
在我们的ecs里执行Ctrl+C,停止压测脚本。
当压测请求完全停止后,主节点PCU CPU使用率会立即下降,而PCU数量随后也会逐步自动缩小至1 PCU。
对PolarDB发起读请求,验证只读节点的Serverless智能弹性能力。PolarDB for MySQL Serverless集群除了支持主节点自动弹性伸缩之外,还支持创建只读节点分摊主节点的读请求。当使用集群地址时,PolarDB for MySQL Serverless可以基于读负载的比例,智能地调整只读节点的个数和各自的规格,来达到最佳的Serverless能力。继续使用Sysbench工具模拟真实使用场景流量。PolarDB for MySQL Serverless集群主节点PCU扩容到弹升上限后,会自动创建新的只读节点并分摊部分主节点的读负载,最终使整个集群能够支撑更高的TPS请求量。
测试场景一:读写混合压测
在基本信息页面的数据库节点区域中,单击右上角的Serverless配置。在设置Serverless配置参数对话框中,将单节点资源弹升上限调节为16,只读节点个数扩展上限从0调整为最大值7,只读节点个数扩展下限保持0不变,单击确定。
访问PolarDB for MySQL Serverless集群私网地址发起256并发读写混合压测请求。
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf69e5l2iwrr4u5je.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弹性获得提升。
在读写混合场景下,读写流量会首先转发到集群唯一节点,即主节点(RW)中。当主节点弹升到最大规格后,Serverless系统会逐个创建只读节点,分摊主节点的读请求,直到只读节点的数量满足当前负载。当只读节点分摊读请求后,主节点负载会降低,触发PCU弹降,为未来支持更多写负载预留了弹升空间。
在性能监控页上,可以查看到集群维度的Serverless监控指标,选择压测的时间段可以看到分裂节点的信息,从监控可以看出,PolarDB收到读写混合请求后,主节点会首先迅速弹升到最大的32 PCU,之后监控逐步出现两个只读节点。当只读节点分摊主节点的读请求后,主节点CPU使用率逐步下降,规格最终稳定在16 PCU。
第一个只读节点创建后,也会立刻弹升到32 PCU。此时系统会尝试继续创建只读节点,分摊读请求。因此当第二个只读节点创建后,第一个只读节点负载降低,规格自动弹降。最终两个只读节点的规格分别稳定
测试场景二:只读并发压测
Ecs服务器打开一个新终端,原有终端不变,继续运行,我们再发起一个256并发的只读请求
sysbench /usr/share/sysbench/oltp_read_write.lua --mysql-host=pc-uf69e5l2iwrr4u5je.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
在性能监控页上,可以查看到集群维度的Serverless监控指标,选择压测的时间段可以看到分裂节点的信息,也可以在基本信息里看到分裂成三个节点
在ecs上执行Ctrl+C停止所有的Sysbench脚本,然后再查看性能监控可以看到PolarDB for MySQL Serverless的计算节点首先会自动缩容(预计耗时1-2min),之后新增的只读节点会逐步回收,PolarDB for MySQL Serverless的节点数量和规格都能够根据负载进行自动伸缩与自动配置,节点也在20分钟左右全部回收。
使用mysqlsct工具验证RO的无损强一致读的特性。在Serverless默认开启SCC的状态下,PolarDB通过RO实现读扩展,且不会读到不一致的数据。在关闭SCC后,同样测试条件下,使用RO分摊读请求则无法满足强一致,为了更方便地测试RO一致性读,先调整Serverless配置,确保测试过程中,至少保留一个只读节点,在设置Serverless配置参数对话框中,将只读节点个数扩展下限从0调整为1,单击确定
在ecs上输入如下命令,执行后,可以看到一致性检查全部通过
/root/mysqlsct --host-rw=pc-uf69e5l2iwrr4u5je.rwlb.rds.aliyuncs.com --host-ro=pc-uf69e5l2iwrr4u5je.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
选择参数配置。单击页面左上角的修改参数按钮,修改loose_innodb_polar_scc参数为OFF,单击提交修改,单击确定,关闭SCC特性。
返回ecs服务器,重新执行mysqlsct测试命令可以看出执行结果,一致性检查出现失败,PolarDB for MySQL Serverless借助高性能全局一致性SCC特性,提供了跨节点无损读扩展的能力。
三、测评体验
部分压测测评视频如下可以体验观看:
在评测过程中,我对阿里云PolarDB 的Serverless 功能留下了深刻的印象。通过试用和亲身体验了它的各项功能后,个人认为它是一项真正的突破性技术,无论是在处理高并发工作负载还是节省成本方面都表现出了极高的效果。
眼前一亮的功能是它对资源弹性水平的支持,包括资源弹升速度、资源伸缩广度和稳定性以及资源伸缩颗粒度等等方面。例如,资源弹性上限可设定为 32 PCU,下限可设定为 1 PCU,这是一种相当灵活的选择范围。此外,发现对于只有单个主节点的情况来说,它还可以开启“无活动暂停”功能以进一步节约成本。它的资源扩展会根据需要进行自动分配和调整,并且能在极短的时间里完成资源调用过程。这些优点表明该产品的设计者们考虑到了用户可能遇到的各种复杂情况和需求,并且试图尽量减少用户的管理负担。
另外发现对于没有访问需求的情况下,计算资源可缩小到0,并且仅需10秒即可恢复,这种即时性的回应和高效的响应时间大大减少了对存储空间的需求,同时也极大地提高了工作效率,阿里云PolarDB的Serverless功能给我留下了深刻的印象,因为它允许我们在短短几秒钟内快速、轻松地调整资源数量和规格,这是我在其他类似服务中未曾见过的。使用时无需过多担心底层基础架构问题,使我更专注于开发和优化业务逻辑代码。此外,当我想要切换任务或等待更多请求时,它也允许我将资源最小化到零,并且在需要时迅速将其恢复。
在进行的多项实验测试中,尤其是在进行并发读写的压测时,都看到了它的良好表现。无论是进行大量并发读写混合或者只是读取操作时,都表现出了高效稳定的性能。在压测期间,其强大的自动调整和扩展能力,特别是针对读写混合工作负荷时,以及同时处理高并发请求的能力。使用这种方法可以轻松应对高峰时段,并节省大部分不必要的成本支出,因为在低峰期时,可以选择将资源减小甚至降至零。
我还喜欢该服务的高度自动化,可以自动调整只读节点的数量和每个节点的规格,来达到最佳的Serverless功能。在读写混合场景中,系统的响应时间和数据传输速度都让我感到惊讶。我还很赞赏它的强一致性功能,能够保证数据的安全性和可靠性。通过调整参数,PolarDB可以在多核和多节点之间切换和扩展,可以轻松应对任何规模的工作负荷。
还有一个亮点是PolarDB的只读节点提供了无损强一致性的特性,意味着多个只读节点之间保持一致的数据。这意味着当更改了数据库的内容或结构时,可以确保所有节点始终拥有相同的数据。对于关注准确性和安全性的人来说,这是一个极其重要和实用的功能。
通过实时监视系统状态并在控制台中查看详细报表,让我始终保持掌控并了解系统状况。整体感受,PolarDB Serverless是一个在处理不同级别的工作负荷和有效管理成本的同时,提供可靠、高效和灵活的服务,希望阿里云能大力进行推广和渠道销售,让更多的技术人员能了解到这些,并投入企业生产环境中。