关于微服务化后多个接口间如何事务回滚的疑惑
这年头个个都在说微服务,我理解是,如果一个系统所有大模块都微服务化后,那么所有业务,都需要调用对应的微服务接口来处理。
那么如果一个业务,涉及到要同时调用N
个微服务的接口时,如果某
接口出问题后,虽然这个接口内部可以回滚,但是之前
调用的接口,没有被通知到需要回滚,这时候不就坑大了?
我目前想到的解决方案是,所有微服务接口必须提供额外一个回滚用的特定接口,供调用者在遇到其他接口出错后,主动调用。
但是这样一来,不就反而增加了工作量?
自己补一下找到的解决方案:
http://www.cnblogs.com/wxd010...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
这是一个好问题。
我之前也有过和你一样的疑问。
不谈2PC和CAP。
给题主的问题总结一下。
微服务面临的一致性问题?
如何解决一致性问题:
事件驱动实现最终一致性
理论上的话和图也不多说了,网上太多。
show u the code.
翻译题主的问题成为代码:
解决方案:
思路和上面的相同,就是实现的时候觉得太复杂了
ABC 三个服务,顺序调用A->B->C ,假如C失败了
需要定义的方法是
A
Do(){}
UnDo(){}
B
Do(){}
UnDo(){}
C
Do(){}
UnDo(){}
所有的服务都要写一遍撤销操作的代码
然后 比如 C失败了,将失败的消息放到消息队列中通知AB,然后AB消费消息后执行UnDo(),这个UnDo必须是幂等性的,不影响多次回滚操作
这样来处理应该是可以满足需求的,主要的痛点就是太麻烦了,所有的操作都需要自己来实现回滚