java技术--ZooKeeper基本作用

1.ZooKeeper基本概念
(1)是一个集中的服务,用于维护配置信息、命名、提供分布式同步和提供组服务
(2) 是Hadoop下的一个子项目,它是一个针对大型分布式系统的可靠协调系统
2.ZooKeeper的目标
就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户
3.ZooKeeper提供的功能

(1)配置维护管理
        <1>在应用中除了代码外,还有一些就是各种配置(比如数据库连接等)
        <2>一般都是使用配置文件的方式,在代码中引入这些配置文件
        <3>当只有一种配置,只有一台服务器,并且不经常修改的时候,使用配置文件是一个很好的做法
        <4>分布式环境下,配置文件管理和同步是一个常见问题
           1.一个集群中,所有节点的配置信息是一致的,比如 Hadoop 集群
           2.对配置文件修改后,希望能够快速同步到各个节点上
        <5>配置管理可交由ZooKeeper实现,它使用Zab这种一致性协议来提供一致性
           1.可将配置信息写入ZooKeeper上的一个Znode
           2.各个节点监听这个Znode
           3.一旦Znode中的数据被修改,ZooKeeper将通知各个节点
        <7>现在有很多开源项目使用Zookeeper来维护配置:
           1.在HBase中,客户端连接一个Zookeeper,获得必要的HBase集群的配置信息,然后才可以进一步操作
           2.开源的消息队列Kafka中,也使用Zookeeper来维护broker的信息
           3.在Alibaba开源的SOA框架Dubbo中也广泛的使用Zookeeper管理一些配置来实现服务治理
(2)分布式同步(分布式锁)
         <1>处于不同节点上不同的服务,它们可能需要顺序的访问一些资源,这里需要一把分布式的锁
         <2>可以利用Zookeeper来协调多个分布式进程之间的活动
         <3>分布式锁:在某个时刻只让一个服务去干活,当这台服务出问题的时候锁释放,立即fail over到另外的服务
         <4>分布式锁具有以下特性:
            1.ZooKeeper是强一致的:
              1.1.各个节点上运行一个ZooKeeper客户端,
              1.2.它们同时创建相同的Znode,但是只有一个客户端创建成功
            2.实现锁的独占性:
              2.1.创建Znode成功的那个客户端才能得到锁,其它客户端只能等待
              2.2.当前客户端用完这个锁后,会删除这个Znode
              2.3.其它客户端再尝试创建Znode,获取分布式锁
            3.控制锁的时序:
              3.1.各个客户端在某个Znode下创建临时Znode
              3.2.这个类型必须为CreateMode.EPHEMERAL_SEQUENTIAL,这样该Znode可掌握全局访问时序  
         <4>这种设计有一个更好听的名字叫Leader Election(leader选举)
(3)名字服务
         <1>在分布式环境下,经常需要对应用/服务进行统一命名,便于识别不同服务
            1.类似于域名与ip之间对应关系,ip不容易记住,而域名容易记住
            2.通过名称来获取资源或服务的地址,提供者等信息
         <2>按照层次结构组织服务/应用名称
            1.可将服务名称以及地址信息写到ZooKeeper上
            2.客户端通过ZooKeeper获取可用服务列表类
(4)集群管理
         <1>分布式环境中,实时掌握每个节点的状态是必要的
            1.可根据节点实时状态做出一些调整
         <2>可交由ZooKeeper实现
            1.可将节点信息写入ZooKeeper上的一个Znode
            2.监听这个Znode可获取它的实时状态变化
         <3>典型应用
            1.Alibaba开源的SOA框架Dubbo就采用了Zookeeper作为服务发现的底层机制
            2.开源的Kafka队列就采用了Zookeeper作为Cosnumer的上下线管理
            3.Hbase中Master状态监控与选举
(5)分布式通知与协调
        <1>分布式环境中,经常存在一个服务需要知道它所管理的子服务的状态
            1.NameNode需知道各个Datanode的状态
            2.JobTracker需知道各个TaskTracker的状态
        <2>心跳检测机制可通过ZooKeeper来实现
        <3>信息推送可由ZooKeeper来实现,ZooKeeper相当于一个发布/订阅系统
(6)分布式队列分为两种
        <1>同步队列:当一个队列的成员都聚齐时,这个队列才可用,否则一直等待所有成员到达         
           1.一个job由多个task组成,只有所有任务完成后,job才运行完成
           2.可为job创建一个/job目录,
              2.1.在该目录下,为每个完成的task创建一个临时的Znode
              2.2.一旦临时Znode数目达到task总数,则表明job运行完成     
        <2>队列按照FIFO方式进行入队和出队操作,例如实现生产者和消费者模型                

4.ZooKeeper主要特点

(1)最终一致性:为客户端展示同一视图,这是 ZooKeeper 最重要的性能
(2)可靠性:如果消息被一台服务器接受,那么它将被所有的服务器接受
(3)实时性:ZooKeeper 不能保证两个客户端同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口
(4)等待无关(wait-free):慢的或者失效的 client 不干预快速的client的请求
(5)原子性:更新只能成功或者失败,没有中间其它状态
(6)顺序性:对于所有Server,同一消息发布顺序一致
    <1>这里一个Server代表一个kafka服务器
    <2>ZooKeeper上的一个Znode:代表一个kafka服务器
    <3>ZooKeeper可以用来管理所以的kafka服务器
    <4>当Kafka系统中新增了代理或者某个代理故障失效时,ZooKeeper服务将通知生产者和消费者
    <5>生产者和消费者据此开始与其它代理协调工作
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值