分布式系统常见概念


分布式系统常见概念

文章插图

一、事物
事务是以可控的方式对数据资源进行访问的一组操作 。
【分布式系统常见概念】二、事物的四个特征-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
分布式系统中即使出现了网络分区的情况 , 仍然能够满足一致性和可用性 。
网络分区 , 是指分布式系统中 , 不同的节点分布在不同的子网络(机房/异地网络)中 , 由于一些特殊的原因导致这些子网络之间出现网络不连通的状态 , 但各个子网络的内部网络是正常的 , 从而导致整个系统的网络环境被切分成了若干孤立的区域 。组成一个分布式系统的每个节点的加入与退出都可以看做是一个特殊的网络分区
三者取其二