zookeeper学习记录-01分布式架构

来源:互联网 发布:mac下载软件哪个好 编辑:程序博客网 时间:2024/06/05 20:52

前言

随着计算机系统规模变得越来越大,将所有业务单元集中部署在一个或者若干个大型机 上的体系结构物,已经越来越不能满足当今计算机系统,尤其是大型互联网系统的快速发展,各种灵活多变的系统架构模型层出不穷。同时,随着微型计算机的出 现,越来越多廉价的PC机成为了各大IT企业架构的首选,分布式的处理方式越来越受到业界的青睐—-计算机系统正在经历一场前所未有的从集中式到分布 式架构的变革。

从集中式到分布式

自从20世纪60年代大型主机被发明出来以后,凭借其超强的计算和I/O处理能力 以及在稳定性和安全性方面的卓越表现,在很长一段时间内,大型主机引领了计算机行业以及商业计算领域的发展。在大型主机的研发上最知名的当属IBM,其主 导研发的革命性产品System/360系列大型主机,是计算机发展史上的一个里程碑,与波音707和福特T型车齐名,被誉为20世纪最重要的三大商业成 就,IT界进入了大型主机时代。

伴随着大型主机时代的到来,集中式的计算机系统架构也成为了主流。在那个时候,由 于大型主机卓越的性能和良好的稳定性,其在单机处理能力方面的优势非常明显,使得IT系统快速进入了集中式处理阶段,其对应的计算机系统称为集中式系统。 但从20世纪80年代以来,计算机系统向网络化和微型化的发展日趋明显,传统的集中式处理模型越来越不能适应人们的需求,具体表现在:

1、大型主机的人才培养成本非常高,通常一台大型主机汇集了大量精密的计算机组件,操作非常复杂,这对一个运维人员掌握其技术细节提出了非常高的要求

2、大型主机也是非常昂贵的,通常一台配置较好的IBM大型主机,其售价达到上百万美元甚至更高,因此也只有像政府、金融和电信等企业才有能力采购大型主机

3、集中式有非常明显的单点问题,大型主机虽然在性能和稳定性方面表现卓越,但并 不代表其永远不会出故障。一旦一台大型主机出现了故障,那么整个系统将处于不可用的状态,后果相当严重。最后,随着业务的不断发展,用户访问量迅速提高, 计算机系统的规模也在不断扩大,在单一大型主机上进行扩容往往比较困难

4、随着PC机性能的不断提升和网络技术的快速普及,大型主机的市场份额变得越来越小,很多企业开始放弃原来的大型主机,而改用小型机和普通PC服务器来搭建分布式计算机

对业内新闻比较关注的,一定知道阿里巴巴在2009年发起了一项”去IOE”运动。 因为阿里巴巴从2008年开始各项业务都进入了井喷式的发展阶段,这对于后台IT系统的计算与存储能力提出了非常高的要求,一味地针对小型机和高端存储进 行不断扩容,无疑会产生巨大的成本。同时,集中式的系统架构体系也存在着诸多单点问题,完全无法满足互联网应用爆炸式的发展需求。因此,为了解决业务快速 发展给IT系统带来的巨大挑战,从2009年开始,阿里集团启动了”去IOE”计划,其电商系统开始正式迈入了分布式系统时代。

集中式

所谓集中式系统就是指由一台或多台主计算机组成中心节点,数据集中存储于这个中心 节点中,并且整个系统的所有业务单元都集中部署在这个中心节点上,系统所有的功能均由其集中处理。也就是说,集中式系统中,每个终端或客户端及其仅仅负责 数据的录入和输出,而数据的存储与控制处理完全交由主机来完成。

集中式系统最大的特点就是部署结构简单,由于集中式系统往往基于底层性能卓越的大型主机,因此无需考虑如何对服务进行多个节点的部署,也就不用考虑多个节点之间的分布式协作问题。

分布式

分布式系统如何定义?这里引用一下Distributed Systems Concepts and Design(Third Edition)中的一句话:”A distributed system is one in which components located at networked computers communicate and coordinate their actions only by passing messages”。从这句话里面我们可以看到几个重点:

1、组件分布在网络计算机上

2、组件之间仅仅通过消息传递来通信并协调行动

严格讲,同一个分布式系统中的计算机在空间部署上是可以随意分布的,这些计算机可能被放在不同的机柜上,也可能在不同的机房中,甚至分布在不同的城市。无论如何,一个标准的分布式系统在没有任何特定业务逻辑约束的情况下,都会有以下几个特征:

