在微服务架构中,单个数据服务都有自己独立的数据源,如何实现多个数据服务的事务性操作,就成了难题之一。

在单机的事务当中,需要满足事务的 ACID 特性,具体可以参见 Mysql 中的事务

案例:

微服务时代的事务处理原则

  1. 假定网络或者服务不可靠
  2. 将全局事务建模成一组本地 ACID 事务
  3. 引入事务补偿机制处理失败场景
  4. 事务始终处在一种明确的状态 ( 不管成功还是失败 )
  5. 追求最终一致性,而非强一致性
  6. 隔离性
  7. 幂等性
  8. 异步响应式,尽量避免直接同步调用

Saga 模式

协同式 Saga

编排式 Saga