通过DTS数据订阅功能,用户可实时同步RDS日志变更到Redis,实现缓存更新和MySQL与Redis间的一致性。这种Cache-Aside Pattern模式通过DTS服务确保数据同步的高效性和稳定性,优化商品信息和账单信息的实时同步与查询性能,提升系统响应速度。
实时同步RDS与Redis构建缓存一致性方案的优势
通过DTS订阅功能实时订阅Binlog数据,实现MySQL与Redis异构数据库之间的数据实时同步,保证数据的实时性和一致性。
数据传输服务DTS订阅功能,高服务化能力保证同步链路的易用性和稳定性,针对同步链路异常、链路延迟等事件及时告警、通知。
提供DTS订阅MySQL BINLOG日志数据变更事件获取,关系型结构和KV结构逻辑映射,以及缓存更新Redis的代码端到端的示例。
实时同步RDS与Redis构建缓存一致性。通过RDS MySQL+DTS+Redis的架构,实现RDS MySQL与Redis缓存之间的数据同步和一致性。通过实时同步MySQL数据库数据到Redis缓存,提高数据查询速度,降低数据库压力,确保业务数据的实时性和准确性。
在许多业务场景中(比如商品信息查询、库存管理、账户余额查询、交易记录查询、用户信息查询等),为了提高数据查询速度和降低数据库压力,我们通常会使用Redis作为缓存层。然而,保持MySQL与Redis缓存之间的数据一致性是一个关键挑战。本方案将探讨基于Cache-Aside Pattern模式下的一种高效的MySQL与Redis缓存同步一致性方案,以确保业务数据的实时性和准确性,提高数据查询速度,降低数据库压力。
方案提供的默认设置(如地域、VPC、安全组、vSwitch、实例名称等)完成部署后在阿里云上搭建的RDS MySQL实时数据同步到云数据库 Redis进行加速分析的架构图如下图所示。实际部署时您可以根据资源规划修改部分设置,但最终形成的运行环境与下图相似。
本方案的技术架构包括以下基础设施和云服务:
开始部署前,请按以下指引完成账号申请、账号充值、RAM用户创建和授权。
1.如果您还没有阿里云账号,请访问阿里云账号注册页面,根据页面提示完成注册。阿里云账号是您使用云资源的付费实体,因此是部署方案的必要前提。
2.为阿里云账号充值。
为节省成本,本方案默认选择使用按量付费资源,使用按量付费资源需要确保账户余额不小于100元。
完成本方案的部署及体验,预计产生费用不超过20元(假设您选择下表中的相关规格资源,且运行时间不超过2小时,如果调整了资源规格,请以控制台显示的实际报价以及最终账单为准)。
云服务 | 规格配置 | 地域 | 预估费用参考 |
---|---|---|---|
云服务器 ECS | 规格:ecs.g5.xlarge,4 vCPU 16 GB | 华东2(上海) | 配置费用:1.854 元/小时 |
存储空间:40 GB(ESSD PL1云盘) | 公网流量费用:0.800 元/GB | ||
带宽:100 Mbps(按使用流量) | |||
云数据库 RDS MySQL 版 | 规格:mysql.x4.medium.2c | 华东2(上海) | 1.8 元/小时 |
存储空间:100 GB | |||
云数据库 Redis | 规格:标准版 高可用 16GB主从版 | 华东2(上海) | 3.00 元/小时 |
数据传输服务 DTS | 数据订阅 | 华东2(上海) | 3.00 元/小时 |
3.阿里云账号拥有操作资源的最高权限,从云资源安全角度考虑,建议您创建一个RAM用户,使RAM用户仅能操作有限的资源,然后由RAM用户完成本方案。
{
"Version": "1",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ecs:Describe",
"vpc:Describe",
"ros:",
"dts:"
],
"Resource": "*"
}
]
}
4.(可选,仅首次使用DTS服务时需要创建)创建AliyunDTSDefaultRole角色,用于DTS服务访问当前云账号下的RDS、ECS等云资源。
{
"Statement": [
{
"Action": "sts:AssumeRole",
"Effect": "Allow",
"Principal": {
"Service": [
"dts.aliyuncs.com"
]
}
}
],
"Version": "1"
}
资源编排(ROS)可以让您通过YAML或JSON文件清晰简洁地描述所需的云资源及其依赖关系,然后自动化地创建和配置这些资源。您可以通过下方提供的ROS一键部署链接,来自动化地完成这些资源的创建和配置。
本文介绍的ROS模板主要完成了以下内容:
1.打开一键配置模板链接前往ROS控制台,系统自动打开使用新资源创建资源栈的面板。
2.确认好地域后(本教程以华东2(上海)地域为例),在配置参数模板步骤中配置资源栈名称、ECS和Database。
3.单击下一步,跳转至资源预览页,单击创建,系统将自动创建并部署本教程所需的资源。
4.当资源栈信息页面的状态显示为创建成功时表示一键配置完成。
5.单击资源页签,找到已创建的RDS实例,单击实例ID,进入RDS实例详情页,获取RDS的公网连接地址。
6.登录RDS实例,向源端 RDS MySQL 上写入、更新、删除相关数据,以模拟RDS MySQL上面的数据变更。
上一步中您已经在数据传输服务DTS管理控制台上配置了DTS延迟告警、检查了DTS同步延迟等情况,接下来可以向源端 RDS MySQL 上写入、更新、删除相关数据,以模拟RDS MySQL上面的数据变更,比如可以模拟TPCC压测程序等或者以业务系统真实的更新数据,以观察DTS订阅情况等。
通过DTS运行程序的标准输出日志情况,可以观察到DTS订阅任务在订阅源端数据变更的情况,如图所示:
上一步中您已经部署好了数据传输服务DTS数据订阅程序,并且对源端RDS MySQL有数据更新行为发生,即RDS MySQL实例中已经有BINLOG日志的更新,通过上述步骤可以观察到DTS订阅程序可以订阅到BINLOG的最新事件,接下来检查Redis实例中是否已经有最新的数据写入和更新。
通过Redis客户端等工具连接到Redis,检查Redis实例中最新的数据,并且针对其中的key进行验证,如图所示:
同时,也可以通过如MySQL客户端等工具连接到RDS MySQL实例,检查RDS MySQL实例中对应的最新数据,如图所示:
上一步中您已经部署好了数据传输服务DTS数据订阅程序,并且对源端RDS MySQL有数据更新行为发生,接下来您需要对DTS订阅和数据同步的效果进行验证。针对生产环境,建议您在数据传输服务DTS控制台配置好对DTS订阅程序的监控报警等。
1.登录数据传输服务DTS管理控制台。
2.在顶部菜单栏,选择被授权的资源组(本文以Rds2Redis为例)和地域(本文以华东2(上海)地域为例)。
3.在左侧导航栏,选择数据订阅。
4.在订阅任务页面,定位到上述步骤中创建的订阅任务,在操作列上点击任务详情。
5.进入任务详情页面后,在左侧导航栏选择数据消费,点击任务管理。
6.查看增量数据采集等页面,检查DTS订阅延迟情况等,如图所示:
完成了数据同步结果验证等步骤后,您可以通过配置和观察DTS监控报警、性能监控等来观察数据同步的可用性、延迟等,通过观察RDS MySQL实例和Redis实例中相关的记录来验证同步的正确性和一致性(注意考虑延迟带来的不一致情况)。
在本方案中,您创建了1个专有网络VPC、1台交换机、1个云数据库 RDS MySQL 实例、1个云数据库 Redis 实例、1个数据传输服务DTS实例以及1个云服务器ECS实例。测试完方案后,您可以在ROS控制台找到目标资源栈,然后直接删除资源栈即可(删除时,删除方式选择为释放资源)。
面向电商行业等,通过实时同步RDS库中的商品信息数据到Redis缓存,提高商品信息查询速度,提升用户购物体验。
在社交媒体领域,通过实时同步在线库中用户信息数据到Redis缓存,提高用户信息查询速度,提升用户体验。
在金融等场景,通过实时同步存储在关系型数据库中的账户余额数据到Redis缓存,提高账户余额查询速度,提升用户体验。
官网相关地址直达:
1.更多阿里云方案查询:https://www.aliyun.com
2.阿里云服务器ECS相关活动:https://www.aliyun.com/daily-act/ecs/activity_selection
3.云小站(代金券发布平台):https://www.aliyun.com/minisite/goods