官网:
http://Zookeeper.apache.org Zoo keeper 动物园管理者
作用:用来管理大量服务的(用于分布式应用程序的高性能协调服务)
常用来:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等。
什么是分布式?
随着公司的发展,应用的客户变多,功能也日益完善,加了很多的功能,整个项目在一个tomcat上跑,tomcat说它也很累,能不能少跑点代码,这时候 就产生了分布式系统。我们可以把大项目按功能划分为很多的模块,比如说单独一个系统处理订单,一个处理用户登录,一个处理后台等等,然后每一个模块都单独在一个tomcat中跑,合起来就是一个完整的大项目,这样每一个tomcat都非常轻松。(多个tomcat服务协同工作)
Zookeeper主要应用场景:
1注册中心
分布式应用中,通常需要有一套完整的命名规则,既能够产生唯一的名称又便于人识别和记住,通常情况下用树形的名称结构是一个理想的选择,树形的名称结构是一个有层次的目录结构。通过调用Zookeeper提供的创建节点的API,能够很容易创建一个全局唯一的path,这个path就可以作为一个名
称。
阿里巴巴集团开源的分布式服务框架Dubbo中使用Zookeeper来作为其命名服务,维护全局的服务地址列表。
2、配置中心
数据发布/订阅即所谓的配置中心:发布者将数据发布到Zookeeper一系列节点上面,订阅者进行数据订阅,当数据有变化时,可以及时得到数据的变化通知,达到动态获取数据的目的。
3、分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。在分布式系统中,常常需要协调他们的动作。如果不同的系统或是同一个系统的不同主机之间共享了一个或一组资源,那么访问这些资源的时候,往往需要互斥来防止彼此干扰来保证一致性,在这种情况下,便需要使用到分布式锁。
4、分布式队列【12306、秒杀商品,网上挂号,抢购…】
在传统的单进程编程中,我们使用队列来存储一些数据结构,用来在多线程之间共享或传递数据。分布式环境下,我们同样需要一个类似单进程队列的组件,用来实现跨进程、跨主机、跨网络的数据共享和数据传递,这就是我们的分布式队列。
Java代码操作Zookeeper–Apache Curator( Apache Zookeeper的Java客户端库)
pom.xml
创建节点
修改节点数据
节点数据查询
删除节点
zk的watch机制?
watch机制是一种订阅发布机制,使用了观察者模式,采用了一种推拉结合的模式。一旦服务端感知主题变了,那么只会发送一个事件类型和节点信息给关注的客户端,而不会包括具体的变更内容,所以事件本身是轻量级的,这就是所谓的“推”部分。然后,收到变更通知的客户端需要自己去拉变更的数据,这就是“拉”部分。
Curator(一款连接Zookeeper服务的框架)对watche机制在这方面做了优化,Curator引入了Cache的概念用来实现对Zookeeper服务器端进行事件监听。Cache是Curator对事件监听的包装,其对事件的监听可以近似看做是一个本地缓存视图和远程Zookeeper视图的对比过程。而且Curator会自动的再次监
听,我们就不需要自己手动的重复监听了。
Curator客户端中的cache共有三种
NodeCache:
NodeCache是用来监听指定节点的数据变化的,当监听的节点的数据发生变化的时候就会回调对应的函数。
PathChildrenCache
PathChildrenCache是用来监听指定节点 的子节点变化情况
TreeCache
TreeCache既能够监听
自身节点的变化、也能够监听子节点的变化