zookeeper读书笔记(1)集中式到分布式理论基础
历史
- 20世纪60年代大型机被发明出来,凭借其强大的计算和IO处理能力,以及稳定性和安全性的卓越表现,引领了计算机和商业计算机领域的发展
优点
:性能高,部署简单缺点
:- 人才培养成本高—✈汇集大量精密组件对运维人员提出高要求
- 大型机价格昂贵,较好的IBM售价 上百万美元
- 存在单点问题,扩容困难
- 20世纪80年代,计算机向网络化和微型化发展
- pc性能提升,网络科技普及
分布式特点
- 分布性
- 多台计算机空间上随意分布(不同子网,异地等)
- 对等性
- 没有主从之分,没有控制整个系统的主机
- 副本分为:数据副本、服务副本
- 并发性
- 多个节点并发操作共享资源,高效协调分布式并发操作成为分布式架构与设计的最大挑战之一
- 缺乏全局的时钟
- 由于前面所说的分布性,进程之间通过消息来进行通信,缺乏全局时钟序列控制,很难定义定义两个事件谁先谁后。
- 故障总是会发生的
- 分布式系统的计算机,能发生任何形式的故障
- 大量工程实际检验
黄金定律
:设计阶段考虑到的问题,一定在系统实际运行期间发生,并且还会遇到设计没考虑到的异常。
分布式环境的典型问题
通信异常
消息丢失
:各个节点每次网络通信都伴随着不可用风险,光纤,路由器,DNS的不可用都会导致分布式系统无法顺利完成一次网络通信。消息延迟
: 单机内存访问纳秒级别(10ns左右),一次网络通信延迟0.1~1ms左右,是单机内存访问的100,差了2个数量级
网络分区
- 网络发生异常,导致部分分布式节点之间网络延迟不断增大,最终导致所有节点中只有部分节点能进行正常通信,而另外的一些不能–这种现象就是网络分区,俗称
脑裂
- 当网络分区出现时,分布式系统会出现局部小集群,此部分要完成这个分布式系统才能完成的功能,这就对
分布式一致性
提出了非常大的挑战。
- 网络发生异常,导致部分分布式节点之间网络延迟不断增大,最终导致所有节点中只有部分节点能进行正常通信,而另外的一些不能–这种现象就是网络分区,俗称
三态
- 单机一次函数调用能一定能得到一个响应:成功、者失败
- 分布式系统每次请求和响应都存在着三态:成功、失败和超时
- 发送发的消息,由于网络原因没有发送到接收方,丢失了
- 接受方接收到并处理了,将响应反馈给发送方,消息丢失了
就这中超时,发送方就不能确认请求是否被成功处理了
节点故障
- 组成分布式系统的节点,会出现宕机或者僵死
分布式系统一致性问题
ACID
四种隔离级别
七种传播行为
分布式事务
CAP和BASE理论
历史
2000年加州大学伯克利分校Eric Brewer教授提出
2002年麻省理工学院的Seth Gilbert和Nancy Lynch 从理论上证明了Brewer教授CAP猜想,从CAP理论成为了分布式计算机领域公认的定理,并深深地影响了分布式计算发展。
CAP理论
C: Consistency 一致性
A: Avaliability 可用性
P: Partition tolerance 分区容忍性
CAP理论就是说:一个分布式系统不可能同时满足这三个特性。
一致性
: 分布式环境所说的就是,多个副本之间数据能否保持一致。
用户请求使得某个节点的数据发生变更:
1)该节点变更的数据能同步到其它所有的节点上,所有的用户都能获取到最新数据,这个系统就是强一致性、严格的一致性。
2)该节点的变更数据不能同步到其它所有的节点上,用户获取的数据是老数据(脏数据)这就是分布式不一致的情况。
可用性
:系统提供的服务必须一致处于可用状态,
所说的可以用指的是:对于用户的每个请求总是在有限的时间内返回结果。
有限时间内:系统设计之初设定好的运行指标。
在线搜索,需要在1s内给出用户搜索关键词对应的结果
海量数据查询平台,一次检索可能需要20s到30s之间。
如上所说的用户对请求响应时间期望值是不同的,但是对用户来说都是在合理时间给与响应。
返回结果:是可用性的另一个指标,正常响应时间内给与一个结果:成功或者失败,不能给与一个用户感到困惑的结果,白屏、或者OOM
分区容忍性
:
它约束了分布式系统要有如下特性:在任何网络分区故障时,仍能保证对外提供满足一致性和可用性的服务,除非这个网络环境发生故障。
网络分区:分布式系统中,不同节点分布在不同子网(机房或者异地网络),由于特殊原因导致这些子网出现不连通,但各个子网的内部网络是正常的,从而导致了整个分布式系统的网络环境切分成了若干个孤立的区域。
值得注意的是:组成分布式系统的每个节点的加入和退出都是一个特殊的网络分区。
以上就是CAP得理论,一下是抛弃其中任意一项的场景说明:
简单来说:
单机就是放弃P,但是既然是分布式就不可能放弃P
一旦系统有分区故障或者其他故障,就不能用了就是放弃A
不是完全不需要,(如果真的是不需要一致性,整个系统就没什么意义了)
说的时候放弃强一致性(实时一致),保留最终一致性(不实时)。
最终一致性的就是一个时间窗口内,能达到一致。
时间窗口,具体多久就取决于系统设计,主要是数据副本在不同节点的复制时间长短。
三者放弃那个都不行,既然是分布式就不能放弃P了,所以一个分布式系统需要根据业务特点在AP(牺牲一部分一致性)和CP(牺牲一个部分可用性)之间做权衡了。
BASE理论
BA:Basically Available 基本可用
S:Soft state 软状态
E:Eventually consistent 最终一致性
BASE是ebay的架构师Dan Prithett 首次提出的。它是对CAP中的一致性和可用性的权衡结果
,来源于对大规模互联网系统分布式实践的总结
,核心思想是即使无法做到强一致性(Strong Consistency),但是每个应用都可以根据自身的业务特点,采用适当的方式来达到最终一致性(Eventual Consistency)。
基本可用
:分布式系统出现不可预知的故障时,允许损失部分可用性(注意:部分可用不等于系统不可用)
响应时间上损失:(响应时间增长)
在线搜索引擎需要0.5秒之内返回给用户相应的查询结果,但是由于出现故障(系统部分机房发生断电、断网故障),查询结果响应时间增加了1~2s
功能上的损失:(降级页面)
正常购物消费者能顺利完成每一笔订单,但是购物大促高峰,由于消费者购物行为激增,为了保证系统稳定性,部分消费者可能被引导到一个降级页面
如上也是基本可用,不是完全不能用,还能用
弱状态
:也成做软状态,是指允许系统中存在中间状态,并认为改中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间同步数据过程存在延迟。
最终一致性
:强调系统中所有的副本,在经过一段时间的同步后,最终能达到一个一致性状态,它保证的是最终能达到一致,而不是实时一致的强一致性。
时间延迟取决于:网络延迟,系统负载和数据赋值方案设计等因素。
PS:A不是完全A,C不是完全C哈!!!
实际工程实践,最终一致性存在以下五类变种:
最终一致性变种 | 解释 |
---|---|
因果 一致性 |
进程A更新完某个数据通知进程B,那么进程B之后对数据访问都应该能获取到A更新之后的最新值,并且B在更新一定是基于A更新之后的最新值,即不允许丢失更新 |
读己 之所写 |
进程A更新某个数据之后,总访问到自己更新过的最新数据,是一种特殊的因果一致性 |
会话 一致性 |
系统在同一个会话中实现“读己之所写”的一致性 |
单调读一致性 | 如果从一个进程读取一个数据项,那么系统对于该进程后续的读的任何数据都不应爱返回更久的值(越读越新) |
单调写一致性 | 一个系统需要保证对同一个进程的写操作被顺序地执行 |
数据库主备复制就是最终一致性的经典案例:
现代关系型数据库,大多采用同步和异步方式来实现主备数据复制
同步复制
:数据复制的过程通常是更新事务的一部分,因此事务完成主备数据自然就达到一致。
异步复制
:备库的更新往往会存在延时,(延时取决于事务日志在主备数据库之间传输的时间长短,如果传输时间过长,或者日志传输出现异常,导致从备库中读取到的数据是旧值,就出现了不一致–一次可以采用重试,或者人工数据订正,关系型数据库还是能达到最终数据一致s)
总结
BASE理论面向的是大型高可用可拓展分布式系统,和传统的ACID特性相反,它完全不同于ACID的强一致性模型,通过牺牲强一致性来获取可用性,允许在一段时间是不一致,最终能达到一致状态。
同时,在实际的分布式场景,不同业务单元对数据的一致性要求是不同的,在系统架构设计过程中,ACID特性和BASE理论往往又结合在一起。