前言
命名服务,简单来说就是对某一资源命名,使其可以通过路径名称对资源唯一定位,zookeeper节点具有唯一性,可以保证ZNode在分布式系统中唯一。
应用方向
1.提供类似JNDI的功能
利用zookeeper中的树形分层结构,可以把系统中的各种服务的名称,地址以及目录信息存放在zookeeper中,需要的时候去zookeeper中去读取。
2.利用zookeeper中的顺序节点的特性,制作分布式的序列号生成器(ID生成器)
在往数据库中插入数据,通常是要有一个ID号,在单机环境下,可以利用数据库的主键自动生成id号,但是这种在分布式环境下就无法使用了,可以使用UUID,但是UUID有一个缺点,就是没有什么规律很难理解。使用zookeeper的命名服务可以生成有顺序的容易理解的,支持分布式的编号。
例子
1.命名服务之统一的资源定位获取
我利用zookeeper的注册中心功能,将我的zero服务注册到zookeeper,默认的服务注册中心根路径是/services,zero是我的服务名称,zero子节点是具体的实例,这个实例节点上存储的是具体的服务数据,如下图所示,只要约定好路径,可以在任何服务下获取到这个路径资源的信息。
Talk is cheap,show me the code...
控制台输出,就获取到了这个资源的数据信息:
2.命名服务之分布式的序列号生成器
直接上代码:
结果: