云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®)缓存实现极速响应

本文涉及的产品
RDS AI 助手,专业版
RDS MySQL DuckDB 分析主实例,基础系列 4核8GB
RDS MySQL DuckDB 分析主实例,集群系列 4核8GB
简介: 本文介绍了如何通过云端问道21期实操教学,利用云数据库 Tair(兼容 Redis®)缓存实现高并发场景下的极速响应。主要内容分为四部分:方案概览、部署准备、一键部署和完成及清理。方案概览中,展示了如何使用 Redis 提升业务性能,降低响应时间;部署准备介绍了账号注册与充值步骤;一键部署详细讲解了创建 ECS、RDS 和 Redis 实例的过程;最后,通过对比测试验证了 Redis 缓存的有效性,并指导用户清理资源以避免额外费用。

云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应

 

摘要:大家好,今天分享的内容是针对应对高并发利用 Redis 版缓存实现极速响应的 Case ,以及如何实现一键的在线部署。主要分为以下四部分。

1. 方案概览

2. 部署准备

3. 一键部署

4. 完成及清理

 

01. 方案概览

image.png

首先,我们在界面点击在线部署,然后可以看到这里提供了简单的 Demo 方案。

(1) 方案概览:它只在基于由于数据库 Redis 版构件缓存与提速应用,提升业务系统的性能,降低响应时间,使应用能够承担更高的负载。

image.png

(2) 方案架构:可以看到如下图所示,

image.png

我们一键部署脚本会总共创建出云服务器 ECS 实例 云数据库 Redis 以及云数据库 RDS MySQL 版的示例。

image.png

方案示例模拟了员工与部门关联的场景。通过 HTTP API 以部门 ID 为参数获取部门下的员工 ID 以及姓名。数据优先从数据库中查询,选择使用 Redis 作为缓存后首次加载仍然使用数据库查询。之后的查询将会优先从 Redis 中取出结果,在清理掉数据库数据之后,由于缓存有有效期,仍然从 Redis 中查询到结果。本方案的技术架构包括以下基础设施和云服务,专有网络 VPC 交换机,一台云服务器ECS, 云数据库 RDS, MySQL 版示例以及云数据库 Redis 版示例。


02. 部署准备

image.png

(1) 部署准备:请按以下指引完成账号,申请账号,充值 RAM 用户创业和授权等操作。

(2) 准备账号:如果您还没有阿里云账号,请访问阿里云账号注册界面,完成阿里云账号的注册。如果您的阿里云账号中余额不足,请为您的阿里云账号充值。本方案的零资源支持按量付费,且默认设置均采用按量付费引导操作。如果确定任何云资源采用按量付费部署,账户余额都必须大于等于100元。

 

03. 一键部署流程

image.png

下面开始今天的一键部署流程。首先打开一键配置模板链接,前往 ROS 控制台,系统自动打开使用新资源创建的资源栈的面板,并在模板内容区域展现 YAML 文件的详细信息。在这里我们要注意在屏幕的最上方可以选择可用的地域。

image.png

这里我们选择的是杭州可用区。我们选择的是可用区J,首先我们要配置 ECS 示例,这里推荐使用计算型 C6,也就是ECS.C6.Large的规格。

image.png

搜索一下示例规格选择计算型 C6,然后设置实例密码。RDS 只需要配置 RDS 的账号和密码就可以了,账号是默认的,RDS 密码自己选择。这里我们就选用规格的话,就选用它默认指定MySQL.N1e.Medium.1的规格,也就是两个 CPU 的 Call 2GB 内存Redis 的话也是配置密码就可以了。

image.png

我们的规格使用的是 Redis.Shard.Small.2.Ce,账号就是 Redis。这里的数据库的账号在待会 DMS 的控制台登录的时候需要使用,点击下一步即可进入。

image.png

这里会提示创建资源,并且给出价格明细,点击创建,就可以进入创建资源的状态。接下来我们只要等待资源创建完成,就可以进入下一步。我们可以看到资源栈已经创建成功。接下来完成资源栈部署后,我们需要调用模拟服务的初始化接口来导入模拟数据。

image.png

首先,我们接入 ECS 控制台,点击左侧实例与镜像下面的实例。在最上方的定语中,切换到我们刚刚创建实例所使用的杭州地域。看到选取第一个实例,就是我们刚刚新创建出来的实例。然后要部署模拟应用服务。在实例界面,我们找到 ECS,在右侧操作链点击远程连接,点击立即登录。密码就是刚刚我们设置的密码。在终端中执行指定。返回的结果为成功,就代表我们测试数据已经准备完成,相当于我们的这台 ECS 系统已经预先部署了应用服务。

image.png

接下来我们登我们的云数据库 RDS,点击左侧实例列表。点击下方选择地域为我们刚刚买出使用的杭州,点击实例,在右侧点击登录数据库,进入 DMS 管理界面。数据库的账户为 RDS,密码为刚刚我们设置的密码,使用一条 SELECT 的命令来对数据库进行查询。可以查到数据说明,我们的 RDS 的实例是部署成功的。


