保证数据一致性技术

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

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

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、比特币账本。

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

核心权衡:

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

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

相关推荐
不会就选b15 小时前
MySQL之视图
数据库·mysql
>no problem<15 小时前
基于cola5.0的基础设施层的多数据库切换方案思路
数据库·spring boot·mybatisplus·cola5.0·数据库迁移适配
OceanBase数据库官方博客15 小时前
OceanBase 赋能央国企:从发电到用电的全链路业务承载
数据库·oceanbase
瀚高PG实验室16 小时前
pgsql-ogr-fdw
数据库·postgresql·瀚高数据库·highgo
IvorySQL16 小时前
PostgreSQL 技术日报 (6月5日)|PG19 Beta1 上线,PGConf.PL 2026开启征稿
数据库·postgresql·区块链
abcy07121317 小时前
pycharm python sqlalchemy mysql增删改查实例csdn
数据库·oracle
无风听海17 小时前
IndexedDB 深度指南 浏览器中的事务型对象数据库
前端·数据库
咋吃都不胖lyh18 小时前
langgraph基础示例
数据库
网管NO.118 小时前
子查询进阶|EXISTS/IN/ANY/ALL,优化查询效率
数据库·sql
云服务器租用费用19 小时前
2026年腾讯云OpenClaw(Clawdbot)+Skills云上部署及Windows本地集成轻松入门
运维·服务器·数据库·windows·云计算·腾讯云