Github
来源:dtm-labs
浏览 226
扫码
分享
2023-07-01 12:07:07
如何选择事务模式
特性对比
- 二阶段消息模式: 适合不需要回滚的场景
- saga模式: 适合需要回滚的场景
- tcc事务模式: 适合一致性要求较高的场景
- xa事务模式: 适合并发要求不高,没有数据库行锁争抢的场景
应用场景
- 秒杀场景:当秒杀访问量很大时,多数系统都会选择在redis中扣减库存,扣减成功后再创建订单。这种场景下没有回滚,适合二阶段消息。二阶段消息还能够保证出现进程崩溃的情况下,扣减的库存量与创建的订单量是完全相等的,详情参见秒杀应用
- 缓存管理场景:使用redis缓存来提供数据,降低数据库的压力是非常常见的场景。通常情况下,会先更新DB,在更新缓存,不涉及回滚,适合二阶段消息。详情参见缓存应用
- 假设您有一个订单业务,需要保证您的订单创建,库存扣减,优惠券扣减是同时成功或同时失败的。那么它适合Saga,因为Saga能够支持回滚,是支持回滚的分布式事务里,最易用的。详情参见订单应用
- 假设您有一个类似资金转账的业务,对一致性要求较高,不允许在转账失败的情况下,让用户看到中间的余额变动,这种情况适合TCC,它能够灵活的控制整个全局事务的数据可见性。详情参见TCC事务
- 假设您的业务,对并发性要求不高,也不会出现多个请求争用同一行数据(例如不会出现扣减同一个商品库存的情况),那么可以选用XA。