认识ZooKeeper

            Zookeeper是源代码开发的分布式协调服务,是一个高性能的分布式数据一致性解决方案,它将那些复杂的、容易出错的分布式一致性服务封装起来,构成一个高效可靠的原语集,并提供一系列简单易用的接口给用户使用。

1.基本概念

1.1.角色

Zookeeper中的角色主要有以下三类,如下表所示:

              

系统模型如图所示:

             


1.2.设计目的

1.最终一致性:client不论连接到哪个Server,展示给它都是同一个视图,这是zookeeper最重要的性能。

2 .可靠性:具有简单、健壮、良好的性能,如果消息m被到一台服务器接受,那么它将被所有的服务器接受。

3 .实时性:Zookeeper保证客户端将在一个时间间隔范围内获得服务器的更新信息,或者服务器失效的信息。但由于网络延时等原因,Zookeeper不能保证两个客户端能同时得到刚更新的数据,如果需要最新数据,应该在读数据之前调用sync()接口。

4 .等待无关(wait-free):慢的或者失效的client不得干预快速的client的请求,使得每个client都能有效的等待。

5.原子性:更新只能成功或者失败,没有中间状态。

6 .顺序性:包括全局有序和偏序两种:全局有序是指如果在一台服务器上消息a在消息b前发布,则在所有Server上消息a都将在消息b前被发布;偏序是指如果一个消息b在消息a后被同一个发送者发布,a必将排在b前面。


2.典型的应用场景

2.1.数据发布/订阅

           顾名思义就是一方把数据发布出来,另一方通过某种手段可以得到这些数据,ZooKeeper采用推模式和拉模式两种方式结合的方式。发布者将数据发布到zk集群节点上,订阅者通过一定的方法告诉服务器,我对哪个节点的数据感兴趣,那服务器在这些节点的数据发生变化时,就通知客户端,客户端得到通知后可以去服务器获取数据信息。

2.2.负载均衡

           首先DB或者服务启动的时候先把自己在zk上注册一个临时节点,zk的节点有两种,一种是永久节点,一种是临时节点,临时节点在服务器出现问题的时候,节点会自动的从zk上删除,那么这样zk上的服务器列表就是最新的可用的列表。

           客户端在需要读写数据库的时候首先去zookeeper上得到所有可用的DB的连接信息。

           客户端随机选择一个与之建立连接。

           当客户端发现连接不可用的时候可再次从zk上获取可用的DB连接信息,当然也可以在刚获取的那个列表里移除掉不可用的连接后再随机选择一个DB与之连接。

2.3.命名服务

           就是提供名称的服务,例如数据库表格ID,一般用得比较多的有两种ID,一种是自动增长的ID,一种是UUID,两种ID各自都有缺陷,自动增长的ID局限在单库单表中使用,不能再分布式中使用,UUID可以在分布式中使用但是由于ID没有规律难于理解,我们可以借用zk阿里生成一个顺序增长的,可以再集群环境下使用的,命名易于理解的ID。

2.4.分布式协调/通知

           在分布式系统中,我们常常需要知道某个机器是否可用,传统的开发中,可以通过ping某个主机俩实现,ping得通说明对方是可用的,相反是不可用的,zk中我们让所有的机器都注册一个临时节点,我们判断一个机器是否可用,我们只需要判断这个节点在zk中是否存在就可以了,不需要直接去连接需要检查的机器,降低系统的复杂度。

3.总结

           学习它的原因一个是因为它的名字,很有趣,喜欢这种有来源的技术,zookeeper,有人说它译名为“动物园管理员”。动物园里当然有好多的动物,游客可以根据动物园提供的向导图到不同的场馆观赏各种类型的动物,而不是像走在原始丛林里,心惊胆战的被动物所观赏。为了让各种不同的动物待在它们应该待的地方,而不是相互串门,或者是相互厮杀,就需要动物园管理员按照动物的各种习性加以分类和管理,这样我们才能更加放心安全的观赏动物。

           回到企业级应用系统中,随着信息化水平的不断提高,企业级系统变得越来越庞大,性能急剧下降。拆分系统是目前我们可选择的解决系统可伸缩性和性能问题的唯一行之有效的方法。但是拆分系统同时也带来了系统的复杂性,各子系统不是孤立存在的,它们彼此之间需要协作和交互,这就是我们常说的分布式系统。各个子系统就好比动物园里的动物,为了使各个子系统能正常为用户提供统一的服务,必须需要一种机制来进行协调——这就是ZooKeeper。

            在高并发、海量储存这样的背景下,单纯靠少量高性能主机来完成计算任务已经不能满足企业的需求,企业的IT架构逐步从集中式向分布式过渡,所谓的分布式是指:把一个计算任务分解成若干个计算单元,并且分派到若干不同的计算机中去执行,然后汇总计算结果的过程!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值