Distributed Transactions

Concurrency Control

ACID

  • A: Atomic 原子性,事务要么全部完成,要么全部不完成
  • C: Consistent 一致性
  • I: Isolated Serializable,多个事务并发执行的结果和某一个顺序的事务线性执行的结果一致
  • D: Durable 一旦事务被提交,则事务被持久化,不会因为错误啥的丢失

Abort 事务中断

Atomic Commit

Two-Phase Locking

a. 在使用一条记录时获得对应的资源的锁

b. 持有该锁直到事务结束

get(x) // 执行前获得x锁

get(y) // 执行前获得y锁
  
  // 事务结束统一释放x y锁

该操作可能导致死锁,要引入一些机制处理

Atomic Commit Protocol or Two-phase Commit Protocol

image-20221025113104762

二阶段提交依赖Transactions Coordinator,由TC负责统筹各个分片,由TC决定提交或是撤销。

  • 事务在执行前会先获得锁,在事务提交后释放锁。即遵守Two-Phase Locking
  • 事务提交分为Prepare和Commit两个阶段
    • Prepare阶段,各个分片会执行事务,但是不会实际提交。这时读不到事务数据。
    • Commit阶段,当所有的分片都正确执行事务后进入该阶段,该阶段通知各个分片将事务提交。

错误处理

  • 分片在Pre阶段错误: 可以直接返回NO即可。这个区域分片有权直接abort事务。
  • 分片在确认Pre但确认Commit前错误:需要在确认PRE前持久化,恢复后接着做就好。这个区域分片无权直接丢弃事务,需要一直等待协调者确认。
  • 协调者错误:同样是需要持久化然后恢复。

Q.E.D.