Apache ZooKeeper is an effort to develop and maintain an open-source server which enables highly reliable distributed coordination.node
--官网数据库
从官网能够看出,zookeeper是一个分布式一致性服务的软件。认识它源于hadoop中的habse.在后来的使用过程,能够看出它本省就是一个分布式的内存数据库,它由多个节点组成,每一个节点的中存储的内容的都是同样的。,看到这里,每一个节点保存内容相同,这样也不怕数据丢失了,读的时候随便从一个节点读取就行,可是如何保证这些节点都是“同样的”的。 这样就须要一个协议,名字叫zab协议。内部咋实现的,这里面不讨论。apache
motan利用zookeeper实现发布订阅。其实所谓发布,其实就是建立节点。订阅就是对本身感兴趣的节点设计监听器。显然:服务器
发布者就是provider:它根据本身URL建立节点。固然consumer也会建立节点。只是前者会被监听,后者不会。负载均衡
订阅者就是Consumer:它监听某个节点的变化或者相应的节点的子节点变化了解了provider的状况,同一个provider可能有多个服务器提供,有服务器可能会忽然宕机,或者加上一个新的服务器,所以consumer要及时的感觉到它对应的服务列表的变化。从而能够根据负载均衡机制或者高可用机制选取一个服务提供者。分布式
motan中的zookeeper应用(发布订阅)ide
源码中示例代码motan-demo中已经存在MotanDemoService这个服务,我也随便建立了一个服务motan.learn的服务实现一个很是简单的功能。下图是zookeper的目录结构和节点的内容。从中能够看到一个服务下会建立对应的server和client的znode.该service的对应的provider和consumer都会建立本身的节点。好比MotanDemoService中有2个服务器提供服务。一个客户端,这个 client会监测相应的server的服务列表。根据已定规则选取一个对应的serveroop
图1.1 motan-demo中的服务对应的zookeeper结构 设计