一、什么是命名服务?
命名服务(Naming Service),是分布式系统中比较常见的一类场景。在分布式系统中,通过使用命名服务,客户端应用能够根据指定名字来获取资源戒服务的地址,提供者等信息。被命名的实体通常可以是集群中的机器,提供的服务地址,进程对象等等——这些我们都可以统称他们为名字(Name)。其中较为常见的就是一些分布式服务框架中的服务地址列表。通过调用 ZK 提供的创建节点的 API,能够很容易创建一个全局唯一的 path,这个 path 就可以作为一个名称。
二、dubbo中应用
阿里开源的分布式服务框架 Dubbo 中使用 ZooKeeper 来作为其命名服务,维护全局的服务地址列表。dubbo如果单单从开发者使用的角度来说很容易上手的,他是一个RPC通信框架,基于XML配置的,我虽然工作中一直没有使用过dubbo这个框架,但也去研究学习过,是一个可以快速上手的框架,但是想完全掌握一个框架,最好是去研究他的源码,熟悉其架构原理。
如何实现:
1、服务提供者在启动的时候,向 ZK 上的挃定节点/dubbo/${serviceName}/providers 目彔下写入自己的 URL 地址,这个操作就完成了服务的发布。
2、服务消费者启劢的时候,订阅/dubbo/${serviceName}/providers 目彔下的提供者 URL 地址, 并向/dubbo/${serviceName} /consumers目彔下写入自己的 URL 地址。
注意,所有向 ZK 上注册的地址都是临时节点,这样就能够保证服务提供者和消费者能够自劢感应资源的变化。另外,Dubbo 还有针对服务粒度的监控,方法是订阅/dubbo/${serviceName}目彔下所有提供者和消费者的信息。