这是分布式事务系列的第一篇,带你解密分布式事务的各种解决方案,搞定面试。
为了避免错过更新,请将本公众号设为星标
点击上方“后端开发技术”,选择“设为星标” ,优质资源及时送达
在微服务越来越流行的当下,我们应该如何保证不同服务器上数据的一致性?
本系列将先从CAP理论和BASE理论说起,之后从一致性强弱的角度梳理当前主流的强一致性方案、最终一致性方案和弱一致性方案,最后总结一下各个方案的特点和适用场景,一篇文章帮你掌握分布式事务。
分布式事务是指在分布式系统中,涉及多个事务操作的一组相关操作,但是这些操作必须以原子方式执行,即要么全部成功,要么全部失败,从而确保数据的一致性。
传统事务也就是单机事务,因为只会同时操作一个数据库资源,所以单节点可以利用数据库自带的事务操作来解决数据的一致性问题。而在分布式系统中,不同的事务可能会涉及到多个节点或数据存储位置,因此需要确保各个节点或数据存储位置的数据在完成事务操作后能够保持一致性。为此,需要采用分布式事务机制来保证数据的一致性。
在分布式系统中,分布式事务问题产生的主要原因包括:
这些因素可能会导致分布式事务问题的发生,因此需要采取相应的措施来保证分布式系统的可靠性和稳定性,确保分布式事务的正确执行。
CAP理论是分布式系统设计中的一个非常重要的基础理论,指的是在分布式系统中,一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)这三个要素无法完全保证同时满足,需要在这三个要素之间做出权衡,CAP 是这三个词的缩写。
CAP 理论指出在分布式系统中,分布式系统必须容忍分区故障的发生。由于网络等问题分区故障发生不可避免,所以必须做到,否则分布式系统就没有出现的必要。所以分区容错性(P)是必需的。因此,在出现网络分区的情况下,系统要么保证一致性(C)和分区容错性(P),但无法保证可用性;要么保证可用性(A)和分区容错性(P),但无法保证一致性(C)。
原因也很好推理:
所以 A 和 C 无法同时出现,通常只能选择实现 CP 或者 AP。因此,在设计分布式系统时,需要根据具体应用场景和需求,权衡CAP理论的三个要素,选择最适合的方案来保证系统的正确性和性能。显然,按照上述订单和支付服务的案例,无论是CP还是AP在实际场景中都会带来很差的用户体验,于是就产生了BASE理论。
方案 | 特点 | 案例 |
---|---|---|
CP | 优先保证一致性,会影响服务的可用性 | Zookeeper、HBase |
AP | 优先保证可用性,但是会导致数据不一致 | Redis、Eureka、Kafka、RocketMQ |
BASE 理论是一个关于分布式系统中可用性和事务处理的理论,他是基于 CAP 理论的一个扩展。CAP 理论指出在一个分布式系统中,无法同时满足一致性、可用性和分区容忍性这三个特性。
但是当前的大环境下,服务的可用性与一致性都很重要,难以取舍。BASE 理论的提出就是为了解决这个问题,将可用性和一致性达成一种平衡。
它由 eBay 架构师 Dan Pritchett 在 2008 年提出,用于解决大规模分布式系统下的数据一致性问题
BASE 理论认为,在分布式系统中,数据的一致性不需要在任何时刻都得到保证,而是可以在一定时间范围内保证最终达到一致性。需要注意的是,BASE 理论并不是一种完整的分布式系统架构,而是一种指导性的理论,可以根据实际应用场景和需求来进行具体的实现和部署。
BASE是下面三部分的英文缩写简称:
基本可用:在分布式系统中,因为各种原因(如网络故障、节点宕机、资源限制等),不可能保证系统100%的可用性。因此在设计分布式系统时,要追求基本可用性,即系统可以继续提供核心功能的基本服务,允许系统出现部分功能和性能上的损失:比如增加响应时间,服务降级,通过容错机制和负载均衡等方案解决等。
软状态:在分布式系统中,节点之间的状态是相互独立的,因此节点的状态也可能出现不一致的情况。但是CAP定理的一致性要求数据变化要立即反映到所有的节点副本上去,是一种强一致性。所以为了解决这个问题,BASE理论提出在分布式系统中应该采用软状态,即允许节点之间的状态出现短暂的不一致,不要求数据变化立即反映到所有的服务器节点上,这样可以提高系统的可用性和性能。比如可以允许存在一个中间状态进行过渡,比如支付中状态,又比如允许放大延时等。
最终一致性:上面“软状态”的介绍中提过强一致性会存在一些问题,所以在分布式系统中它不要求系统数据始终保持一致的状态,但是需要一定的时间和机制最终来达到的节点之间的状态一致。比如数据同步、补偿机制,重试机制等。最终一致性是一种弱一致性,相比于强一致性,它更加容易实现和维护,并且可以在保证系统可用性的同时提高系统的性能。
总之,BASE 理论是对 CAP 中一致性和可用性权衡的结果,基于 CAP 定理逐步演化而来,它是对CAP 理论的一种补充,其来源于对大型互联网分布式实践的总结。
为了提高可用性,强调在分布式系统中追求基本可用,在强一致性无法满足时追求软状态和最终一致性,以提高系统的可用性、性能和扩展性。在实际应用中,需要根据具体的业务需求和场景选择合适的数据库和架构,以实现最优的系统设计。
由于我们非常关注数据的一致性,所以总体来说按照一致性强弱的维度分类,解决分布式事务问题可以有以下方案:
具体每种方案是什么?优劣如何?后续文章会继续讲解,请继续关注!
加入讨论群是升职加薪第一步!
回复:加群
点赞是一种美德,如对您有帮助,欢迎评论和分享,感谢阅读!
2023-03-16
2023-03-14