第1章:分布式架构
将多台机器组成分布式的处理方式越来越收到业界的青睐。
1.1 从集中式到分布式
由于大型主机拥有卓越的性能和良好的稳定性,在单机处理方面优势非常明显。
但是随着计算机系统向网络化和微型化的方向发展,传统的集中式处理越来越不适应人们的需求。
大型主机的缺点:
(1)操作难度大。
(2)价格昂贵
(3)虽然大型主机稳定,但是一旦出现故障后果严重
(4)扩容非常困难
阿里提出的“去IOE”运动,让计算和存储能力出现了巨大的挑战,所以电商系统正式迈入分布式系统的时代。
1.1.1 集中式的特点
(1)整个系统的所有业务都部署在这个中心节点上。
(2)所有的业务集中处理
(3)不需要考虑多个节点的协作问题
1.1.2 分布式的特点
分布式系统的定义: 是一个硬件或者软件组件分布在不同的网络计算机上,彼此之间仅通过消息传递进行通信和协调的系统
分布式系统的几大特征
(1)分布性:
多台计算机随意分布,也可以随时变动
(2)对等性:
计算机没有主从之分,都有的节点都是对等的。
(3)并非性:
多个计算机同时操作共享的资源
(4)缺乏全局时钟:
因为没有全局的时钟,很难定义两个事件谁先谁后。
(5)故障总是发生:
随着机器的增加,故障也会发生的越来越多
1.1.3 分布式环境的各种问题
1、通信异常
(1)由于网络的不可靠,比如会导致通信发生异常,比如消息的丢失或者消息的延迟
2、网络分区(脑裂)
(1)随着节点之间的网络延迟不断加大,导致分布式系统中只有部分的节点可以正常工作,另一部分节点不能。
(2)这个现象称为网络分区,俗称“脑裂”
3、三态
(1)网络请求有“三态”概念,分别是成功、失败与超时。
(2)集中式的系统中只有成功与失败两个状态,但是分布式系统中有超时的问题
4、节点故障
(1)分布式系统中某些节点出现宕机或者死机的现象。
(2)且随着分布式模型的增加,故障发生的频率越来越高,几乎每天都在发生。
1.2 从ACID到CAP/BASE
1.2.1 ACID
事务有四大特性,分别是ACID,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
(1)原子性
要么全部执行,要么全部不执行。如果执行一半出现错误,则将之前执行的全部撤回。
(2)一致性
一致性是指事务不破坏数据库的完整性和一致性。
数据库的完整性包括实体完整性、参照完整性、用户定义完整性
(3)隔离性
事务之间是相互隔离的,两个同时执行的事务之间不互相影响。
在SQL规范中提供了4中隔离级别,分别是①未授权读取 ② 授权读取 ③ 可重复读 ④ 串行化
其中严格程度从低到高,最严格的是④串行化
读脏数据: 不加写锁的情况下,当前事务读取已经撤销的数据
不可重复读:不加读锁的情况下,读取后的数据被偷偷修改。第二次读就不一样了。
幻读:加写锁的情况下,事务中进行两次查询,发现结果不一致。
隔离级别 | 读脏数据 | 可重复读 | 幻读 |
---|---|---|---|
未授权读取 | 存在 | 不可以 | 存在 |
授权读取 | 不存在 | 不可以 | 存在 |
可重复读取 | 不存在 | 可以 | 存在 |
串行化 | 不存在 | 可以 | 不存在 |
1.2.2 分布式事务
分布式系统在实现ACID的时候,十分的复杂
1.2.3 CAP和BASE理论
分布式系统无法严格地满足ACID特性。如果满足严格的ACID必然会导致分布式系统变得无法使用。
所以可用性和一致性是一个无法两全其美的方案。
基础此,学者提出了CAP和BASE的分布式系统的经典理论。
CAP定理
CAP理论: 分布式系统无法同时满足C、A、P三个需求,最多只能同时满足两个。
C代表一致性(Consistency)、A代表可用性(Availability)、P代表分区容错性(Partition tolerance)
(1)一致性
数据的多个副本保持一致的状态。
强一致性:如果一个数据有三个副本,那么更新信息的时候需要将三个副本的信息同时更新完成后,才算更新成功。
(2)可用性:
对于每个用户的请求,总是在有限的时间内返回结果。
有限的时间是人为设定的,如果超过这个时间就认为不可用
(3)分区容错性
当遇到某个分区故障时,仍然能够保证对外提供满足一致性和可用性的服务。
比如说有一个数据有多个副本,则一个分区故障,另外两个依然可以保证系统的正常运行。
放弃CAP的某一定理 | 说明 |
---|---|
放弃P | 放弃容错性,那么一个数据只有一个副本,意味一旦节点出错,该数据就再也找不回来了。 |
放弃A | 放弃可用性,意味着用户需要等待长时间,如果节点出错,那么用户只能等待节点恢复,则不可用 |
放弃C | 放弃一致性,意味着数据的多个副本可以不一致。 |
对于分布式架构中,P是最重要的,因为多个副本能保证数据一定不会丢失。这就意味着设计师需要在C和A之间寻求平衡。
BASE理论
BASE理论是CAP理论无法满足的情况下,一种退而求其次的做法
BASE指的是 Basically Available(基本可用)、Soft state(软状态)和Eventually consistent(最终一致性)
(1)基本可用
允许损失一部分的可用性。
比如搜索一个内容需要0.5秒返回结果,出现过在则可以增加1~2秒。
比如高峰期进行网上购物,那么为了稳定,可能会被引导到降级的页面。
(2)软状态
允许同一数据的不同副本之间有短时间内的不一致
(3)最终一致性
所有的数据副本,经过一段时间的同步后,最终能够达到一致性的状态。