【分布式事务】概述

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u013034223/article/details/77060582

【背景】

    随着单体应用的缺陷日益明显,越多越多的公司都从传统的单体应用模式向新型的分布式应用模式转变。

    实际上,在分布式应用带来巨大优势的同时,也伴随着各种挑战。例如,系统容错、网络延迟和分布式事务等。

    本篇博客开始,将会对分布式事务做一系列学习总结。从本篇博客,我们可以了解到什么是分布式事务,关于分布式事务的相关理论以及处理分布式事务的解决方案。

【本地事务】

    在没有接触分布式应用前,我们接触到的事务一般都是本地事务,即在单个数据库并且限制在单个进程内的事务。本地事务不涉及多个数据源。

    若我们的系统使用了spring,一般加上@Transition注解即可保证事务正常运行。但如果是分布式系统应用下,若操作涉及不同的数据库,这样本地事务就失效了,从而就涉及到了分布式事务。

【分布式事务】

    1. 什么是分布式事务

        分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于不同的分布式系统的不同节点之上。

        简单的说,就是一次大的操作由不同的小操作组成,这些小的操作分布在不同的服务器上,且属于不同的应用,分布式事务需要保证这些小操作要么全部成功,要么全部失败。本质上来说,分布式事务就是为了保证不同数据库的数据一致性。

    2. 分布式事务的产生原因

        从原来的单体应用到分布式应用的转变,便意味着从以前的一个系统到多个服务共同组成一个系统的转变。

        如一个电商系统,拆分为订单、用户、库存等多个服务,每个服务都有着自己的数据源,在执行下单这一操作,至少需要操作订单和库存数据库,为了保证数据一致性,就需要用到分布式事务。

【经典的分布式系统理论—CAP】

    CAP理论告诉我们:一个分布式系统不可能同时满足一致性(C:Consistency)、可用性(A:Availability)和分区容错性(P:Partition tolerance)这三个基本需求,最多只能同时满足其中两项。

    1. 一致性

        在分布式环境下,一致性是指数据在多个副本之间能否保持一致的特性。在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致的状态。

        对于一个将数据副本分布在不同分布式节点的系统来说,如果第一个节点的数据进行了更新操作并且更新成功后,却没有使得第二个节点上的数据得到相应的更新,于是在对第二个节点的数据进行读取操作时,获取的依然是老数据(或称为脏数据),这就是典型的分布式数据不一致的情况。

        在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都可以读取到其最新的值,那么 这样的系统就被认为具有强一致性。

    2. 可用性

        可用性是指系统提供的服务必须一致处于可用的状态,对于用户的每一个操作请求总是能够在有限的时间内返回结果。

        “有限的时间内”是指,对于用户的一个操作请求,系统必须能够在指定的时间内返回对应的处理结果,如果超过了这个时间范围,那么系统就被认为是不可用的。

        “返回结果”是可用性的另一个非常重要的指标,它要求系统在完成对用户请求的处理后,返回一个正常的响应结果。正常的响应结果通常能够明确地反映出队请求的处理结果,即成功或失败,而不是一个让用户感到困惑的返回结果。

    3. 分区容错性

        分布式系统在遇到任何网络分区故障的时候,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

    既然一个分布式系统无法同时满足一致性、可用性、分区容错性三个特点,我们就需要抛弃一样:

                    这里写图片描述

    需要明确的一点是,对于一个分布式系统而言,分区容错性是一个最基本的要求。因为既然是一个分布式系统,那么分布式系统中的组件必然需要被部署到不同的节点,否则也就无所谓分布式系统了,因此必然出现子网络。

    而对于分布式系统而言,网络问题又是一个必定会出现的异常情况,因此分区容错性也就成为了一个分布式系统必然需要面对和解决的问题。

    因此系统架构师往往需要把精力花在如何根据业务特点在C(一致性)和A(可用性)之间寻求平衡。

【CAP理论的演化—BASE】

    BASE是Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)三个短语的缩写。

    BASE理论是对CAP中一致性和可用性权衡的结果,其来源于对大规模互联网系统分布式实践的总结, 是基于CAP定理逐步演化而来的。

    BASE理论的核心思想是:即使无法做到强一致性,但每个应用都可以根据自身业务特点,采用适当的方式来使系统达到最终一致性。

    1. 基本可用

        指分布式系统在出现不可预知故障的时候,允许损失部分可用性。

    2. 软状态

        指允许系统中的数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

    3. 最终一致

        强调的是所有的数据副本,在经过一段时间的同步之后,最终都能够达到一个一致的状态。因此,最终一致性的本质是需要系统保证最终数据能够达到一致,而不需要实时保证系统数据的强一致性。

    BASE理论面向的是大型高可用可扩展的分布式系统,和传统的事物ACID特性是相反的。

    它完全不同于ACID的强一致性模型,而是通过牺牲强一致性来获得可用性,并允许数据在一段时间内是不一致的,但最终达到一致状态。

    但同时,在实际的分布式场景中,不同业务单元和组件对数据一致性的要求是不同的,因此在具体的分布式系统架构设计过程中,ACID特性和BASE理论往往又会结合在一起。

【分布式事务解决方案】

    1. 刚性事务

        - 全局事务(标准的分布式事务)

    2. 柔性事务

        - 可靠消息最终一致(异步确保型)

        - TCC(两阶段型、补偿型)

        - 最大努力通知(非可靠消息、定期校对)

【总结】

    通过本篇博客,我们知道了什么是分布式事务,分布式事务产生的原因,分布式事务的相关理论以及解决方案。后面会继续总结,详细总结分布式事务的解决方案。

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页