随着互联网系统规模的不断扩大,大数据时代飞速到来,越来越多的分布式系统将ZooKeeper作为核心组件使用。接下来一起看一下ZooKeeper究竟可以做哪些工作。
1、数据发布/订阅
数据发布/订阅系统,就是将数据发布到ZooKeeper的一个或一系列节点上,供订阅者进行数据订阅,从而达到动态获取数据的目的。
发布/订阅系统一般有两种设计模式,分别是推(Push)和拉(Pull)。ZooKeeper中采用的是推拉接口的方式:客户端向服务端注册自己需要关注的节点,一旦该节点数据发生变更,服务端就会向相应的客户端发送Watcher事件通知,客户端收到这个消息后,需要主动到服务端获取最新的数据。
2、负载均衡
在分布式系统中,负载均衡是一种普遍的技术。ZooKeeper作为一个集群,负责数据的存储以及一系列分布式协调。所有的请求,会通过ZooKeeper通过一些调度策略去协调调度哪一台服务器。
3、命名服务
命名服务是分布式系统最基本的公共服务之一,在分布式系统中被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等。
4、分布式协调/通知
分布式协调/通知服务是分布式系统中将不同的分布式组件结合起来。通常需要一个协调者来控制整个系统的运行流程,这个协调者便于将分布式协调的职责从应用中分离出来,从而可以大大减少系统之间的耦合性,而且能够显著提高系统的可扩展性。
ZooKeeper中特有的Watcher注册与异步通知机制,能够很好地实现分布式环境下不同机器,甚至是不同系统之间的协调与通知,从而实现对数据变更的实时处理。基于ZooKeeper实现分布式协调与通知功能,通常的作坊式不同的客户端对ZooKeeper上同一个数据节点进行Watcher注册,监听数据节点的变化,如果数据节点发生变化,那么所有订阅的客户端都能够接受到相应的Watcher通知,并作出相应的处理。
5、集群管理
集群管理包括集群监控和集群控制。前者侧重对集群运行状态的收集,后者则是对集群进行操作与控制。在传统的基于Agent的分布式管理体系中,都是通过在集群中每台机器上部署一个Agent,由这个Agent负责主动向指定的一个监控中心系统汇报自己所在机器的状态。在集群规模适中的场景下,这确实是一种在生产实践中广泛使用的解决方案,但一旦系统的业务场景增多,这种方案就不好了。大规模升级困难,统一的Agent无法满足多样的需求等问题。
6、Master选举
在分布式系统中,Master往往用来协调集群中其他系统单元,具有对分布式系统状态变更的决定权。在一些读写分离的场景中,客户端的写请求往往是由Master来处理的,而在另一些场景中,Master则常常负责处理一些复杂的逻辑,并将处理结果同步到集群中其他系统单元。
7、分布式锁
分布式锁是控制分布式系统之间同步访问共享资源的一种方式。如果不同的系统或是同一个系统的不同主机之间共享一个或一组资源,那么访问这些资源的时候,往往需要通过一些互斥手段来防止彼此之间的干扰,以保证一致性,在这种情况下,需要使用分布式锁。
8、分布式队列
分布式队列分为两类,一种是常规的先入先出队列,另一种是等到队列元素聚集之后才统一安排执行的Barrier模型。
以上这些应用场景,都是基于ZooKeeper的ZAB协议实现的。
更多精彩内容,欢迎关注微信公众号:Java小笔记(ijavanote)