一、引言
随着业务的不断发展,应用系统面临的流量压力日益增大。如何在高并发场景下降低系统响应时间、提升整体性能,成为每一位开发人员需要攻克的关键课题。使用缓存,无疑是解决这一问题的首选方案。今天,我们为您介绍如何运用云数据库 Tair 构建缓存,助力应用提速、优化性能。
为什么选择云数据库 Tair 构建缓存?
缓存是一种数据存储机制,通过在高速存储介质中暂存频繁请求的数据,减少对主存储或数据库的直接访问,从而提高系统性能和响应速度。根据应用需求、数据特性和系统架构的不同,构建缓存的方式也是灵活多样。云数据库 Tair 是兼容开源 Redis 协议标准的数据库服务,适用于缓存、实时流数据处理等场景,具有稳定可靠、弹性扩展、易用高效等特点,并支持多种数据结构和高级功能。
核心优势:
- 高性能存储服务:提供了高性能的键值存储服务,可以满足各种业务场景的需求。采用多线程模型,读写性能达到同规格云数据库 Redis 社区版实例的数倍,能够有效地提高应用的响应速度。
- 高可用性和弹性伸缩:基于双机热备架构及集群架构,支持自动扩容,提供多种高可用方案,可以根据业务需求动态调整实例规格和容量,帮助您快速弹性适配业务高峰,避免内存溢出的风险,有效保障线上业务稳定性。
- 丰富数据类型支持:提供丰富的自研增强型数据结构,包括 exString(包含Redis String 命令增强)、exHash、exZset、GIS、Bloom、Doc、TS、Cpc、Roaring、Search 和Vector,帮助您精简代码并提高业务整体性能。
二、方案展示
1. 通过对比访问带缓存与不带缓存的接口,验证缓存功能
通过ECS实例的公网IP访问应用接口,通过不同参数验证方案。
验证不带缓存的接口
通过浏览器访问http:///getAllEmployeesInDepartment?departmentId=1&cacheFirst=false接口,返回值为:
通过浏览器访问
http:///getAllEmployeesInDepartment?departmentId=1&cacheFirst=true接口,此时再次访问此接口,返回值为:
可见message字段中提示当前数据从缓存中读取。
验证缓存数据:
i. 登录云数据库 Tair 控制台,在实例列表页面,找到目标实例,点击实例名称;
ii. 在新页面点击登录数据库,如出现了登录实例对话框,输入数据库账号(此处为redis)密码(此处为用户设置的密码),安全托管可以选择不开启,管控模式选择自由操作,点击登录。
iii. 在SQLConsole中输入:GET department:1
可以看到执行历史中返回值为接口数据:
2. 通过Locust性能测试,验证缓存减轻数据库压力
为了进一步验证方案在高并发场景下数据库的压力情况,我们使用负载测试工具 Locust(参考官方文档安装) 进行测试。
性能测试:无缓存接口
i. 创建文件locustfile.py,完整代码如下:
ii. 在命令行中运行locust启动 Locust。
打开浏览器,访问 Locust Web 界面 http://localhost:8089,如图所示填写新的测试参数。
参数说明:
- Number of users:并发用户数量。
- Ramp up:即每秒钟增加的用户数量。
- Host:目标系统的基地址,例如:http://。
iii. 启动测试并执行一段时间后,点击 Stop 停止测试。
iv. 登录云数据库RDS控制台,在实例列表页面,找到目标实例,点击监控。
性能测试:缓存接口
i. 修改locustfile.py代码如下:
ii. 在命令行中运行locust启动 Locust,参考上一步的操作,完成测试,并查看RDS监控。
对比分析:
对比前后两次的数据库监控数据,可以明显看出,在测试无缓存接口时,数据库的流量吞吐量、TPS/QPS、执行次数等指标发生了显著变化,出现了一个处理波峰。而在访问带缓存的接口时,这些指标则更为平滑。具体来看,无缓存访问时的执行次数峰值接近700,而带缓存的情况下则稳定在个位数。这表明缓存机制能够有效缓解数据库的压力。
3. 通过删除数据库中的数据,验证缓存命中
清理数据库中的数据记录:
i. 登录云数据库RDS控制台,在实例列表页面,找到目标实例,点击实例名称;
ii. 在新页面点击登录数据库,如出现了登录实例对话框,输入数据库账号(此处为rds)密码(此处为用户设置的密码),管控模式选择自由操作,点击登录。
iii. 在SQLConsole窗口中输入
当执行历史出现提示:
说明数据清理完成。
访问缓存接口:
通过浏览器访问http://<公网IP>/getAllEmployeesInDepartment?departmentId=1&cacheFirst=true接口,返回值为:
可见 message 字段中提示当前数据从缓存中读取,说明缓存已被正确命中。
来源 | 阿里云开发者公众号