保证数据一致性技术

保证数据一致性,通常指分布式系统里多个节点或缓存与数据库间的数据保持一致。主要技术分为两类:

一、数据库内部一致性(事务)

ACID

利用原子性、一致性、隔离性、持久性,通过MVCC(多版本并发控制) 实现。MVCC能实现"读不阻塞写,写不阻塞读",避免传统锁的性能问题。

乐观并发控制

版本号机制为数据增加版本标识,更新时校验版本号是否变化。若版本号匹配则更新成功并递增版本,冲突时回滚或重试。

CAS(Compare-And-Swap)操作通过原子指令实现无锁更新。先读取旧值,计算新值,最后原子性地比较并替换,失败则重新尝试。

悲观并发控制

行级锁通过SELECT FOR UPDATE锁定特定记录,其他事务需等待锁释放。适合冲突频繁场景,但可能引发死锁。

表级锁直接锁定整张表,实现简单但并发度低。通常用于批量操作或维护任务。

二、分布式系统一致性

1. 共识算法

确保多个节点对数据状态达成一致,主要用于主备选举、分布式锁等。

  • Paxos:经典但实现复杂。

  • Raft:更易理解和实现,如 etcd、Consul。

  • ZAB:ZooKeeper 所用。

2. 分布式事务

跨多个独立数据库保证原子性。

  • 两阶段提交 (2PC):强一致,但性能差,有单点风险。还有三阶段提交 (3PC) 改进版。两阶段提交(2PC)是最常见的分布式事务协议。协调者先发送准备请求,参与者执行事务但不提交,返回准备就绪状态。协调者收到所有参与者的确认后,发送提交指令。三阶段提交(3PC)在2PC基础上增加超时机制和预提交阶段,降低阻塞概率。参与者超时未收到指令可自动提交或中止,提高系统可用性。

  • TCC (Try-Confirm-Cancel):性能较好,但业务侵入强,需实现预留、确认、取消三个接口。

  • SAGA:通过一系列本地事务加补偿机制实现,适合长事务。

3. 副本一致性协议

  • 主从复制:包括同步、半同步、异步复制,异步有数据丢失风险。主节点处理写请求,异步或半同步复制到从节点。半同步模式确保至少一个从节点接收数据后才返回成功。多主复制允许多个节点接受写入,通过冲突检测算法解决数据分歧。常见方案包括最后写入获胜(LWW)或应用层合并策略。

  • Quorum 机制 (NWR):通过设定节点数(N)、写副本数(W)、读副本数(R)且 W+R > N,保证读写重叠,读到最新数据。

三、缓存与数据库一致性

常见于先更新数据库,再删除缓存。要避免先删缓存、后更新数据库导致的并发脏数据问题。可采用订阅数据库变更日志 (CDC,如 Canal) 来异步更新缓存,或用分布式事务(如 Seata)保证强一致。

四、其他技术

  • 数据校验机制:CRC校验码为数据块生成校验值,传输或存储后重新计算比对。检测到不一致时触发修复流程。Merkle树通过叶子节点哈希值逐层计算根哈希,快速定位差异数据块。常用于分布式系统数据同步验证。

  • 分布式锁 (Redis/ ZooKeeper):控制并发访问。

  • CRDT (无冲突复制数据类型):允许不协同直接合并,适合分布式协作应用。

  • 最终一致性:通过异步修复和后台校验实现,如 DNS、比特币账本。

  • 消息队列可靠: 消息中间件保证数据一致性的核心思路,是将"本地事务"与"消息发送"绑定为一个原子操作,再结合可靠的投递与消费机制,最终实现分布式系统中的最终一致性

核心权衡:

  • 强一致性:读到的永远是最新数据,但延迟高、可用性低。

  • 最终一致性:允许短暂不一致,系统吞吐和可用性高。

相关推荐
小碗羊肉2 小时前
【JavaWeb | 第十二篇】项目实战——登录功能
java·前端·数据库
想唱rap2 小时前
五种IO模型和非阻塞IO
linux·运维·服务器·网络·数据库·tcp/ip
m0_733565462 小时前
如何指定PHP版本运行phpMyAdmin_多版本共存配置
jvm·数据库·python
xcLeigh2 小时前
IoTDB JDBC 完整使用教程:连接、查询、批处理与字符集配置
开发语言·数据库·qt·iotdb·查询·批处理·连接
chunyublog2 小时前
数据挖掘环境搭建
数据库
阿洛学长3 小时前
CSDN、掘金、简书博客文章如何转为Markdown?
运维·数据库·架构·php·持续部署
zuozewei3 小时前
国产化之达梦数据库性能优化方案
数据库·性能优化
Volunteer Technology3 小时前
Spring AI MCP 案例-WebFlux SSE传输模式 (九)
java·数据库·人工智能·spring
betazhou4 小时前
SQL server数据库镜像同步技术
数据库·sql server·高可用·数据库镜像