(一)一致性协议之2PC和3PC

  • 产生背景
    在传统单体应用中,一次请求的处理如果涉及到一个事务操作,所有操作都放到一个事务里,要么 全部成功要么发生异常回滚,是可以满足事务的ACID要求的,可以做到数据的一致性。但是在分布式系统中就不一样了,如果原本一个事务的操作是跨两个子系统的,那么就需要开启两个本地事务去操作了,由于网络延迟等情况,两个本地事务无法知道对方处理情况,很可能导致一个本地事务成功提交,而另外一个本地事务由于连接超时抛出异常回滚导致操作失败,这样就会产生数据不一致了。

  • 解决思路
    要解决这个问题,其实就是要解决多个本地事务之间通信的问题,也就是多个本地事务要感知其他子系统事务执行的状态以及结果,这样就可以让多个事务做出一致的操作,比如一个本地事务操作失败,那么通知其他相关联事务都回滚,这样就可以解决多个子系统数据一致性问题。这个解决思路就是所谓的2PC和3PC理论。当然对于解决思路有两种类型,分别是强一致性(无中间状态)和最终一致性(有中间状态),这里的2PC和3PC是属于强一致性解决思路(对于这个解决思路有一些对应的落地解决方案[框架])。

  • 2PC

  • 3PC

发布了65 篇原创文章 · 获赞 11 · 访问量 7174

猜你喜欢

转载自blog.csdn.net/weixin_38312719/article/details/89786039