通信异常
- 单机内存延时在纳秒级(10ns)
- 正常一次网络通信延时在(0.1ms--1ms)
- 相差100倍
网络分区
- 由于网络发生异常,导致分布式系统中部分网络延时加大,最终导致仅仅有部分系节点能使用,叫做网络分区
三态
- 三种状态,每次请求存在三种状态:成功、失败、超时
- 超时的原因:
- 可能根本没发送到接收方
- 接收方返回的结果没发回发送方
- 超时的原因:
节点故障
- 分布式系统节点出现宕机或僵死的现象
ACID事务的隔离性、一致性、原子性、持久性
- 原子性
- 全部成功、全部失败
- 一致性
- 一个事务执行前后、数据必须保持前后一致的
- 隔离性
- 标准sql 定义了4个隔离级别
- 未授权读
- 一个事务还没完成,另一个事务可以读取其正在操作的数据
- 授权读
- 只允许读取已被提交的数据
- 可重复读取
- 读取值都和事务开始时刻一致,可能导致幻读
- 幻读:不同时刻,同一事务执行结果不同
- 串行化
- 最严格的事务隔离级别
- 所有事务都串行执行,不能并发执行
- 未授权读
- 标准sql 定义了4个隔离级别
- 事务隔离级别越高,完整性一致性越强,同时对并发性能影响越大
- 对于绝大多数应用程序,设置为授权读取
- 既保证一致性完整性,兼顾并发性能
持久性
- 对数据的变更是永久的
分布式事务
- 也称嵌套型事务
- 实现严格的事务,就要牺牲分布式系统可用性
- 可用性与一致性的妥协
CAP理论
- 分布式系统不能同时满足C(consitency)一致性、A(availablity)可用性、P(partition tolerance)分区容错性
- 最多只能同时满足俩
- 一致性
- 数据在多个副本之间是否保持一致
- 一个节点上数据更新后,在其他节点上能读到更新后的数据,称为一致
- 可用性
- 用户的操作需要在“有限的时间内” “返回结果”(二者缺一 都不叫可用)
- 有限时间:用户对于不同系统的期望值是不一样的
- 用户的操作需要在“有限的时间内” “返回结果”(二者缺一 都不叫可用)
- 分区容错性
- 分布式系统遇到任何网络分区故障的时候,仍然能提供一致性和可用性的服务
- 分区容错性往往是分布式系统的一个基本要求,因此,大多数分布式系统都是在一致性和可用性之间做平衡
BASE 理论
- BA(基本可用)、S(软状态)、E(最终一致性)
- BASE 是对CAP 理论可用性、一致性权衡的结果,是大型互联网系统分布式实践的总结
- 基本可用
- 是指系统遇到不可预知故障时,允许损失部分可用性(比如双十一,部分次要功能下线)
- 比如时间上损失(搜索结果不是0.5秒返回结果,1--2秒返回)
- 比如双十一部分消费者被引导到降级页面
- 是指系统遇到不可预知故障时,允许损失部分可用性(比如双十一,部分次要功能下线)
- 软状态
- 允许出现中间状态,允许在不同节点之间复制数据延时
- 最终一致性
- 五大类变种:
- 因果一致性
- A更新数据后通知B,B操作要基于A更新后的值
- 不相关的 C操作无限制
- 读自己所写
- 自己只能看到自己更新的最新数据
- 会话一致性
- 同一会话中总能读到更新后的最新值
- 单调读一致性
- 一个进程从系统中读取数据项某个值,该进程不能读到比这个值更旧的值
- 单调写一致性
- 系统保证同一进程所有写顺序执行
- 因果一致性
- 可以将上述5项中,部分项结合起来构建最终一致性的分布式系统
- 关系型数据库,提供最终一致性典范
- 五大类变种: