请教一个分布式事务的问题?

有这样一个业务,分为三步:

  1. A 服务做一个 insert 。
  2. 通过 HTTP 向 B 服务发请求,B 服务做一个 update 。
  3. A 服务对 HTTP 请求的返回结果进行判断,如果 B 服务 update 失败,做一个 DELETE(删除之前的 insert )。

Q1:请问这算 2PC 吗?
Q2:算不算强一致性?
Q3:和 MQ 做分布式事务对比有什么优缺点?

谢谢!

阅读 1.6k
1 个回答

1、确实是字面意思上的两阶段提交了,但 2PC 不仅满足于此,还需要:

  • insert 是事务成功后 commit、失败 rollback 吗?如果不是,不是 2PC。
  • 某方宕机后,会互相阻塞等待本次事务完成吗?如果不是,不是 2PC。

2、如果宕机问题处理好了,这是最终一致;否则,压根没一致性。

3、扩展性差一些。以后再来个 B、C、D 乃至 Z 服务,也要加入本次事务中,你还要反过头来去改写服务 A 的代码吗?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题