从Paxos到ZooKeeper-分布式架构

来源:互联网 发布:mac系统使用视频教程 编辑:程序博客网 时间:2024/06/08 00:48


** ZooKeeper相关博文,是我对《从Paxos到ZooKeeper 分布式一致性原理与实践》的学习笔记,特此声明

一、从集中式到分布式

1. 集中式的特点

    集中式系统:由一台或多台主计算机组成中心节点,数据和系统的所有业务单元都集中存储、部署在中心节点上,所有功能也都由其集中处理,而终端和客户端仅仅负责数据的录入和输出。

特点:
          部署结构简单
         往往基于性能卓越的大型主机(在单机处理能力方面优势明显,具有良好的稳定性和安全性)

    缺点:单点故障,虽然系统稳定性卓越,但不代表不会出现故障,一旦发生,系统就将处于不可用状态;系统扩容较为困难

2. 分布式特点

    分布式系统:硬件或软件组件分布在不同的网络计算机上,彼此之间仅仅通过消息传递进行通信和协调的系统

分布性,多台机器在空间上随意分布,分布情况随时变动
对等性,多台机器间没有主从之分,所有节点都是对等的。副本是分布式系统的常见概念,是指分布式系统对数据和服务提供的一种冗余方式(数据副本,服务副本),数据副本是指不同节点上持久化同一份数据;服务副本是指多个节点都能接受外部请求处理提供同样服务
并发性,多个节点会并发地操作共享资源,如数据库或分布式存储等
缺乏全局时钟,多台机器间通过交换消息进行通信,而系统缺乏全局的时钟序列来定义事件顺序
故障总会发生,任何在设计阶段考虑到没考虑到的异常情况都会在系统实际运行中发生

3.难题与挑战

(1)通信异常

    分布式系统需要各节点间进行网络通信,而网络本身具有不可靠性,最终都可能会导致分布式系统无法顺利完成一次网络通信

    即使网络通信正常进行,但其时延也远大于单机操作。

(2)网络分区

    当网络发生异常导致部分节点间时延不断增大,最终只有部分节点能够进行正常通信,出现网络分区现象(子网络内部正常通信,自网络间无法网络不联通)。在极端一点,这些局部小集群可能会独立完成原本需要整个系统才能完成的功能,如事务处理

(3)三态

    传统的单机系统中,响应结果非常明确:成功、失败,而分布式系统的每次请求都可能存在三态:成功、失败、超时

    由于网络的不可靠,超时现象也有两种情况:请求未成功发送到接收方而在发送过程中丢失;请求成功发送到接收方并处理完成后在响应反馈过程中丢失

    当出现超时现象时无法判断是第一种情况还是第二种情况,也就是无法确定请求是否被成功处理

(4)节点故障

    组成分布式系统的服务器节点出现宕机或僵死现象

二、从ACID到CAP/BASE

1. ACID

    事务是由系列对系统中数据进行访问和更新的操作组成的程序执行逻辑单元。事务可以为多个应用程序操作数据库提供隔离方法和从失败中恢复操作

    ACID即事务的四大特性

原子性:事务必须是原子的操作序列单元
一致性:事务执行结果必须是使数据库从一个一致性状态转变为另一个一致性状态
隔离性:并发事务操作相同数据时都有各自完整的数据空间,相互隔离
持久性:事务一旦提交对数据库的影响是永久性的

    这里简单补充下事务的隔离级别:

读未提交:事务执行过程中读取到其他事务未提交的数据
读已提交:事务执行过程中读取到其他事务已提交的更新数据,可避免脏读
可重复读:事务执行过程中读取其他事务已提交的插入数据,可避免脏读、不可重复都
串行化:事务串行化执行,可避免脏读、不可重复读、幻读

    隔离级别越高,越能保证数据完整性和一致性,但对并发性能影响也越大

