zookeeper读书笔记(1)集中式到分布式理论基础

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理论往往又结合在一起。

猜你喜欢

转载自blog.csdn.net/mayongzhan_csdn/article/details/81483300