ZooKeeper的作⽤是什么?
ZooKeeper是⼀个开放源码的分布式应⽤程序协调服务,是Google的Chubby⼀个开源的实现,是Hadoop和Hbase的重要组件。它是⼀个为分布式应⽤提供⼀致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。ZooKeeper的⽬标就是封装好复杂易出错的关键服务,将简单易⽤的接⼝和性能⾼效、功能稳定的系统提供给⽤户。
⼀、配置维护
在我们的应⽤中除了代码外,还有⼀些就是各种配置。⽐如数据库连接等。⼀般我们都是使⽤配置⽂件的⽅式,在代码中引⼊这些配置⽂件。当我们只有⼀种配置,只有⼀台服务器,并且不经常修改的时候,使⽤配置⽂件是⼀个很好的做法,但是如果我们配置⾮常多,有很多服务器都需要这个配置,这时使⽤配置⽂件就不是个好主意了。这个时候往往需要寻⼀种集中管理配置的⽅法,我们在这个集中的地⽅修改了配置,所有对这个配置感兴趣的都可以获得变更。Zookeeper就是这种服务,它使⽤Zab这种⼀致性协议来提供⼀致性。现在有很多开源项⽬使⽤Zookeeper来维护配置,⽐如在HBase中,客户端就是连接⼀个Zookeeper,获得必要的HBase集的配置信息,然后才可以进⼀步操作。还有在开源的消息队列Kafka中,也使⽤Zookeeper来维护broker的信息。在Alibaba开源的SOA框架Dubbo中也⼴泛的使⽤Zookeeper管理⼀些配置来实现服务治理。
⼆、域名服务
名字服务这个就很好理解了。⽐如为了通过⽹络访问⼀个系统,我们得知道对⽅的IP地址,但是IP地址对⼈⾮常不友好,这个时候我们就需要使⽤域名来访问。但是计算机是不能是域名的。怎么办呢?如果我们每台机器⾥都备有⼀份域名到IP地址的映射,这个倒是能解决⼀部分问题,但是如果域名对应的IP发⽣变化了⼜该怎么办呢?于是我们有了DNS这个东西。我们只需要访问⼀个⼤家熟知的(known)的点,它就会告诉你这个域名对应的IP是什么。在我们的应⽤中也会存在很多这类问题,特别是在我们的服务特别多的时候,如果我们在本地保存服务的地址的时候将⾮常不⽅便,但是如果我们只需要访问⼀个⼤家都熟知的访问点,这⾥提供统⼀的⼊⼝,那么维护起来将⽅便得多了。
三、分布式同步
其实在第⼀篇⽂章中已经介绍了Zookeeper是⼀个分布式协调服务。这样我们就可以利⽤Zookeeper来协调多个分布式进程之间的活动。⽐如在⼀个分布式环境中,为了提⾼可靠性,我们的集的每台服务器上都部署着同样的服务。但是,⼀件事情如果集中的每个服务器都进⾏的话,那相互之间就要协调,编程起来将⾮常复杂。⽽如果我们只让⼀个服务进⾏操作,那⼜存在单点。通常还有⼀种做法就是使⽤分布式锁,在某个时刻只让⼀个服务去⼲活,当这台服务出问题的时候锁释放,⽴即fail over到另外的服务。这在很多分布式系统中都是这么做,这种设计有⼀个更好听的名字叫Leader Election(leader
选举)。⽐如HBase的Master就是采⽤这种机制。但要注意的是分布式锁跟同⼀个进程的锁还是有区别的,所以使⽤的时候要⽐同⼀个进程⾥的锁更谨慎的使⽤。
四、组服务
在分布式的集中,经常会由于各种原因,⽐如硬件故障,软件故障,⽹络问题,有些节点会进进出出。有新的节点加⼊进来,也有⽼的节点退出集。这个时候,集中其他机器需要感知到这种变化,然后根据这种变化做出对应的决策。⽐如我们是⼀个分布式存储系统,有⼀个中央控制节点负责存储的分配,当有新的存储进来的时候我们要根据现在集⽬前的状态来分配存储节点。这个时候我们就需要动态感知到集⽬前的状态。还有,⽐如⼀个分布式的SOA架构中,服务是⼀个集提供的,当消费者访问某个服务时,就需要采⽤某种机制发现现在有哪些节点可以提供该服务(这也称之为服务发现,⽐如Alibaba开源的SOA框架Dubbo就采⽤了Zookeeper作为服务发现的底层机制)。还有开源的Kafka队列就采⽤了Zookeeper作为Cosnumer的上下线管理。
Java学习参考:
(1)、什么是Znode?
负载均衡器的作用在Zookeeper中,znode是⼀个跟Unix⽂件系统路径相似的节点,可以往这个节点存储或获取数据。
Zookeeper底层是⼀套数据结构。这个存储结构是⼀个树形结构,其上的每⼀个节点,我们称之为“znode”
zookeeper中的数据是按照“树”结构进⾏存储的。⽽且znode节点还分为4中不同的类型。
每⼀个znode默认能够存储1MB的数据(对于记录状态性质的数据来说,够了)
可以使⽤zkCli命令,登录到zookeeper上,并通过ls、create、delete、get、set等命令操作这些znode节点
(2)、Znode节点类型有哪些?
1》PERSISTENT 持久化节点: 所谓持久节点,是指在节点创建后,就⼀直存在,直到有删除操作来主动清除这个节点。否则不会因为创建该节点的客户端会话失效⽽消失。
2》PERSISTENT_SEQUENTIAL 持久顺序节点:这类节点的基本特性和上⾯的节点类型是⼀致的。额外的特性是,在ZK中,每个⽗节点会为他的第⼀级⼦节点维护⼀份时序,会记录每个⼦节点创建的先后顺序。基于这个特性,在创建⼦节点的时候,可以设置这个属性,那么在创建节点过程中,ZK会⾃动为给定节点名加上⼀个数字后缀,作为新的节点名。这个数字后缀的范围是整型的最⼤值。在创建节点的时候只需要传⼊节点 “/test_”,这样之后,zookeeper⾃动会给”test_”后⾯补充数字。
3》EPHEMERAL 临时节点:和持久节点不同的是,临时节点的⽣命周期和客户端会话绑定。也就是说,如果客户端会话失效,那么这个节点就会⾃动被清除掉。注意,这⾥提到的是会话失效,⽽⾮连接断开。另外,在临时节点下⾯不能创建⼦节点。
这⾥还要注意⼀件事,就是当你客户端会话失效后,所产⽣的节点也不是⼀下⼦就消失了,也要过⼀段时间,⼤概是10秒以内,可以试⼀下,本机操作⽣成节点,在服务器端⽤命令来查看当前的节点数⽬,你会发现客户端已经stop,但是产⽣的节点还在。
EPHEMERAL_SEQUENTIAL 临时⾃动编号节点:此节点是属于临时节点,不过带有顺序,客户端会话结束节点就消失。
(3)、什么是Dubbo?
Dubbo是阿⾥巴巴公司开源的⼀个⾼性能优秀的服务框架,使得应⽤可通过⾼性能的 RPC 实现服务的输出和输⼊功能,可以和Spring框架⽆缝集成。Dubbo框架,是基于容器运⾏的.。容器是Spring。 ** 其核⼼部分包含:**
1. 远程通讯: 提供对多种基于长连接的NIO框架抽象封装,包括多种线程模型,序列化,以及“请求-响应”模式的信息交换⽅式。
2. 集容错: 提供基于接⼝⽅法的透明远程过程调⽤,包括多协议⽀持,以及软负载均衡,失败容错,地址路由,动态配置等集⽀持。
3. ⾃动发现: 基于注册中⼼⽬录服务,使服务消费⽅能动态的查服务提供⽅,使地址透明,使服务提供⽅可以平滑增加或减少机器。(4)、Dubbo能做什么?
1.透明化的远程⽅法调⽤,就像调⽤本地⽅法⼀样调⽤远程⽅法,只需简单配置,没有任何API侵⼊。
2.软负载均衡及容错机制,可在内⽹替代F5等硬件负载均衡器,降低成本,减少单点。
3.服务⾃动注册与发现,不再需要写死服务提供⽅地址,注册中⼼基于接⼝名查询服务提供者的IP地址,并且能够平滑添加或删除服务提供者。
Dubbo的存在简单来说就是要减⼩service层的压⼒。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论