最终一致性

简介: 【8月更文挑战第18天】

最终一致性

定义:
最终一致性是指,系统会保证在没有新的更新操作的情况下,经过足够的时间后,数据将达到一致的状态。在这种模型下,数据的副本之间可能会暂时存在不一致。
适用场景:对实时性要求不高,可以容忍短时间内数据不一致的场景,如社交网络、推荐系统等。
保障策略:

  • 异步复制:当数据更新发生时,首先更新主副本,然后异步地将更新同步到其他副本。
  • 读取修复(Read Repair):在读取数据的时候检测副本之间的不一致,并在后台异步修复不一致的数据。
  • 后台一致性修复进程:定期在后台运行的进程检查和同步数据副本之间的差异,以达到最终一致性。
  • 版本控制:每次更新数据时附加一个时间戳或版本号,用于解决更新冲突和保持数据的最终一致性。

缓存更新策略

  • Write through cache(直写缓存):首先将数据写入缓存,然后立即将新的缓存数据复制到数据库。这种方式可以保证写操作的一致性,但可能会影响写操作的性能。
  • Write back cache(写回缓存):数据首先写入缓存,然后由缓存异步写入数据库。这种方式可以提高写操作的性能,但增加了数据丢失的风险。
  • Write around cache(绕写缓存):绕过缓存,直接写数据库,然后依据需要更新缓存或使缓存失效。这适用于更频繁读取操作的场景。

    缓存失效策略

  • 主动更新:当数据库数据变化时,主动更新缓存中的数据。这可以保持缓存数据的实时性,但可能会增加系统的复杂性。
  • 定时失效:为缓存数据设置一个过期时间。定期从数据库中重新加载数据,以保持数据的新鲜度。但这无法解决数据在两次加载之间变化导致的一致性问题。
  • 惰性加载:只有在请求特定数据且发现缓存失效或缓存中没有该数据时,才去数据库加载该数据。这种策略简单,但在高并发场景下可能会导致缓存击穿。

    使用缓存一致性协议

  • 基于订阅的更新:使用消息队列(如Kafka,RabbitMQ)来发布数据库更新,然后相关服务订阅这些更新消息来同步更新缓存。
  • 最终一致性:采用最终一致性模型,允许系统在一段时间内是不一致的,但保证经过足够的时间后,系统中的所有复制数据最终将达到一致的状态。

分布式缓存系统使用如Redis Cluster、Apache Ignite、Tair等分布式缓存系统,这些系统内置了处理缓存一致性的机制,(但是无法解决缓存和数据库之间的数据一致性问题)。

目录
相关文章
|
12月前
|
机器学习/深度学习 消息中间件 人工智能
活动邀请丨2025 全球机器学习技术大会
阿里云高级技术专家周礼受邀于 10 月 17 日下午分享议题《Apache RocketMQ x AI:面向异步化 Agent 的事件驱动架构》。
365 71
|
传感器 自动驾驶 物联网
【HarmonyOS 5】鸿蒙星闪NearLink详解
鸿蒙星闪NearLink Kit 是 HarmonyOS 提供的短距离通信服务,支持星闪设备间的连接、数据交互。例如,手机可作为中心设备与外围设备(如鼠标、手写笔、智能家电、车钥匙等)通过星闪进行连接。
499 0
|
应用服务中间件 nginx Docker
Docker同一台宿主机容器通信-通过容器名称互联
本文详细介绍了如何通过容器名称实现同一宿主机上容器间的互联,并提供了实战案例。首先,文章解释了容器间通过自定义名称访问的原理,随后演示了创建并连接Tomcat与Nginx容器的具体步骤。此外,还讨论了配置中可能出现的问题及解决方案,包括避免硬编码IP地址和使用自定义容器别名来增强系统的灵活性与可维护性。通过这些实践,展示了如何高效地配置容器间通信,确保服务稳定可靠。
1177 1
Docker同一台宿主机容器通信-通过容器名称互联
|
消息中间件 安全 NoSQL
布谷直播系统源码开发实战:从架构设计到性能优化
作为山东布谷科技的一名技术研发人员,我参与了多个直播系统平台从0到1的开发和搭建,也见证了直播行业从萌芽到爆发的全过程。今天,我想从研发角度,分享一些直播系统软件开发的经验和心得,希望能对大家有所帮助。
|
存储 缓存 Java
啥是无状态的Serverless
无状态是指每次请求独立,不依赖之前的状态。Serverless架构将业务逻辑分解为动态调用的小型函数,实现无状态处理。数据则存储在持久化存储中。这种设计易于水平扩展、简化部署管理和提高可靠性,因无需考虑状态同步问题,故障恢复也更为高效。
930 1
|
存储 SQL 关系型数据库
【MySQL基础篇】MySQL约束语法
文章介绍了MySQL中表的约束概念,包括非空、唯一、主键、默认和外键约束,以及如何在创建和修改表时指定这些约束。外键约束用于保持数据的一致性和完整性,文章通过示例展示了添加、删除外键的语法,并讨论了不同的删除/更新行为,如CASCADE和SETNULL。
【MySQL基础篇】MySQL约束语法
|
存储 Java Maven
win自定义配置本地maven仓库位置,修改maven仓库位置
win自定义配置本地maven仓库位置,修改maven仓库位置
1662 0
win自定义配置本地maven仓库位置,修改maven仓库位置
|
安全
CRLF(HTTP响应拆分漏洞)
CRLF(HTTP响应拆分漏洞)
1019 1
|
关系型数据库 分布式数据库 调度
Dataphin小时调度依赖关系及运行说明
介绍天任务依赖小时任务、小时任务依赖小时任务的依赖关系及运行条件
Dataphin小时调度依赖关系及运行说明

热门文章

最新文章