Skip to content

Latest commit

 

History

History
103 lines (75 loc) · 4.5 KB

File metadata and controls

103 lines (75 loc) · 4.5 KB

事务

ACID

  • 原子性 atomicity
  • 一致性 consistency
  • 隔离性 isolation
  • 持久性 durability

隔离级别

隔离级别 脏读 不可重读 幻读 英文名 默认
RU 读未提交 Read uncommitted
RC 读已提交 × Read committed 其他
RR 可重读 × × Repeatable read MySQL
S 串行化 × × × Serializable
  • 读未提交 = 脏读,没有隔离性,Saga 分布式事务的缺点
  • 读已提交 = 不可重读:更新,一个事务两次读取内容不一样
  • 幻读:插入,一个事务两次读取条数不一样,MySQL 用 MVCC 解决
  • 多版本并发控制 MVCC Multiversion Concurrency Control
    • DB_TRX_ID 最近增改事务ID
    • DB_ROLL_PTR 回滚指针,上一版本 0x...
    • DB_ROW_ID 自增ID,没有主键时的聚簇索引,select _rowid
    • DELETED_BIT 删除

CAP

  • 一致性 Consistency
  • 可用性 Availability
  • 分区容错性 Partition tolerance

一般要求AP,C只需要保证最终一致性,所以有日终对账程序

与缓存一致性

  • 先更新数据库,避免刚删完缓存就被其他线程刷入旧数据
  • 缓存使用删除而不是更新,避免更新时数据库内容已经变了

缓存问题

  • 缓存穿透:反复攻击不存在的数据,解决:不存在就set key null ex 30
  • 缓存击穿:并发去库里查一个
  • 缓存雪崩:大批量失效查库

缓存淘汰

全部/已设置过期时间 × 最少使用,最不经常使用,随机 + 已设置过期即将过期

Redis 事务

Redis MySQL
multi begin
exec commit
discard rollback
watch (lock)

分布式锁

都是创建+删除的方式

问题 数据库 Redis Zookeeper
实现 insert delete set 键 id ex 秒 nx
异常 靠ex 客户端挂掉时节点就自动删除了
阻塞 轮询 轮询 顺序创建、通知
重入 MAC + jvm进程ID + 线程ID 与当前最小节点对比
单点 集群部署 集群部署

分布式事务算法与实现

三种核心算法方案

  • 2PC - Two-Phase Commit,prepare 锁定资源不提交,第二阶段提交或回滚,强一致性,电商下单,库存扣减等短事务

  • 3PC - Three-Phase Commit,增加 CanCommit 并引入超时默认提交,减少阻塞和降低单点故障影响范围,少用

  • TCC - Try-Confirm-Cancel,资源预留(如冻结余额),业务侵入强,最终一致性,主流实践方案,金融交易

  • XA - eXtended Architecture (X/Open DTP),2PC 工业标准化实现,死锁概率高,协调者宕机全局锁死,传统低频金融系统

    • 数据库层标准(ISO/IEC 10026规范)
    • DTP - Distributed Transaction Processing
  • AT - Auto Transaction (天猫 Seata) 应用层伪 2PC,框架代理SQL,失败自动生成 UNDO_LOG 无侵入,弱隔离,电商订单,库存管理

  • Saga ,无隔离,补偿事务,最终一致性,如订单退款,物流调度链

  • 基于消息,无隔离,最终一致性,如支付成功通知

  • AP (Application):业务程序(定义事务边界,如调用 BEGIN/COMMIT)。

  • TM (Transaction Manager):全局事务协调者(例如Java中的 TransactionManager)。

  • RM (Resource Manager):本地资源管理器(如MySQL、Oracle数据库)。

  • TX 接口:AP 与 TM 的交互接口(例如Java JTA中的 UserTransaction)。

  • XA 接口:TM 与 RM 的交互接口(数据库驱动实现,如MySQL Connector/J 的 XAResource)。

  • TC(Transaction Coordinator)Seata-AT 的独立事务协调器

分布式事务容错设计

  • TCC:需解决三大问题——空回滚(未Try却调用Cancel)、幂等(网络重试)、业务悬挂(Cancel后Try才到达)

  • 消息队列:依赖事务状态表+定时校对,防止消息丢失

  • Saga:补偿事务需幂等,且失败时需人工介入

  • 分支事务执行时要拒绝回滚执行

  • 已经失败的事务直接返回回滚成功

  • 多次收到分支事务要幂等