首页 > 技术文章 > 分布式系统常见概念

helloworldcode 2019-08-20 22:33 原文

一、事物

  事务是以可控的方式对数据资源进行访问的一组操作。

二、事物的四个特征-ACID

  要注意的是事务能够通过AID来保证这个C的过程,C是目的,AID都是手段。

  ① Atomic原子性

    事务必须是一个原子的操作序列集合,即可以是一个操作,也可以是多个操作。在这个事物执行的过程中,要么全部成功,则整个事物全部成功,如果有一项失败,则全部失败,整个事物回滚。

  ② Consistency

    指系统从一个正确的状态,迁移到另一个正确的状态。即事物在执行前后,数据库都必须满足一条系统设置的约束条件,它依赖于应用层,也就是依赖于开发者。  

  ③ Isolation

    在并发的环境中,事物是相互隔离的,一个事物的执行,不能被其他事物所影响。在没有事物隔离的情况下可能会出现:

  • 脏读:比如事务T1将更新一批结果,然后事务T2读取该集合,此后T1因为某种原因而回滚之前的操作,这就导致了T2所读取到的数据是无效的。(脏读就是指当一个事务正在访问数据,并且对数据进行了修改,而这种修改还没有提交到数据库中,这时,另外一个事务也访问这个数据,然后使用了这个数据

  • 不可重复读:比如事物T1访问一批数据集并返回给应用层后还没有结束,事物T2也去访问并更新该数据集,此时事物T1再去读取该数据集,使得同一个事物多次读取的同一数据集不同(重点在于修改数据,指在一个事务内,多次读同一数据。在这个事务还没有结束时,另外一个事务也访问该同一数据。那么,在第一个事务中的两 次读数据之间,由于第二个事务的修改,那么第一个事务两次读到的的数据可能是不一样的。这样就发生了在一个事务内两次读到的数据是不一样的,因此称为是不可重复读。例如,一个编辑人员两次读取同一文档,但在两次读取之间,作者重写了该文档。当编辑人员第二次读取文档时,文档已更改。原始读取不可重复。如果 只有在作者全部完成编写后编辑人员才可以读取文档,则可以避免该问题。)。

  • 幻读:比如事物T1访问数据集,并修改了数据某一列的值,使其符合某以约束条件,同时,事物T2也在修改这个数据集,往这个数据集上插入一行新数据(不符合之前的约束条件)。过一段时间后事物T1再次访问数据集,发现还有未修改的数据,出现幻觉一般。(重点在于新增或者删除数据,指当事务不是独立执行时发生的一种现象,例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。 同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还有没有修改的数据行,就好像发生了幻觉一样。例如,一个编辑人员更改作者提交的文档,但当生产部门将其更改内容合并到该文档的主复本时,发现作者已将未编辑的新材料添加到该文档中。 如果在编辑人员和生产部门完成对原始文档的处理之前,任何人都不能将新材料添加到文档中,则可以避免该问题。

  四种隔离级别依次递增:

  (1). 读未提交

    事物没有提交的过程中允许其他事物去更改数据集。(相当于没有隔离,易发生脏读。)

  (2). 读已提交

    只允许读到已经提交的数据。第一次读原先的数据,第二次读其他事物修改后提交的数据(易发生不可重复读)

  (3). 可重复读

    保证在事务处理过程中,多次读取同一个数据时,其值都和事务开始时刻时是一致的。这可以保证原先的数据是一致的,但不能保证新加入的数据是否正确。(易发生幻读)

  (4). 串行化

    最严格的隔离级别,所有事物串行执行,不存在并发的情况,

  ④ Durability

  一旦事物被提交,则它对数据库的操作将被永久保存,即使系统出现了宕机也可以进行恢复。

三、CAP定理

​   一个分布式系统不可能同时满足一致性Consistency、可用性Availability、分区容错性Partition tolerance这三个基本需求,最多只能同时满足其中的两项。

  ① 一致性Consistency

    这个一致性和ACID的一致性不同,这里的一致性指的是多个副本之间在初始一致(完全相同)的条件下执行一系列操作后,这些副本的数据仍然可以保持一致。

  ② 可用性Availability

    系统可以提供正常的服务,主要有两个因素:响应时间以及返回正确的结果集。

  ③ 分区容错性Partition tolerance

    分布式系统中即使出现了网络分区的情况,仍然能够满足一致性和可用性。  

    网络分区,是指分布式系统中,不同的节点分布在不同的子网络(机房/异地网络)中,由于一些特殊的原因导致这些子网络之间出现网络不连通的状态,但各个子网络的内部网络是正常的,从而导致整个系统的网络环境被切分成了若干孤立的区域。组成一个分布式系统的每个节点的加入与退出都可以看做是一个特殊的网络分区

三者取其二

  • CA without P:这个时候就相当于放弃了分布式系统的架构,放弃了系统的可扩展性,系统只在单机上运行。

  • CP without A:如果不要求A(可用)。达到C(一致)需要P(分区)通过网络完全同步,会导致同步时间无限延长。

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

对于分布式系统来说,P是不能放弃的(可以进行优化),因此通常在可用性和一致性之间权衡。

四、BASE定理

Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)

  • 基本可用(Basically Available)

    基本可用是指分布式系统在出现不可预知的故障的时候,允许损失部分可用性,但不等于系统不可用。例如牺牲部分响应时间、以及功能上的损失(高峰期,屏蔽一些功能使得服务降级)

  • 软状态(Soft state)

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

  • 最终一致性(Eventually consistent)

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

可以看出BASE定理是通过弱化一致性来获得可用性,它允许数据在一段时间内是不一致的,但通过一定的时间最终达到一致状态。

 

参考资料

  1. 从ACID到CAP到BASE此处注明:大部分内容从该文转载

  2. 如何理解数据库事务中的一致性的概念?

  3. 分布式理论:CAP是三选二吗?

  4. 什么是脏读,不可重复读,幻读

推荐阅读