您的位置:首页 > 其它

分布式事务的理论基础

2017-09-12 22:50 316 查看
        随着互联网技术的发展,分布式系统越来越多地被应用,以应对系统的巨大访问压力,以及分解系统的复杂度,也产生了很多分布式框架。特别是微服务框架目前比较流行,比如dubbo等。在一个大型分布式系统中,一个业务流程中要跨多个服务调用,就有可能会遇到分布式事务问题。订单、支付、入账等核心流程中,数据的准确性和可靠性尤为重要。因此能否实现分布式事务成为了一个非常重要的问题。本文对分布式事务解决方案进行探讨。
        先说一下传统的数据库事务,最重要的概念莫过于ACID属性,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。本地事务当然可以很好的支持ACID属性。传统的DTP模型的全局事务,也是一种几句两阶段提交的分布式事务,但它是一种资源层面的的分布式事务。它有种种缺点,但最重要的是不能用于上面说的这种应用层的分布式系统。

        传统事务虽然好,但在分布式系统的环境下无法使用,因此我们需要新的理论框架。先来看看目前指导分布式数据库设计的主流理论CAP原则。CAP原则在互联网界有着广泛的知名度,知识稍微宽泛一点的工程师都会把其作为衡量系统设计的准则。CAP原则说的是:任何分布式系统在可用性、一致性、分区容错性方面,不能兼得,最多只能得其二,因此,任何分布式系统的设计只是在三者中的不同取舍而已。

        •Consistency(一致性):数据一致更新,所有的节点上的数据时刻保持同步

        •Availability(可用性):好的响应性能。总能找到一个可用的数据副本,每个请求都能接受到一个响应,无论响应成功或失败

        •Partition tolerance(分区容错性):系统应该能持续提供服务,即使系统内部有消息丢失(出现分区),也就是对网络中断的容忍

        

        高可用、数据一致是很多系统设计的目标,但是分区又是不可避免的事情:

        •CA without P:如果不要求P(不允许分区),则C(强一致性)和A(可用性)是可以保证的。但其实分区不是你想不想的问题,而是始终会存在,因此CA的系统更多的是允许分区后各子系统依然保持CA。

        •CP without A:如果不要求A(可用),相当于每个请求都需要在Server之间强一致,而P(分区)会导致同步时间无限延长,如此CP也是可以保证的。很多传统的数据库分布式事务都属于这种模式。

        •AP wihtout C:要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。

        这里面最难理解的是P(分区容错性)。一个分布式系统里面,节点组成的网络本来应该是连通的。然而可能因为一些故障,使得有些节点之间不连通了,整个网络就分成了几块区域。数据就散布在了这些不连通的区域中。这就叫分区。P是分布式系统的起点,一般认为P是必须提供的,所以只需要权衡A和C。提高分区容忍性的办法就是一个数据项复制到多个节点上,那么出现分区之后,这一数据项就可能分布到各个区里。容忍性就提高了。然而,要把数据复制到多个节点,就会带来一致性的问题,就是多个节点上面的数据可能是不一致的。要保证一致,每次写操作就都要等待全部节点写成功,而这等待又会带来可用性的问题。总的来说就是,数据存在的节点越多,分区容忍性越高,但要复制更新的数据就越多,一致性就越难保证。为了保证一致性,更新所有节点数据所需要的时间就越长,可用性就会降低。可简单概括为:为了实现P,就要进行复制,复制引发了C的问题,C又引发了A的问题。当然目前CAP理论也受到了一定的质疑,能否上升为定理还存在争论。

        基于CAP原则,我们可知要在分布式系统中实现ACID模型是不现实的,必须进行取舍,因此出现了BASE模型。BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的简写,是由来自eBay的架构师Dan Pritchett。BASE模型反ACID模型,完全不同ACID模型,牺牲高一致性,获得可用性和分区容错性:

        •BA: Basic Availability 基本业务可用性(支持分区失败)

        •S: Soft state 柔性状态(状态允许有短时间不同步,异步)

        •E: Eventual consistency 最终一致性(最终数据是一致的,而不是实时一致)

        在BASE模型中,事务的原子性(A)与持久性(D)必须根本保障。为了可用性、性能与降级服务的需要,只有降低一致性( C ) 与隔离性( I )的要求,这是一种平衡。我们知道英文单词acid是酸的意思,而很多人不知道的是单词base除了当作“基础”讲,还是化学中的碱的意思 。这就有趣了,酸碱平衡(ACID-BASE Balance),我想提出BASE理论的人,也有名称学上的癖好,希望自己的理论在名称上有某种巧合和暗示,就如同物理学上那篇著名的αβγ论文一样。





内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: