一,Zookeeper的概述及背景
随着互联网高速发展, 企业对计算机的计算,存储能力要求越来越高。最简单的证明就是出现了“高并发”,“海量存储”这样词汇。在这样背景下,单纯靠少量高性能的主机来完成计算机的任务已经不满足企业的需求。企业的架构从集中式向分布式过渡。
所谓分布式: 把一个计算机任务分解成若单个计算单元,并且分派到若干个不同计算机中去执行,然后汇总计算结果的过程。
分布式核心:如何把众多的计算机协调起来,来完成结算任务。
Zookeeper设计计算机相互协助规范,来规范计算机分发任务,汇总结果。
二,Zookeeper是什么
Zookeeper是源代码开发的分布式服务,由雅虎创建,是Google Chubby的开源实现。Zookeeper是高性能的分布式数据的一致解决方案。它将那些容易出错的分布式一致性的服务封装起来,构成一个高效可靠的原于集,并提供一些简单易用的接口给用户使用。
特点:
1:源码开源。
2:是分布式协调服务,它解决分布式数据一致问题。
顺序一致性, 原子性,单一视图, 可靠性, 实时性
3:高性能。
4:我们可以通过调用Zookeeper提供接口来解决一些分布式应用中的实际问题。
三,Zookeeper应用场景
1.数据发布/订阅
数据发布/订阅顾名意思就是指一方把数据发布出来,另一方通过某种手段拿到这些数据。通常数据订阅有两种方式,分为“推模式”和“拉模式”, 推模式一般是服务器向客户端推送信息, 而拉模式是指客户端向服务器获取数据(通常采用的是定时轮询的方式)。
而Zookeeper则是两种方式结合,发布者将数据发布在Zookeeper的集群节点上,订阅者通过一定方法告诉服务器,我对那个节点数据感兴趣。那服务器节点的数据发生改变时,就通知客户端,客户端得到通知后可以去服务器获取数据信息。
2.负载均衡
上图所示, 首页数据库启动时候会在Zookeeper上注册一个临时节点,Zookeeper节点分为两种,一种是“永久节点”和“临时节点”, 临时节点有个特点,在服务出现问题的时候,不可访问的时候,在对应Zookeeper对应节点下会删除掉。这样数据库里面的列表就是一个最新和可用的列表。然后,客户端需要读取数据库的时候,它首先会在Zookeeper服务器得到所有链接信息。接着,客户端采用随机算法,从数据库列表中选取一个数据库,并和该数据库建立链接。竟然是随机的链接,就搭建了一个简单的负载均衡服务。
上述理解步骤:
1.首先DB启动的时候会把Zookeeper注册成一个临时节点。Zookeeper的节点分为两种。“永久节点”和“临时节点”, 临时节点在服务器出现问题的时候,节点为自动从Zookeeper中删除,那么Zookeeper上的列表就是最新可用的列表。
2.客户端在需要读写数据库的时候,首先它去Zookeeper得到所有DB连接信息(一张列表)。
3.客户端随机选择一个与之连接。
4.当客户端发现连接不可用的时候可在从Zookeeper中获取可用的DB链接信息, 当然也可以在刚获取的列表里面移除不可用链接后在随机选择一个与DB进行链接。
3.命名服务
顾名思义,就是指提供名称服务。例如数据库表的ID,常用两种模式,一种自动增长的ID,一种是UUID(即32位UUID)。两种ID各自都有缺陷,自动增长的ID局限于单库单表中使用,不能在分布式中使用。UUID可以在分布式使用,但由于UUID没有规律难理解。
所有,我们可以利用Zookeeper来生成一个顺序增长,可以再集群环境下使用,命名易于理解的ID。
4.分布式协调/通知
在分布式系统中,我们常常需要知道某个机器是否可使用。传统开发中,我们通常会采用Ping命令判断,如果通则可用,不通则不可用。而Zookeeper中我们让所有机器都注册了一个临时节点,我们判断一个机器是否可使用,我们只需判断这个节点是否在Zookeeper中是否存在即可,不需要直接连接需要检查机器,降低系统复杂度。
四,Zookeeper的优势
1.源代码开发。
2.已经被证实是高性能,易用稳定的工业产品。
3.有着广泛的应用:Hadoop,HBase,Storm,Slor等重量级产品当中都是使用。