缓存失效竟然可以这么解?

简介: 数据传输提供的数据订阅功能,可以在不影响业务的情况下,实现简单、可靠的缓存失效逻辑。这种缓存失效机制为阿里巴巴多年架构优化沉淀下来的经验,下面我们一起来看数据订阅究竟怎么实现这种机制。

传统缓存失效策略

为了提高业务访问速度,提升业务读并发,很多用户都会在业务架构中引入缓存层。业务所有读请求全部路由到缓存层,通过缓存的内存读取机制大大提升业务读取性能。缓存中的数据不能持久化 ,一旦缓存异常退出,那么内存中的数据就会丢失,所以为了保证数据完整,业务的更新数据会落地到持久化存储中,例如DB。目前云用户的业务架构一般如下图:

_

在上图中,大家可以看到,用户的更新数据直接持久化到DB, 业务读请求直接请求缓存数据,所以业务需要解决缓存失效问题,即解决因为数据变更导致缓存中的数据失效的问题。 目前业务解决缓存失效问题的解决方法一般是业务实现DB、缓存双写。通过业务双写解决缓存失效,存在如下的问题:

(1)代码侵入性比较强,需要双写两份存储,任何对DB的数据变更,都需要同时更新缓存,代码层面后期可维护程度不高
(2)用户请求线程里同步调用缓存,对缓存存在强依赖,遇到缓存超时等异常时,没有办法做到有效的重试,遇到异常给用户返回系统错误、操作失败等信息,严重影响用户体验
(3)用户请求线程里同步完成DB、缓存双写,变更请求链路长,访问延迟大,影响用户体验

RDS数据订阅消费,轻松解决缓存失效

在阿里巴巴内部同样也遇到了缓存失效的问题,随着业务架构得不断调整优化,我们已经沉淀出一套高可靠、极优雅得缓存失效架构。即通过数据传输提供的数据订阅功能,异步获取DB(例如公共云上的RDS)的增量数据,根据增量数据进行缓存失效。具体的架构类似下图:

_

在这个架构里面,缓存更新流程如下:
(1) 业务完成DB更新后即返回请求
(2) 数据订阅通过日志解析方式实时解析并订阅DB的增量更新数据,当发现DB有数据更新时,将增量数据推送给下游消费者
(3) 下游消费业务一旦接收到增量更新数据,即调用消费线程进行缓存更新

至此完成整个缓存更新过程。

从上面的缓存失效流程,可以看出这种缓存失效机制:
(1) 更新路径短,延迟低: 缓存失效为异步流程,业务更新DB完成后直接返回,不需要关心缓存失效流程,整个更新路径短,更新延迟低
(2) 应用简单可靠:应用无需实现复杂双写逻辑,只需启动异步线程监听增量数据,更新缓存数据即可
(3) 应用更新无性能消耗:因为数据订阅是通过解析DB的增量日志来获取增量数据,获取数据的过程对业务、DB性能无损

小结

数据订阅功能为阿里云数据传输提供的一种数据分发方式。通过数据订阅实现的缓存失效策略,让业务更新更快捷,让业务逻辑更简单、更可靠。

数据订阅只是数据传输提供的一种传输方式,除数据订阅之外,数据传输还提供了数据实时同步,不停服迁移等多种传输能力,如需了解数据传输更多详情,请猛击数据传输

