分布式系统的特点以及问题
分布式系统的概念是,机器之间仅仅通过网络进行通信。有4个特性:
- 分布性
- 对等性:计算机之间没有主从之分,计算机节点之间是对等的。数据副本是在不同的节点持久化相同的数据,主节点丢失时,可以从从节点读取数据。
- 并发性
- 缺乏全局安全时钟:核心问题是,无法确定两个事件到达的先后顺序。
- 故障总会发生:设计阶段考虑的bug,生产阶段一定发生;还有很多未考虑到的bug;设计阶段不能放过任何异常情况
分布式环境的问题:
- 通信异常:主要指消息丢失和消息延迟
- 网络分区:只有部分节点之间可以通信,脑裂,出现局部小集群
- 三态问题:指请求与响应存在3种状态,分别是
- 成功:获取请求
- 失败:收到失败的响应,比如处理方挂掉了
- 超时:请求发起方无法确定是请求否被成功处理
- 发送过程中数据丢失
- 请求被处理,但是回发出问题
ACID到CAP
事务的4个特性:
- 原子性(Atomicity):一组操作只能全部成功或者全部不成功,保证原子性才能回滚
- 一致性(Consistency):数据库执行事务后,需要从一个状态转换到另一个状态
- 隔离性(Isolation):事务的执行过程不能被打断
- 持久性(Duration):事务对数据库的影响是持久性的
数据库的4个隔离级别:
- 未授权读:最低的隔离级别,允许脏读。即事务执行时,读的一方可以看到事务的执行的中间状态。
- 授权读:不允许出现脏读,不能读取中间状态的数据,只能读取事务执行完毕后的状态。但是,如果有多个事务并发执行,该级别会读到事务执行之间的中间态,比如C读取x,A事务更新x状态到10,B又更新x到20,则C可以读到x是10的情况,这种也是幻读。
- 可重复读:不允许幻读
- 串行化:事务严格串行执行
CAP定理:
- 一致性(Consistency):多个副本保持一致
- 可用性(Availability):系统在规定的时间内响应用户
- 分区容错性(Partition tolerance):系统出现网络分区,仍然可以对外提供一致性和可用性服务,除非整个网络都故障
CAP不可能同时满足,最多只有满足两个的情况。对于分布式系统来说,必须要有分区容错性,网络故障是必然的。我们要在A和C之间寻求平衡。
BASE理论
Basically Availability(基本可用)、 Soft state(软状态)、 Eventually consistent(最终一致性)。核心思想是:即使无法做到强一致性,但每个应用都可以根据自身的业务特点,采用适当的方式使得系统到达最终一致性。
基本可用:分布式系统出现部分不可预知的故障时,允许损失部分性能,比如损失部分响应时间和损失部分功能(一般非核心)。
弱状态:数据有中间状态,比如副本存在数据同步不及时
最终一致性:系统所有的副本数据,在经过一定时间同步后,最终达到相同的状态。