04. 完成及清理

下面我们已经完成了一台 ECS 实例和 RDS 实例的部署以及验证。接下来我们来验证在有 Redis 缓存和没有 Redis 缓存的情况下,通过应用去从数据库中获取数据的区别,接下来要做的是三个验证的实验。

image.png

(1)通过对比访问带缓存与不带缓存的接口来验证我们的 Redis 缓存是否生效。

(2)可以通过 Locus性能测试来验证缓存是否减轻了数据库的压力。

(3)通过删除数据库中的数据来验证,在数据库失效之后,缓存是否依然可以命中。

4.1 通过对比访问带缓存与不带缓存的接口,验证缓存功能

首先,我们验证第一个方案,通过对比访问,带缓存与不带缓存的接口来验证缓存功能。首先,我们验证不带缓存的接口,通过浏览器来访问接口,将其中的 IP 地址换成ECS的公网 IP 同时可以看到这里的 Cache First 设置成参数为 False,说明我们优先调用数据库,而不是调用缓存来查询,可以看到结果返回的是成功,能够成功查到里面的数据。

image.png

下一步我们要验证带缓存的接口,我们要把后面 Cache First 参数改为 True。再次访问,我们看到返回的 Message 中可以提示我们是 Success From Cache,说明我们的数据查询是成功的,从 Redis 中查到了。

image.png

我们已经完成了对使用缓存和不使用缓存都可以读取数据的验证。接下来我们登录 Redis 云控制台,尝试直接从 Redis 中拿到数据。同样也是左侧点击实例列表在控制台上方选择地域为杭州,选择我们刚刚创建好的实例,点击右侧登录数据库,数据库的账号为 Redis 密码为我们刚刚设置的密码。通过GET给他们执行该的命令,可以查到数据,这就说明数据已经成功的存在我们的 Redis 中了,那这样我们就完成了方案一的验证。

image.png

4.2 通过 Locust 性能测试,验证缓存减轻数据库压力

接下来我们验证方案二,如何通过 Locust 的性能测试来验证缓存减轻数据库的压力。

image.png

首先,我们要在本地安装 Locust 的工具,使用 Pip3 命令来安装工具,然后我们要创建文件 Locust file.py。同时把代码中的站位的脚本名改成 Locust file.py,接下来我们在命令行中直接执行 Locust 的命令。

image.png

打开浏览器访问 Web 界面,在此界面下我们可以使用工具来模拟我们的用户。每秒钟增加的用户数量,并发用户数量以及目标系统的基地址。我们设置为1000 Host我们填写的是 ECS 的公网地址,点击开始,这里我们可以看到压测的一些相关的参数。

image.png

启动测试并执行一段时间后,我们可以点击 Stop 停止测试。登录云数据库 RDS 控制台在实例列表界面找到目标实例,点击监控。一样也要选择我们所在的杭州地域,点击相关实例。

image.png

点击监控与报警,查看流量吞吐和 QPS 可以看到这里的 QPS 达到是550,最高值500~600左右。

image.png

接下来我们来测试缓存的接口,修改我们原来的代码,继续启动,启动新的测试,继续执行,正式执行完毕,我们继续刷新数据监控,查看最新的监控数据。我们可以看到 RDS 测的 QPS 基本上没有变化,只有个位数的 QPS 说明此时的访问基本全都打在了 Redis 缓存上。

image.png

对比前后2次的数据库监控数据可以明显的看出,在测试无缓存接口时,数据库的流量吞吐率,TPS QPS 执行次数等指标发生了显著变化。在处理带缓存的接口时,这些指标则更为平滑。具体来看,无缓存访问时的执行次数峰值接近700。刚刚我们测试的是550左右,而带缓存情况下则稳定在个位数,这表明缓存机制能够有效缓解数据库的压力,我们已经完成了方案二的验证。

4.3 通过删除数据库中的数据,验证缓存命中

接下来我们继续验证方案三,方案三是通过删除数据库中的数据来验证缓存命中。

image.png

我们首先登录语音数据库 RDS 控制台,继续找到我们的实例,登录数据库,要用 DELETE 命名,执行成功,说明数据清理完成。

image.png

接下来我们继续通过缓存接口来访问我们的数据库,可以看到依然能获取数据,但当我们把 Cache First 改成 False。

image.png

可以看到此时的数据已经为空了。第三个方案说明即使是 RDS中的数据已经被删除,我们缓存中依然能够访问到相关的数据,缓存已被正确命中,这样我们就完成了三个方案的验证。

4.4 清理资源

image.png

接下来我们来讲一下,如何清理资源。在本次方案中,我们创建了一台云服务器 ECS实例交换机,专有网络 VPC, 云数据库 RDS ,MySQL版实例和云数据库 Redis 版实例,测试完方案后,可以参照以下规则处理,处理对应产品的实例,避免继续产生费用。首先登录 ROS 控制台,点击左侧资源站,点击上面地域选择杭州,点击第一个实例,进行删除,删除的方式,选择释放资源,确定,开始删除,等待删除完成后,就可以完成资源的释放,到这里我们的一键部署的视频讲解就完成了。