相关实践学习
自建数据库迁移到云数据库
本场景将引导您将网站的自建数据库平滑迁移至云数据库RDS。通过使用RDS,您可以获得稳定、可靠和安全的企业级数据库服务,可以更加专注于发展核心业务,无需过多担心数据库的管理和维护。
Sqoop 企业级大数据迁移方案实战
Sqoop是一个用于在Hadoop和关系数据库服务器之间传输数据的工具。它用于从关系数据库(如MySQL,Oracle)导入数据到Hadoop HDFS,并从Hadoop文件系统导出到关系数据库。 本课程主要讲解了Sqoop的设计思想及原理、部署安装及配置、详细具体的使用方法技巧与实操案例、企业级任务管理等。结合日常工作实践,培养解决实际问题的能力。本课程由黑马程序员提供。
目录
相关文章
|
12月前
|
人工智能
2025数字人短视频工具TOP5榜单:从入门到进阶的必备神器 
随着人工智能技术的快速发展,数字人短视频工具正成为内容创作领域的重要助力。从入门级简单操作到进阶专业应用,各类工具功能各异。本文将为您揭晓2025年最值得关注的五款数字人工具,助您轻松选择最适合的创作伙伴。
|
9月前
|
人工智能 前端开发 Java
关于Agent框架,豆包,DeepSeek、Manus都选择了它
2025年被视为Agent元年,通过向Manus、豆包、DeepSeek提问“编程框架第一性原理”,发现三者不约而同推荐阿里巴巴开源的AgentScope。
1391 2
关于Agent框架,豆包,DeepSeek、Manus都选择了它
|
弹性计算 缓存 前端开发
阿里云服务器ECS u1、c7、e实例、c8i实例有什么区别?性能有差异吗?
阿里云ECS实例包括经济型e、通用算力型u1、计算型c7和c8i,性能与价格各异。经济型e为共享型,适合轻量应用;u1性价比高,适配中小型企业需求;c7和c8i为企业级独享型,性能依次递增,适用于高性能场景。以2核4G为例,u1实例199元/年起,带5M带宽;c7和c8i价格更高但性能更强。选择时需根据实际需求权衡性能与成本。
777 0
|
存储 监控 druid
Druid、ClickHouse、Doris、StarRocks 的区别与分析
本文对比了 Druid、ClickHouse、Doris 和 StarRocks 四款大数据分析引擎。它们均为 OLAP 引擎,采用列式存储和分布式架构,适用于海量数据分析。Druid 擅长实时分析与高并发查询;ClickHouse 以超高性能著称,适合复杂查询;Doris 提供易用的 SQL 接口,性能均衡;StarRocks 则以其极速查询和实时更新能力脱颖而出。各引擎在数据模型、查询性能、数据更新和存储方面存在差异,适用于不同的业务场景。选择时需根据具体需求综合考虑。
8482 20
|
开发工具 git
Git 中 merge 和 rebase 的区别
$ git pull --rebase和$ git pull区别 是git fetch + git merge FETCH_HEAD的缩写,所以默认情况下,git pull就是先fetch,然后执行merge操作,如果加-rebase参数,就是使用git rebase代替git merge 。
31352 0
|
机器学习/深度学习 存储 自然语言处理
深度学习之多轮对话系统
基于深度学习的多轮对话系统是一种能够在多轮对话中保持上下文连贯并生成自然回复的系统,主要用于客服、智能助理等需要交互式交流的场景。通过深度学习的技术,特别是自然语言处理中的预训练模型和序列生成模型,这类系统已在准确理解、生成自然语言的质量上取得显著进展。
1472 2
|
开发工具 Android开发
Android Studio SDK 使用国内镜像源在线安装
一、使用国内镜像源: 先在这里推荐几个: 1、东软信息学院 mirrors.neusoft.edu.
35097 0
|
开发框架 前端开发 JavaScript
从零认识 Refine
在现代 Web 开发中,前端技术的快速发展给开发者带来了更高的工作效率和更好的用户体验。然而,随着项目的复杂性增加,前端开发也面临着一系列挑战,例如组件管理、状态管理和性能优化等。为了解决这些问题,我们需要寻找一种技术,能够简化开发过程、提升代码质量并提供良好的用户体验。 本文将介绍一项名为 Refine 的前端技术,它旨在优化前端开发体验,提高代码的可维护性和性能。我们将深入分析 Refine 的原理,并通过多个 JavaScript 代码示例来说明其用法。此外,我们还将探讨 Refine 的优点和缺点、适用场景、开源实现方案以及在知名项目中的应用。
2021 1
|
SQL 存储 算法
如何写出高性能的SQL Join: join实现和最佳实践
Join是数据库和数仓中最常用的一个感念了。在关系型数据库的数据模型中,为了避免数据冗余存储,不同的数据往往放在不同的表中,分为事实表和维度表,这样做可以极大的节省数据存储空间。但是在分析数据时,则需要通过join把多表关联起来分析。可以说,做数据分析,绕不开的一个话题就是join。而join有多种类型,在使用上有不同的使用方式,而在实现上也有不同的实现方式。不同的使用方式和实现方式,则会造成性能上的天差地别。本文尝试由表及里梳理join的使用和内部实现方式,通过了解内部实现,了解如何写出一个高性能的join SQL。
3546 2
如何写出高性能的SQL Join: join实现和最佳实践
|
NoSQL Java Redis
基于Redis的分布式锁,Redisson的简单使用和常用配置
Redisson是一个在Redis基础上实现的Java驻内存数据网格。Redisson提供了使用Redis的最简单最便捷的方法。Redisson的宗旨是促进使用者对Redis的关注分离,从而让使用者能够将精力更集中的放在处理业务逻辑上。

热门文章

最新文章