ZooKeeper学习——概述篇

来源:互联网 发布:网页版淘宝网 电脑版 编辑:程序博客网 时间:2024/06/08 10:05

前言:最近学习分布式架构,发现随处可见ZooKeeper。于是花了点时间了解一下什么是ZooKeeper,这篇文章是入门概述篇,不会涉及到源码相关。

一、分布式一致性问题

  • 集中式系统:应用的各项业务逻辑集中在一个服务器上。
  • 分布式系统:应用的各项业务逻辑可以分布在不同的服务器上,彼此之间通过消息传递进行通信、协调的系统。
我们都知道事务有ACID特性,随着计算机技术的发展,计算机系统从以前的集中式系统渐渐走向了分布式系统,由于分布式环境存在的诸如通信异常、网络分区、节点故障、三态(成功/失败/超时)等各种问题,事务的特性也变得更加难以保证。于是,在大型分布式存储系统中,经常会出现分布式一致性问题。
案例:银行的跨行转账业务,这项业务包含从开户行将钱取出,然后将钱存入异地银行两个过程。银行系统可以类比为分布式系统,这项业务就是一项分布式事务。试想这种情况,用户成功将钱从开户行取出,却在存钱的时候出现了系统异常,那用户的钱岂不是白白没了。这时我们就称出现了分布式一致性问题(这里体现在系统的数据状态已经出现了本不该出现的异常)。
     为了解决这种分布式一致性问题,大神们提出了CAP理论、BASE理论以及各种分布式一致性协议。

二、CAP理论、BASE理论以及分布式一致性协议

CAP理论:一个分布式系统不可能同时满足一致性(Consistency),可用性(Availability),分区容忍性(Partition tolerance)这三个特性,最多只能满足两个。在实际的情况中,因为分布式系统通常都是部署在不同的服务器上的,因此分区容忍性一般我们是不能舍弃的一个因素,所以我们需要考虑的一般是一致性和可用性之间的权衡。
  BASE理论:BASE理论是对CAP理论中一致性和可用性进行权衡之后提出来的一种思想。即基本可用(Basically Available),软状态(Soft state),最终一致性(Eventually Consistent)。
   在这两个理论的指导下,先后出现了一些常见的分布式一致性协议,例如2PC,3PC,Paxos,ZAB等,这里就不具体展开了。ZooKeeper正是根据ZAB协议开发出来的分布式协调服务。

三、ZooKeeper的应用场景

为什么先说应用场景呢?因为我以前会觉得这个ZooKeeper到处都出现,以至于我反而觉得不知道它是干嘛的,所以这里先介绍一下ZooKeeper的应用场景。也即是ZooKeeper能够解决的问题。

  • 数据发布/订阅
  • 命名服务
  • 集群管理
  • 分布式锁
  • 负载均衡
  • 分布式协调/通知
  • Master选举
  • 分布式队列
这里只是罗列出来,并不会深入到具体的实现,有兴趣的可以自行查阅网上资料。
为了正常使用ZooKeeper,需要准备一个或多个服务器,并在各服务器上下载和安装ZooKeeper,进行简单的ZooKeeper集群配置之后,这个服务器集群就可以正常对外提供ZooKeeper分布式协调服务了。使用ZooKeeper的应用并不需要部署在与ZooKeeper相同的服务器上,当然也可以这么做。
ZooKeeper客户端通过客户端脚本/Java API/开源客户端与ZooKeeper集群进行交互,从而保证ZooKeeper客户端应用的分布式一致性。

四、ZooKeeper是什么?ZooKeeper的设计理念是什么?

ZooKeeper是典型的分布式数据一致性解决方案。设计理念是将复杂且容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并以一系列简单易用的接口提供给用户使用。

五、ZooKeeper的设计目标?

  • 简单的数据模型
  • 可以构建ZooKeeper集群
  • 顺序访问
  • 高性能

六、ZooKeeper的特性?

  • 顺序一致性
  • 原子性
  • 单一视图
  • 可靠性
  • 实时性

七、ZAB协议

那么ZooKeeper是如何做到对外提供这种分布式协调服务的呢?这得益于ZooKeeper采用的ZAB协议,ZAB(即ZooKeeper Atomic Broadcast---ZooKeeper原子消息广播协议)是分布式一致性协议的一种,是为ZooKeeper专门设计的一种支持崩溃恢复的原子广播协议。ZAB协议包括两种模式:崩溃恢复&消息广播。
服务器框架刚启动时,或Leader服务器出现网络中断、崩溃退出、重启等异常时,ZooKeeper服务器集群会进
入崩溃恢复模式。当选举产生了新的Leader服务器,同时集群中有过半的机器与Leader服务器完成状态同步
后,进入消息广播。
   ZAB协议的核心是定义了对于那些会改变ZooKeeper服务器数据状态的事务请求的处理方式。
   关于ZAB协议是如何工作的,我打算重新写一篇博文。

八、小结

其实我很想把自己学习过程中慢慢领悟的过程写出来,但是写完之后发现也说得不是很清楚,ZooKeeper还是需要在一些项目的实践中去体会的,纸上得来终觉浅。










原创粉丝点击