云端问道21期实操教学-应对高并发,利用云数据库 Tair(兼容 Redis®*)缓存实现极速响应
摘要:大家好,今天分享的内容是针对应对高并发利用 Redis 版缓存实现极速响应的 Case ,以及如何实现一键的在线部署。主要分为以下四部分。
1. 方案概览
2. 部署准备
3. 一键部署
4. 完成及清理
01. 方案概览
首先,我们在界面点击在线部署,然后可以看到这里提供了简单的 Demo 方案。
(1) 方案概览:它只在基于由于数据库 Redis 版构件缓存与提速应用,提升业务系统的性能,降低响应时间,使应用能够承担更高的负载。
(2) 方案架构:可以看到如下图所示,
我们一键部署脚本会总共创建出云服务器 ECS 实例 云数据库 Redis 以及云数据库 RDS MySQL 版的示例。
方案示例模拟了员工与部门关联的场景。通过 HTTP API 以部门 ID 为参数获取部门下的员工 ID 以及姓名。数据优先从数据库中查询,选择使用 Redis 作为缓存后首次加载仍然使用数据库查询。之后的查询将会优先从 Redis 中取出结果,在清理掉数据库数据之后,由于缓存有有效期,仍然从 Redis 中查询到结果。本方案的技术架构包括以下基础设施和云服务,专有网络 VPC 交换机,一台云服务器ECS, 云数据库 RDS, MySQL 版示例以及云数据库 Redis 版示例。
02. 部署准备
(1) 部署准备:请按以下指引完成账号,申请账号,充值 RAM 用户创业和授权等操作。
(2) 准备账号:如果您还没有阿里云账号,请访问阿里云账号注册界面,完成阿里云账号的注册。如果您的阿里云账号中余额不足,请为您的阿里云账号充值。本方案的零资源支持按量付费,且默认设置均采用按量付费引导操作。如果确定任何云资源采用按量付费部署,账户余额都必须大于等于100元。
03. 一键部署流程
下面开始今天的一键部署流程。首先打开一键配置模板链接,前往 ROS 控制台,系统自动打开使用新资源创建的资源栈的面板,并在模板内容区域展现 YAML 文件的详细信息。在这里我们要注意在屏幕的最上方可以选择可用的地域。
这里我们选择的是杭州可用区。我们选择的是可用区J,首先我们要配置 ECS 示例,这里推荐使用计算型 C6,也就是ECS.C6.Large的规格。
搜索一下示例规格选择计算型 C6,然后设置实例密码。RDS 只需要配置 RDS 的账号和密码就可以了,账号是默认的,RDS 密码自己选择。这里我们就选用规格的话,就选用它默认指定MySQL.N1e.Medium.1的规格,也就是两个 CPU 的 Call 2GB 内存Redis 的话也是配置密码就可以了。
我们的规格使用的是 Redis.Shard.Small.2.Ce,账号就是 Redis。这里的数据库的账号在待会 DMS 的控制台登录的时候需要使用,点击下一步即可进入。
这里会提示创建资源,并且给出价格明细,点击创建,就可以进入创建资源的状态。接下来我们只要等待资源创建完成,就可以进入下一步。我们可以看到资源栈已经创建成功。接下来完成资源栈部署后,我们需要调用模拟服务的初始化接口来导入模拟数据。
首先,我们接入 ECS 控制台,点击左侧实例与镜像下面的实例。在最上方的定语中,切换到我们刚刚创建实例所使用的杭州地域。看到选取第一个实例,就是我们刚刚新创建出来的实例。然后要部署模拟应用服务。在实例界面,我们找到 ECS,在右侧操作链点击远程连接,点击立即登录。密码就是刚刚我们设置的密码。在终端中执行指定。返回的结果为成功,就代表我们测试数据已经准备完成,相当于我们的这台 ECS 系统已经预先部署了应用服务。
接下来我们登我们的云数据库 RDS,点击左侧实例列表。点击下方选择地域为我们刚刚买出使用的杭州,点击实例,在右侧点击登录数据库,进入 DMS 管理界面。数据库的账户为 RDS,密码为刚刚我们设置的密码,使用一条 SELECT 的命令来对数据库进行查询。可以查到数据说明,我们的 RDS 的实例是部署成功的。
04. 完成及清理
下面我们已经完成了一台 ECS 实例和 RDS 实例的部署以及验证。接下来我们来验证在有 Redis 缓存和没有 Redis 缓存的情况下,通过应用去从数据库中获取数据的区别,接下来要做的是三个验证的实验。
(1)通过对比访问带缓存与不带缓存的接口来验证我们的 Redis 缓存是否生效。
(2)可以通过 Locus性能测试来验证缓存是否减轻了数据库的压力。
(3)通过删除数据库中的数据来验证,在数据库失效之后,缓存是否依然可以命中。
4.1 通过对比访问带缓存与不带缓存的接口,验证缓存功能
首先,我们验证第一个方案,通过对比访问,带缓存与不带缓存的接口来验证缓存功能。首先,我们验证不带缓存的接口,通过浏览器来访问接口,将其中的 IP 地址换成ECS的公网 IP 同时可以看到这里的 Cache First 设置成参数为 False,说明我们优先调用数据库,而不是调用缓存来查询,可以看到结果返回的是成功,能够成功查到里面的数据。
下一步我们要验证带缓存的接口,我们要把后面 Cache First 参数改为 True。再次访问,我们看到返回的 Message 中可以提示我们是 Success From Cache,说明我们的数据查询是成功的,从 Redis 中查到了。
我们已经完成了对使用缓存和不使用缓存都可以读取数据的验证。接下来我们登录 Redis 云控制台,尝试直接从 Redis 中拿到数据。同样也是左侧点击实例列表在控制台上方选择地域为杭州,选择我们刚刚创建好的实例,点击右侧登录数据库,数据库的账号为 Redis 密码为我们刚刚设置的密码。通过GET给他们执行该的命令,可以查到数据,这就说明数据已经成功的存在我们的 Redis 中了,那这样我们就完成了方案一的验证。
4.2 通过 Locust 性能测试,验证缓存减轻数据库压力
接下来我们验证方案二,如何通过 Locust 的性能测试来验证缓存减轻数据库的压力。
首先,我们要在本地安装 Locust 的工具,使用 Pip3 命令来安装工具,然后我们要创建文件 Locust file.py。同时把代码中的站位的脚本名改成 Locust file.py,接下来我们在命令行中直接执行 Locust 的命令。
打开浏览器访问 Web 界面,在此界面下我们可以使用工具来模拟我们的用户。每秒钟增加的用户数量,并发用户数量以及目标系统的基地址。我们设置为1000 Host我们填写的是 ECS 的公网地址,点击开始,这里我们可以看到压测的一些相关的参数。
启动测试并执行一段时间后,我们可以点击 Stop 停止测试。登录云数据库 RDS 控制台在实例列表界面找到目标实例,点击监控。一样也要选择我们所在的杭州地域,点击相关实例。
点击监控与报警,查看流量吞吐和 QPS 可以看到这里的 QPS 达到是550,最高值500~600左右。
接下来我们来测试缓存的接口,修改我们原来的代码,继续启动,启动新的测试,继续执行,正式执行完毕,我们继续刷新数据监控,查看最新的监控数据。我们可以看到 RDS 测的 QPS 基本上没有变化,只有个位数的 QPS 说明此时的访问基本全都打在了 Redis 缓存上。
对比前后2次的数据库监控数据可以明显的看出,在测试无缓存接口时,数据库的流量吞吐率,TPS QPS 执行次数等指标发生了显著变化。在处理带缓存的接口时,这些指标则更为平滑。具体来看,无缓存访问时的执行次数峰值接近700。刚刚我们测试的是550左右,而带缓存情况下则稳定在个位数,这表明缓存机制能够有效缓解数据库的压力,我们已经完成了方案二的验证。
4.3 通过删除数据库中的数据,验证缓存命中
接下来我们继续验证方案三,方案三是通过删除数据库中的数据来验证缓存命中。
我们首先登录语音数据库 RDS 控制台,继续找到我们的实例,登录数据库,要用 DELETE 命名,执行成功,说明数据清理完成。
接下来我们继续通过缓存接口来访问我们的数据库,可以看到依然能获取数据,但当我们把 Cache First 改成 False。
可以看到此时的数据已经为空了。第三个方案说明即使是 RDS中的数据已经被删除,我们缓存中依然能够访问到相关的数据,缓存已被正确命中,这样我们就完成了三个方案的验证。
4.4 清理资源
接下来我们来讲一下,如何清理资源。在本次方案中,我们创建了一台云服务器 ECS实例交换机,专有网络 VPC, 云数据库 RDS ,MySQL版实例和云数据库 Redis 版实例,测试完方案后,可以参照以下规则处理,处理对应产品的实例,避免继续产生费用。首先登录 ROS 控制台,点击左侧资源站,点击上面地域选择杭州,点击第一个实例,进行删除,删除的方式,选择释放资源,确定,开始删除,等待删除完成后,就可以完成资源的释放,到这里我们的一键部署的视频讲解就完成了。
我的分享到此结束,谢谢大家。