2. 分布式事务

    分布式事务:事务的参与者、资源服务器及事务管理器分别位于分布式系统的不同节点之上

    对于本地事务或者集中式的事务处理系统,可以用ACID模型来保证数据的严格一致性;而对于一个分布式系统如果希望实现ACID特性,则会在系统可用性和严格一致性之间出现冲突,因为要求系统具有严格一致性时就很可能牺牲掉系统的可用性

(1)CAP理论

    CAP理论是分布式计算领域的一个公认定理,它表明一个分布式系统不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance)三个基本需求,最多只能同时满足其中两项

  • 一致性

         一致性是指多个副本之间保持一致。在一致性的需求下,但那个系统在数据一致的状态下进行更新操作后,应该保证系统的数据仍然处于一致状态

         在分布式系统中,如果对一个数据项的更改操作执行成功后所有用户都可以读取到最新的值,则认为该系统具有强一致性(严格一致性)

  • 可用性

         系统提供的服务必须一直处于可用状态,对于每个请求都能够在有限时间内返回结果

         有限时间:对于用户的操作请求,系统能够在指定时间内返回处理结果,如果超过该时间范围则认为系统不可用。不同系统之间的响应时间期望值不尽相同,但系统必须存在一个合理的响应时间

         返回结果:系统在完成对用户请求的处理后,返回明确的请求处理响应结果(成功或失败)

  • 分区容错性

         分区容错性指出系统在遇到任何网络分区故障时,仍要保证能够对外提供满足一致性和可用性的服务

         网络分区是指分布式系统中,不同节点分布在不同子网络,由于特殊原因导致子网络内部正常而子网络之间出现网络不联通状况使得系统整个网络环境划分为若干孤立的区域


    之前也提到说分布式系统不可能同时满足一致性、可用性、分区容错性,而对于分布式系统来说分区容错性可以说是一个最基本的要求(分布式组件必定在不同节点,必定出现子网络,而网络问题又可以说是肯定会出现的异常情况),所以系统架构需要关注一致性和可用性之间的平衡

(2)BASE理论

    BASE是对CAP中一致性和可用性权衡的结果,是Basically Available(基本可用)、Soft state(软状态)、Eventually consistent(最终一致性)构成,其核心思想:即使无法做到强一致性,但都应该根据业务特点采用适当方式使系统达到最终一致性

  • 基本可用

         分布式系统出现不可预知故障时,允许损失部分可用性(响应时间上的损失即响应时间增加、功能上的损失即引导用户到降级页面等),但绝不等价于系统不可用

  • 软状态

        允许系统中的数据存在中间状态认为其不影响系统整体可用性,即允许系统数据副本间同步过程存在延时

  • 最终一致性

        系统中所有数据副本在经过一段时间的同步后最终能达到一致性状态,而不需要实时保证数据强一致性。在没有发生网络故障的情况下,最终一致性的延时取决于网络延迟、系统负载等因素

        最终一致性在工程实践中的变种

因果一致性:A进程更新数据后通知了B,则B之后对数据的访问都应该能获取A更新后的最新值,若B进行更新操作也是基于A更新后的最新值
读己之所写:进程总能访问到自己更新过的最新值(特殊的因果一致性)
会话一致性:将对系统数据访问过程定在一个会话中,更新操作后进程能够在同一个会话中始终都会读取到最新值
单调读一致性:当进程读取出数据项值后,后续的数据访问只会比该值新
单调写一致性:来自同一个进程的写操作顺序执行


    总的来说,BASE理论不同于ACID的强一致性,而是通过牺牲强一致性来获取可用性,允许数据在一段时间内不一致但最终达到一致状态

    最终一致性不仅仅用于大型分布式系统,现代关系型数据库也采用了该模型来实现主备数据复制,复制方法有同步和异步方式。同步方式复制过程通常是更新事务的部分,事务完成后主备数据库就会达到一致;异步方式中,备库更新往往存在延时(事务日志在主备数据库之间传输的时间),如果传输出错,则备库中数据就出现了不一致情况,但关系型数据库还是能够保证过最终数据达到一致

阅读全文
0 0
原创粉丝点击