Zookeeper
程序新视界
个人公众号【程序新视界】,一个硬技术,软实力同步提升的平台。《Spring Boo技术内幕:架构设计与实现原理》作者,《深入以太坊智能合约开发》联合作者之一。主要从事于三方支付行业。
展开
-
Zookeeper简介(一)
使用Zookeeper已经有几年时间了,零零散散的积累了一些经验,但从未想过能写出一些列的文章分享出来。从今天起,计划持续更新关于Zookeeper相关的文章,从基本的搭建使用、原理分析、典型场景分析、引用案例及代码编写,甚至到后期的源代码分析,带领大家一步步的从入门到深入Zookeeper的使用,在这个过程中你会像我一样慢慢的喜欢上它。欢迎大家持续关注本人博客。简介如果你还处于单机时代,那么你将很原创 2017-02-22 08:10:47 · 4807 阅读 · 1 评论 -
Zookeeper开源客户端ZKClient和Curator简介
Zookeeper客户端提供了基本的操作,比如,创建会话、创建节点、读取节点、更新数据、删除节点和检查节点是否存在等。但对于开发人员来说,Zookeeper提供的基本操纵还是有一些不足之处。本篇博客就聊聊这些不足之处和两款开源框架ZKClient和Curator。Zookeeper API不足之处(1)Zookeeper的Watcher是一次性的,每次触发之后都需要重新进行注册; (2)Sessi原创 2017-03-30 20:32:00 · 16999 阅读 · 0 评论 -
Zookeeper客户端API之读取子节点列表(八)
本篇博客介绍一下Zookeeper原生客户端API提供的获取子节点列表方法。获取子节点列表方法方法Zookeeper原生客户端API提供了以下8中获取子节点列表的方法,每个方法的使用说明参考注释内容:/** * 返回指定路径下面的子节点列表。 * 如果watcher不为null,并且调用成功(没有异常),会将watcher注册在指定的path * 上。当path(父节点)被删除或者path下面原创 2017-03-26 11:27:44 · 8731 阅读 · 0 评论 -
Zookeeper客户端API之读取子节点内容(九)
本篇博客介绍一下Zookeeper原声API读取节点内容的使用方法。读取节点内容方法介绍方法原创 2017-03-27 10:08:38 · 7189 阅读 · 2 评论 -
分布式锁的几种实现方式
目前几乎很多大型网站及应用都是分布式部署的,分布式场景中的数据一致性问题一直是一个比较重要的话题。分布式的CAP理论告诉我们“任何一个分布式系统都无法同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition tolerance),最多只能同时满足两项。”所以,很多系统在设计之初就要对这三者做出取舍。在互联网领域的绝大多数的场景中,都需要牺牲强一致性转载 2017-04-28 15:26:55 · 2638 阅读 · 0 评论 -
Curator之Master/Leader选举注意事项
上篇博客《Zookeeper开源客户端Curator之Master/Leader选举》介绍了Leader选举的使用方法。这边博客主要说明一下在分布式定时任务选举Leader执行的过程中需要考虑的事项。我们都知道,通过Leader选举可以选举出一台机器来执行定时任务。这里有两种选择:选出Leader之后,以后所有的定时任务都由此台机器执行。每次到执行Job的时候重新进行一次竞选,成为Leader者原创 2017-04-25 11:08:37 · 3054 阅读 · 2 评论 -
Zookeeper开源客户端Curator之Master/Leader选举
在实际生产中,特别是分布式系统中,我们经常遇到这样的场景:一个复杂的任务,近需要从分布式机器中选出一台机器来执行。诸如此类的问题,我们统称为“Master选举”。比如,在分布式系统中很常见的一个问题就是定时任务的执行。如果多台机器同时执行相同的定时任务,业务复杂则可能出现灾难性的后果。本篇博客就以定时任务为例来示例说明Curator的Master选举用法。原理利用zookeeper来实现Master原创 2017-04-19 21:52:48 · 12959 阅读 · 5 评论 -
Zookeeper开源客户端Curator之事件监听详解
Curator对Zookeeper典型场景之事件监听进行封装,提供了使用参考。这篇博文笔者带领大家了解一下Curator的实现方式。引入依赖对于Curator封装Zookeeper的典型场景使用都放在了recipes中。因此,使用之前需先引入此依赖。dependency> groupId>org.apache.curatorgroupId> artifactId>cur原创 2017-04-15 11:13:44 · 14383 阅读 · 8 评论 -
Zookeeper之Watcher监听事件丢失分析
在上篇博客中,介绍了zookeeper客户Curator对监听事件的封装及应用——《Zookeeper开源客户端Curator之事件监听详解》在讲解部分代码实例的运行结果时我们已经注意到,并不是所有的监听事件都会发送到客户端。比如连续更改一个节点的内容、创建节点再马上删除节点。本篇博客就讨论一下zookeeper监听事件丢失的原因及使用时的注意事项。案例package com.secbro.lear原创 2017-04-17 10:43:09 · 15271 阅读 · 4 评论 -
Zookeeper之开源客户端ZkClient
ZKClient是由Datameer的工程师开发的开源客户端,对Zookeeper的原生API进行了包装,实现了超时重连、Watcher反复注册等功能。ZKClient版本及源码maven依赖ZKClient目前有两个不同artifactId的系列。 其中最早的0.1版本maven依赖如下:dependency> groupId>org.apache.zookeep原创 2017-04-01 18:45:07 · 28690 阅读 · 5 评论 -
Zookeeper客户端API之创建节点(七)
本篇博客主要讲一下使用Zookeeper原生的客户API来创建一个数据节点。创建数据节点方法Zookeeper提供了两个创建数据节点的方法。同步创建数据节点方法:public String create(final String path, byte data[], List acl, CreateMode createMode) throw原创 2017-03-24 10:16:05 · 15479 阅读 · 0 评论 -
Zookeeper单机安装部署与配置(二)
在上篇博客中简单介绍了Zookeeper的特点和应用场景,详情可参考:《Zookeeper简介(一)》,那么这篇博客我们介绍一下关于Zookeeper的单机模式安装步骤与配置。环境准备(1)操作系统 笔者的操作环境基于CentOS系统来进行操作,Linux环境是在VMware Workstation中搭建的虚拟机系统。(2)Java环境 Zookeeper是在Java运行环境下运行,确保在JDK原创 2017-02-23 08:36:23 · 13974 阅读 · 2 评论 -
Zookeeper集群部署与配置(三)
在上一篇博客中我们讲解了Zookeeper的单机配置,此篇博客将继续介绍Zookeeper的集群部署与配置。环境集群配置的环境与单机配置的环境相同,唯一不同的就是集群是在多台服务器之间配置,当然也有伪集群的配置,也就是在同一台机器上配置多台服务,通过端口号的不同来进行区分。配置文件在单机配置文件内增加server项的配置,新增之后的配置文件如下:tickTime=2000initLimit=10原创 2017-02-24 08:42:44 · 13591 阅读 · 0 评论 -
Zookeeper的角色及系统模型(四)
上篇博客中笔者介绍了《Zookeeper集群部署与配置》,那么这篇博客主要介绍一下在集群环境中Zookeeper存在的角色及系统模型。角色zookeeper主要有以下角色: 角色 说明 Leader(领导者) 为客户端提供读和写的服务,负责投票的发起和决议,更新系统状态。 Follower(跟随者) 为客户端提供读服务,如果是写服务则转发给Leader。在选举过程中参与投票。原创 2017-03-04 08:41:36 · 3441 阅读 · 0 评论 -
Zookeeper的客户脚本及命令(五)
Zookeeper部署完成之后,本篇博客介绍一下Zookeeper的客户端脚本以及相关的操作命令。启动Zookeeper进入zookeeper的bin目录下,执行以下命令,完成启动:[root@localhost bin]# sh zkServer.sh startZooKeeper JMX enabled by defaultUsing config: /usr/zookeeper/zooke原创 2017-03-06 08:51:59 · 3088 阅读 · 0 评论 -
Zookeeper客户端API之创建会话(六)
Zookeeper对外提供了一套Java的客户端API。本篇博客主要讲一下创建会话。创建项目首选,创建一个基于maven管理的简单java工程。在pom文件中引入zookeeper。<dependency> <groupId>org.apache.zookeeper</groupId> <artifactId>zookeeper</artifactId> <version>3.4.原创 2017-03-10 08:58:47 · 3813 阅读 · 0 评论 -
Zookeeper客户端API之修改删除节点(十)
上篇博客《Zookeeper客户端API之读取子节点内容(九)》我们介绍了Zookeeper获得节点内容的方法使用,其中实例代码中已经用到了修改节点内容的方法。因此,本篇博客只介绍修改和删除功能API提供的方法说明,具体案例可参考前篇博客或自行编写。修改节点方法同步方法:public Stat setData(final String path, byte data[], int version)异原创 2017-03-28 09:40:46 · 3398 阅读 · 0 评论 -
Zookeeper开源客户端Curator之基本功能讲解
简介Curator是Netflix公司开源的一套Zookeeper客户端框架。了解过Zookeeper原生API都会清楚其复杂度。Curator帮助我们在其基础上进行封装、实现一些开发细节,包括接连重连、反复注册Watcher和NodeExistsException等。目前已经作为Apache的顶级项目出现,是最流行的Zookeeper客户端之一。从编码风格上来讲,它提供了基于Fluent的编原创 2017-04-07 08:25:15 · 11822 阅读 · 2 评论 -
Zookeeper客户端API之节点检查和权限控制(十一)
本篇博客介绍一下原生API的节点检查是否存在和节点操作权限控制。Zookeeper提供的方法的使用方式与前面增删改查操作类似,具体使用案例不再逐一用实例说明。节点检查是否存在原生API的提供4个相应的方法,通过这些方法,可以检查节点是否存在,返回节点Stat信息,对节点进行注册监听事件等操作。方法public Stat exists(final String path,原创 2017-03-29 07:46:02 · 2543 阅读 · 0 评论 -
Curator分布式锁之生成流水号
在分布式系统中,为了保证数据的一致性,往往需要进行同步控制,比如减库存、唯一流水号生成等。Curator对Zookeeper进行了封装,实现了分布式锁的功能,提供了线程的同步控制。同时,Curator也提供了多种锁机制。下面对通过时间戳生成流水号的场景进行逐步分析。普通示例先看一个简单的程序:package com.secbro.learn.curator;import jav原创 2017-05-05 09:22:47 · 3891 阅读 · 0 评论