1、分布性

分布式系统中的多台计算机都会在空间上随意分布,同时,及其的分布情况也会随时变动

2、对等性

分布式系统中的计算机没有主/从之分,既没有控制整个系统的主机,也没有被控制的 从机,组成分布式系统的所有节点都是对等的。副本(Replica)是分布式系统最常见的概念之一,指的是分布式系统对数据和服务提供的一种冗余方式。在 常见的分布式系统中,为了对外提高可用的服务,我们往往会对数据和服务进行副本处理。数据副本是指在不同的节点上持久化同一份数据,当某一个节点上存储的 数据丢失时,可以从副本上读取到该数据,这是解决分布式系统数据丢失问题最为有效的手段。另一类副本是服务副本,指多个节点提供同样的服务,每个节点都有 能力接收来自外部的请求并进行相应的处理

3、并发性

在一个计算机网络中,程序运行过程中的并发性操作是非常常见的行为,例如同一个分布式系统的多个节点,可能会并发地操作一些共享的资源,诸如数据库或分布式存储等,如何准确并高效地协调分布式并发操作也成为了分布式系统架构与设计中最大的挑战之一

4、缺乏全局时钟

一个典型的分布式系统是由一系列空间上随意分布的多个进程组成的,具有明显的分布性,这些进程之间通过交换消息来进行相互通信。因此,在分布式系统中,很难定义两个事件究竟谁先谁后,原因就是因为分布式系统缺乏一个全局的始终控制序列

5、故障总是会发生

组成分布式系统的所有计算机,都有可能发生任何形式的故障。一个被大量工程实践过 的黄金定理是:任何在设计阶段考虑到的异常情况,一定会在系统实际运行中发生,并且,在系统实际运行中还会遇到很多在设计时未考虑到的异常故障。所以,除 非需求指标允许,在系统设计时不能放过任何异常情况

6、处理单点故障

在整个分布式系统中,如果某个角色或者功能只有某台单机在支撑,那么这个节点称为单点,其发生的故障称为单点故障,也就是通常说的SPoF(Single Point of Failure),避免单点而对关键就是把这个功能从单机实现变为集群实现,当然,这种变化一般会比较困难,否则就不会有单点问题了。如果不能把单点变为集群实现,那么一般还有两种选择:

(1)给这个单点做好备份,能够在出现问题时进行恢复,并且尽量做到自动恢复

(2)降低单点故障的影响范围

分布式系统的意义

从单机单用户到单机多用户,再到现在的网络时代,应用系统发生了很多的变化。而分布式系统依然是目前很热门的讨论话题,那么,分布式系统给我们带来了什么,或者说是为什么要有分布式系统呢?从三方面考虑:

1、升级单机处理能力的性价比越来越低

摩尔定律:当价格 不变时,每隔18个月,集成电路上可容纳的晶体管数目会增加一倍,性能也将提升一倍。这个定律告诉我们,随着时间的推移,单位成本的支出所能购买的计算机 能力在提升。不过,如果我们把时间固定下来 ,也就是固定在某个具体时间点来购买单颗不同型号的处理器,那么所购买的处理器性能越高,所要付出的成本就越高,性价比就越低。那么,也就是说在一个确定 的时间点,通过更换硬件做垂直扩展的方式来提升性能会越来越不划算

2、单机处理能力存在瓶颈

某个固定时间点,单颗处理器有自己的性能瓶颈,也就说即使愿意花更多的钱去买计算能力也买不到了

3、出于稳定性和可用性的考虑

如果采用单击系统,那么在这台机器正常的时候一切OK,一旦出问题,那么系统就完全不能用了。当然,可以考虑做容灾备份等方案,而这些方案就会让系统演变为分布式系统了

#从ACID到CAP/BASE

ACID

