保障 OLTP(在线事务处理)系统的一致性,核心目标是:在并发、故障、网络异常等情况下,事务依然满足“正确性约束”(包括数据库约束、业务规则、跨系统状态一致等)。下面从理论模型 → 工程实践 → 常见陷阱三个层次说明。
OLTP 的一致性(Consistency)不是数据库单独保证的,而是:
A(原子性)+ I(隔离性)+ D(持久性)共同支撑 C
✅ 一致性是“结果约束”,其他三者是“机制保障”
原则:
❌ 反例:
begin tx
update account
call payment service
send kafka
commit
✅ 正例:
begin tx
update account
commit
→ 再发消息 / 调用
| 隔离级别 | 问题防护 |
|---|---|
| Read Committed | 脏读 |
| Repeatable Read | 不可重复读 |
| Serializable | 幻读 |
常见 OLTP 实践:
select * from account where id=1 for update;
适合:
update account set balance=?
where id=? and version=?
适合:
✅ 用数据库“最后一道防线”:
示例:
balance DECIMAL(18,2) NOT NULL CHECK (balance >= 0)
问题:
解决方案:
本地事务
→ 写消息表
→ 定时任务投递
→ 消费方幂等
任何写接口必须支持幂等:
| 场景 | 原因 | 解决 |
|---|---|---|
| 超卖 | 无锁 / 无版本 | 乐观锁 |
| 重复扣款 | 无幂等 | 请求号 |
| 状态错乱 | 多服务写同一状态 | 状态机 |
| 数据不一致 | 异步丢失 | 对账 |
| 幻读 | 隔离级别低 | RR / Serializable |
OLTP 一致性 = 正确事务边界 + 合适隔离级别 + 并发控制 + 数据库约束 + 分布式补偿机制
如果你愿意,我可以:
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。