领域事件——使用单个事务vs最终一致性
使用原子事务
传统的模式,客户端执行一个命令,使用一个数据库事务,服务端返回结果,要么操作全部成功,要么全部失败
优点:实现方式简单清晰
缺点:操作较多时,对数据库锁定时间可能较长
最终一致性
客户端发起命令后,一部分操作在一个事务中完成,剩余部分在另一个事务中完成,最终数据达成一致
优点:事务越细化,对数据库锁定的影响越小
缺点:需实现补偿机制,在部分操作失败后及时执行补偿操作。
在某些场景下可考虑使用最终一致性,例如有两个操作A、B
- B操作很耗时
- B操作是异步的
- B与A属于不同的聚合根,但同属于一个上下文
- B与A处于不同的上下文