事务是由一系列对系统中数据进行访问与更新的操作所组成的一个程序执行单元,狭义上的食物特指数据库事务。一方面,当多个应用程序并发访问数据库时,食物可以在这些应用程序之间提供一个隔离方法,以防止彼此的操作相互干扰,另一方面,食物为数据库操作序列提供了一个从失败中恢复到正常状态的方法,同时提供了数据库即使在宜昌状态下仍能保持数据一致性的方法。事务具有原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability),简称ACID。

  ① 原子性,指事务必须是一个原子的操作序列单元,事务中包含的各项操作在一次执行过程中,只允许出现以下两种状态之一,全部成功执行,全部不执行。任何一项操作失败都将导致整个事务失败,同时其他已经被执行的操作都将被撤销并回滚,只有所有操作全部成功,整个事务才算是成功完成。

  ② 一致性,指事务的执行不能破坏数据库数据的完整性和一致性,一个事务在执行之前和执行之后,数据库都必须处于一致性状态,即事务执行的结果必须是使数据库从一个一致性状态转变到另一个一致性状态,因此当数据库只包含成功事务提交的结果时,就能说数据库处于一致性状态,而如果数据库系统在运行过程中发生故障,有些事务尚未完成就被迫中断,这些未完成的事务对数据库所做的修改有一部分已写入物理数据库,这时数据库就处于一种不正确的状态,或者说是不一致的状态。

  ③ 隔离性,指在并发环境中,并发的事务是相互隔离的,一个事务的执行不能被其他事务干扰,即不同的事务并发操作相同的数据时,每个事务都有各自完整的数据空间,即一个事务内部的操作及使用的数据对其他并发事务是隔离的,并发执行的各个事务之间不能相互干扰。

  ④ 持久性,指一个事务一旦提交,他对数据库中对应数据的状态变更就应该是永久的,即一旦某个事务成功结束,那么它对数据库所做的更新就必须被永久的保存下来,即使发生系统崩溃或者宕机故障,只要数据库能够重新启动,那么一定能够将其恢复到事务成功结束时的状态。

分布式事务

分布式事务是指事务的参与者、支持事务的服务器、资源服务器以及事务管理器分别位于分布式系统的不同节点之上。通常一个分布式事务会涉及对多个数据源或业务系统的操作。

举个例子来说明分布式事务。一个最典型的分布式事务场景是跨行的转账操作。该操作涉及调用两个异地的银行服务。其中一个是本地银行提供的取款服务,另一个是目标银行提供的存款服务,这两个服务本身是无状态且相互独立的,共同构成了一个完整的分布式事务。取款和存款两个步骤要么都执行,要么都不执行。否则,如果从本地银行取款成功,但是因为某种原因存款服务失败了,那么必须回滚到取款之前的状态,否则就会导致数据不一致。

从上面的例子可以看出,一个分布式事务可以看作是由多个分布式操作序列组成的,例如上面例子中的取款服务和存款服务,通常可以把这一系列分布式的操作序列称为子事务。由于分布式事务中,各个子事务的执行是分布式的,因此要实现一种能够保证ACID特性的分布式事务处理系统就显得格外复杂。

CAP

CAP理论告诉我们,一个分布式系统不可能同时满足一致性、可用性、分区容错性这三个基本需求,最多只能同时满足其中的两个。

  ① 一致性,指数据在多个副本之间是否能够保持一致的特性,在一致性的需求下,当一个系统在数据一致的状态下执行更新操作后,应该保证系统的数据仍然处于一致状态。对于一个将数据副本分布在不同分布式节点上的系统来来说,如果对第一个结点的数据进行了更新操作并且成功后,却没有使得第二个节点上的数据得到相应的更新,于是在对第二个结点的数据进行读取操作时,获取的仍然是老数据(脏数据),这就是典型的分布式数据不一致的情况,在分布式系统中,如果能够做到针对一个数据项的更新操作执行成功后,所有的用户都可以读取到期最新的值,那么这样的系统就被认为具有强一致性。

  ② 可用性,指系统提供的服务必须一直处于可用的状态,对于用户的每一操作请求总是能够在有限的时间内返回结果。

  ③ 分区容错性,分布式系统在遇到任何网络分区故障时,仍然需要能够保证对外提供满足一致性和可用性的服务,除非是整个网络环境都发生了故障。

BASE

  BASE是基本可用(Basically Available)、Soft state(弱状态)、Eventually consistent(最终一致性)三个短语的简写。

  ① 基本可用,指分布式系统在出现不可预知故障时,允许损失部分可用性,如响应时间上的损失或功能上的损失。

  ② 弱状态,也称为软状态,指允许系统中的二数据存在中间状态,并认为该中间状态的存在不会影响系统的整体可用性,即允许系统在不同节点的数据副本之间进行数据同步的过程存在延时。

  ③ 最终一致性,指系统中所有的数据副本,在经过一段时回见的同步后,最终能够达到一个一致的状态,因此最终一致性的本质是需要系统保证数据能够达到一致,而不需要实时保证系统数据的强一致性。