Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
377 views
in Technique[技术] by (71.8m points)

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

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

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

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

谢谢!


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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

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

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

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


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...