命名服务是分步实现系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获取资源的实体、服务地址和提供者的信息。Zookeeper也可帮助应用系统通过资源引用的方式来实现对资源的定位和使用,广义上的命名服务的资源定位都不是真正意义上的实体资源,在分布式环境中,上层应用仅仅需要一个全局唯一的名字。Zookeeper可以实现一套分布式全局唯一ID的分配机制。
也就是说:可以通过Zookeeper来实现分布式ID。
在Zookeeper中的实现
zookeeper中的ZNode数据一共有4种:
-持久节点
-持久顺序节点
-临时节点
-临时顺序节点
那我们通过利用zookeeper创建顺序节点,则可天然的为我们创建有前缀含义的、自增的、唯一的分布式主键。
命令实现
持久顺序节点
1.先创建父节点
create /my_work
2.创建持久顺序节点4次
create -s /my_work/my_logic_id
create -s /my_work/my_logic_id
create -s /my_work/my_logic_id
create -s /my_work/my_logic_id
3.查看自动生成的id如下:
my_logic_id0000000001
my_logic_id0000000002
my_logic_id0000000003
my_logic_id0000000004
临时顺序节点
临时顺序节点的主要特点是客户端断开连接后会自动删除节点。
1.先创建父节点
create /my_work_s
2.创建持久顺序节点3次
create -e -s /my_work_s/my_logic_s_id
create -e -s /my_work_s/my_logic_s_id
create -e -s /my_work_s/my_logic_s_id
3.查看自动生成的id如下:
my_logic_s_id0000000000
my_logic_s_id0000000001
my_logic_s_id0000000002
小结
zookeeper作为一个优秀的分布式应用协调程序,也可以利用它的特性来实现许多额外的功能,但真正这样使用的却比较少,一来是因为zookeeper涉及到选举、同步性能不高,二来是因这样会引入zookeeper依赖,增加系统的复杂性。