开发人员主要使用zk的客户端,所以我们先来了解zk客户端的创建过程原理。 1. 概述 zk客户端的核心组件如下: ZooKeeper实例 :客户端入口 ClientWatcherManager :客户端Watcher管理器 HostProvider:客户端地址列表管理器 ClientCnxn:客户端核心线程。包含两个线程,即SendThread和EventThread。前者是一个I/O线程,主要负责ZooKeeper客户端和服务端之间的网络I/O通信,后者是一个事件线程,主要负责对服务端事件进行处理。 类图说明: ZooKeeper客户端的初始化与启动环节,实际上就是ZooKeeper对象的实例化过程,分析一个zk客户端的构造方法: public ZooKeeper(String connectString, int sessionTimeout, Watcher watcher, long sessionId, byte[] sessionPasswd, boolean canBeReadOnly, HostProvider aHostProvider, ZKClientConfi....
业界存在不少消息中间件产品,实现各不相同。这篇文章主要介绍基于ZooKeeper实现的分布式队列。分布式队列,简单来说分为两大类,一种是常规的先入先出队列,另一种是要等到所有元素集聚之后才能统一安排执行的Barrier模型。 1. FIFO:先入先出 FIFO队列是一种非常典型的按序执行的队列模型:先进入队列的请求操作完成后,才会开始处理后面的请求。 使用zk实现FIFO队列,和zk对于共享锁的实现类似。FIFO队列就类似于一个全局的共享锁模型。所有客户端都会到一个节点(比如queue_fifo)下创建一个临时顺序节点。 创建完节点,根据如下四个步骤确定执行顺序。 1.通过调用getChildren() 接口来获取 /queue_fifo节点下的所有子节点,即获取队列中的所有元素。 2.确定自己的节点序号在所有子节点中的顺序 3.如果自己不是序号最小的子节点,那么就需要进入等待,同时向比自己序号小的最后一个节点注册Watcher监听 4.接收到Watcher通知后,重复步骤1 整个通过流程如下图所示: 2. Barrier:分布式屏障 Barrier在分布式系统中特指系统之间的一个协....
本文章先概述一下zk的主要应用场景,然后重点讲述其分布式锁的实现。 1.应用场景概述 1.1.数据发布/订阅 数据发布/订阅系统,即所谓的配置中心。意思就是发布者将数据发布到zk的n个节点上,供订阅者进行数据订阅,进而达到动态获取数据的目的,实现配置信息的集中式管理和数据的动态更新。 1.2.负载均衡 zk作为路由,client从zk那里拿到可用的server地址(最好做个缓存),通过自己的负载均衡算法得到要连接的地址,client去连接指定server。server要做的是,当server启动后去zk注册自己(创建临时文件),子节点变化时(比如当某台server宕机),server与zk的链接会断掉,zk会自动删除该临时文件。 1.3.命名服务 命名服务是分布式系统中最基本的公共服务之一。要命名的对象包括集群中的机器列表,服务名称等。zk实现命名服务的方式:通过调用zk节点创建的API接口创建一个顺序节点,并且在API返回值中返回这个节点的完整名字。 1.4.分布式协调/通知 zk中特有的Watcher注册与异步通知机制,能够很好的实现分布式环境下不同机器,甚至是不同系统之间的协调与....
paxos算法是莱利斯·兰伯特于1990年提出的一种基于消息传递且具有高度容错特性的一致性算法。是目前公认的解决分布式一致性问题最有效的算法之一。在常见的分布式系统中,总会发生机器宕机或者网络异常等情况。paxos算法就是要解决就是如果在一个会发生上述异常的分布式系统中,快速且正确的在集群内部对某个数据的值达成一致,并且保证不论发生以上任何异常,都不会破坏整个系统的一致性。 1. 历史故事 1982年,lamport与另外两人共同发表了论文The Byzantine Generals Problem,提出了一种计算机容错理论。在理论描述过程中,为了能更加形象的表达,lamport设想了下面一种场景: 拜占庭帝国有多支军队,不同军队的将军之间要指定统一的行动计划,从而选择做出进攻或者撤退的决定,同时,各个将军在地理上都是被隔离开来的,只能依靠军队的通讯员进行通信。然而在所有的通讯员中可能会存在叛徒,这些叛徒可以任意篡改消息,从而达到欺骗将军的目的。 这就是著名的拜占庭将军问题,从理论上来说,在分布式计算领域,试图在异步系统和不可靠的信道上达成一致状态是不可能的,所以在研究的过程中,往往假....
随着计算机系统规模越来越大,将所有业务单元部署在一个或者若干个大型主机上的体系结构,已经越来越不满足当今计算机系统,尤其是大型互联网系统的发展,各种灵活多变的系统架构模型层出不穷。同时,随着微型计算机的发展,越来越多廉价的PC机成为了各大企业IT架构的首选,分布式的处理方式越来越受到业界的青睐,计算机系统经历着一场从集中式到分布式架构的转变。 1. 从集中式到分布式 自20世纪60年代大型主机被发明出来以后,凭借其超强的计算和I/O处理能力以及在安全性和稳定性方面的卓越表现,在很长一段时间,大型主机引领了计算机行业以及商业计算领域的发展。最知名的企业当属IBM,其发明的 System/360系列大型主机,是计算机发展史上的一个里程碑,与波音707,福特T型车齐名,并称为20世纪最重要的三大商业成就,并一度成为大型主机的代名词,从那时起,IT界进入了大型主机时代。 随着大型主机的到来,计算机系统架构也进入集中式处理的时代。大型主机由于卓越的性能、良好的稳定性,其在单机处理能力方面的优势非常明显。使得IT系统快速进入了集中式处理阶段。但是20世纪80年代后,计算机向微型化和网络化的发展趋势....