我的分享到此结束,谢谢大家。

相关实践学习
通义万相文本绘图与人像美化
本解决方案展示了如何利用自研的通义万相AIGC技术在Web服务中实现先进的图像生成。
7天玩转云服务器
云服务器ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,可降低 IT 成本,提升运维效率。本课程手把手带你了解ECS、掌握基本操作、动手实操快照管理、镜像管理等。了解产品详情: https://www.aliyun.com/product/ecs
相关文章
|
10月前
|
缓存 NoSQL 关系型数据库
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
美团面试:MySQL有1000w数据,redis只存20w的数据,如何做 缓存 设计?
|
5月前
|
缓存 负载均衡 监控
135_负载均衡:Redis缓存 - 提高缓存命中率的配置与最佳实践
在现代大型语言模型(LLM)部署架构中,缓存系统扮演着至关重要的角色。随着LLM应用规模的不断扩大和用户需求的持续增长,如何构建高效、可靠的缓存架构成为系统性能优化的核心挑战。Redis作为业界领先的内存数据库,因其高性能、丰富的数据结构和灵活的配置选项,已成为LLM部署中首选的缓存解决方案。
|
6月前
|
存储 缓存 NoSQL
Redis专题-实战篇二-商户查询缓存
本文介绍了缓存的基本概念、应用场景及实现方式,涵盖Redis缓存设计、缓存更新策略、缓存穿透问题及其解决方案。重点讲解了缓存空对象与布隆过滤器的使用,并通过代码示例演示了商铺查询的缓存优化实践。
286 1
Redis专题-实战篇二-商户查询缓存
|
10月前
|
缓存 NoSQL Java
Redis+Caffeine构建高性能二级缓存
大家好,我是摘星。今天为大家带来的是Redis+Caffeine构建高性能二级缓存,废话不多说直接开始~
1345 0
|
5月前
|
缓存 运维 监控
Redis 7.0 高性能缓存架构设计与优化
🌟蒋星熠Jaxonic,技术宇宙中的星际旅人。深耕Redis 7.0高性能缓存架构,探索函数化编程、多层缓存、集群优化与分片消息系统,用代码在二进制星河中谱写极客诗篇。
|
6月前
|
缓存 NoSQL 关系型数据库
Redis缓存和分布式锁
Redis 是一种高性能的键值存储系统,广泛用于缓存、消息队列和内存数据库。其典型应用包括缓解关系型数据库压力,通过缓存热点数据提高查询效率,支持高并发访问。此外,Redis 还可用于实现分布式锁,解决分布式系统中的资源竞争问题。文章还探讨了缓存的更新策略、缓存穿透与雪崩的解决方案,以及 Redlock 算法等关键技术。
|
9月前
|
缓存 NoSQL 算法
高并发秒杀系统实战(Redis+Lua分布式锁防超卖与库存扣减优化)
秒杀系统面临瞬时高并发、资源竞争和数据一致性挑战。传统方案如数据库锁或应用层锁存在性能瓶颈或分布式问题,而基于Redis的分布式锁与Lua脚本原子操作成为高效解决方案。通过Redis的`SETNX`实现分布式锁,结合Lua脚本完成库存扣减,确保操作原子性并大幅提升性能(QPS从120提升至8,200)。此外,分段库存策略、多级限流及服务降级机制进一步优化系统稳定性。最佳实践包括分层防控、黄金扣减法则与容灾设计,强调根据业务特性灵活组合技术手段以应对高并发场景。
2461 7
|
10月前
|
消息中间件 缓存 NoSQL
基于Spring Data Redis与RabbitMQ实现字符串缓存和计数功能(数据同步)
总的来说,借助Spring Data Redis和RabbitMQ,我们可以轻松实现字符串缓存和计数的功能。而关键的部分不过是一些"厨房的套路",一旦你掌握了这些套路,那么你就像厨师一样可以准备出一道道饕餮美食了。通过这种方式促进数据处理效率无疑将大大提高我们的生产力。
318 32
|
10月前
|
缓存 NoSQL Java
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
251 5
Redis:现代服务端开发的缓存基石与电商实践-优雅草卓伊凡
|
10月前
|
NoSQL 算法 安全
redis分布式锁在高并发场景下的方案设计与性能提升
本文探讨了Redis分布式锁在主从架构下失效的问题及其解决方案。首先通过CAP理论分析,Redis遵循AP原则,导致锁可能失效。针对此问题,提出两种解决方案:Zookeeper分布式锁(追求CP一致性)和Redlock算法(基于多个Redis实例提升可靠性)。文章还讨论了可能遇到的“坑”,如加从节点引发超卖问题、建议Redis节点数为奇数以及持久化策略对锁的影响。最后,从性能优化角度出发,介绍了减少锁粒度和分段锁的策略,并结合实际场景(如下单重复提交、支付与取消订单冲突)展示了分布式锁的应用方法。
768 3