分布式系统特点
分布式系统是一个硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统。
- 分布性
- 对等性
没有主从之分 - 并发性
- 缺乏全局时钟
- 故障总是会发生
分布式环境的各种问题
- 通信异常
消息丢失和消息延迟 - 网络分区
- 三态
成功、失败、超时。分布式环境中,网络异常可能会造成超时,接收方收到之前消息丢失;接收方的回复传输过程中丢失。 - 节点故障
分布式一致性问题
分布式系统一般会对一份数据进行多份备份,这样做的原因有:
- 高可用,解决单点故障引起的不可用
- 读高性能,多份副本可以同时提供读服务
但是引入数据复制机制后,就可能会出现数据不一致的情况。
CAP理论
- 一致性C
无论访问哪个节点,得到都是一致的数据,但是有些情况下可能无法返回 - 可用性A
在有限的时间内返回结果,但是不保证数据是一致的 - 分区容错性P
当节点间出现任意数量的消息丢失或高延迟的时候,系统仍然可以继续提供服务。
一个分布式系统无法同时满足这三个需求。只要有网络交互就一定会有延迟和数据丢失,而这种状况我们必须接受,还必须保证系统不能挂掉。所以分区容错性(P)是前提,是必须要保证的。
- 当选择了一致性(C)的时候,如果因为消息丢失、延迟过高发生了网络分区,那么这个时候,当集群节点接收到来自客户端的写请求时,因为无法保证所有节点都是最新信息,所以系统将返回写失败错误,也就是说集群拒绝新数据写入。
- 当选择了可用性(A)的时候,系统将始终处理客户端的查询,返回特定信息,如果发生了网络分区,一些节点将无法返回最新的特定信息,它们将返回自己当前的相对新的信息。
只有当发生分区故障的时候,也就是说需要 P 时,才会在 C 和 A 之间做出选择。而且如果各节点数据不一致,影响到了系统运行或业务运行(也就是说会有负面的影响),推荐选择 C,否则选 A。
事务
传统事务ACID
原子性、一致性、隔离性、持久性
分布式事务BASE
分布式系统无法实现一套严格满足ACID特性的分布式事务。为了构建一个兼顾可用性、一致性的分布式系统,提出了BASE理论。其核心思想是即使无法做到强一致性,每个系统可以根据自己的业务特点,采用适当方式使系统达到最终一致性。牺牲强一致性,换取可用性。
- BA基本可用
响应比较慢或者功能降级 - S弱状态
允许数据中间状态的存在,即允许数据同步存在延时 - E最终一致性
因果一致性、读己之所写、会话一致性、单调读一致性、单调写一致性
网友评论