​ 命名服务是分步实现系统中较为常见的一类场景,分布式系统中,被命名的实体通常可以是集群中的机器、提供的服务地址或远程对象等,通过命名服务,客户端可以根据指定名字来获取资源的实体、服务地址和提供者的信息。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依赖,增加系统的复杂性。