服务注册和服务发现是分布式系统和SOA的核心组成部分,服务注册是将服务描述信息写入集群,服务发现则是客户端能从众多服务提供者获取相应正确地址。传统情况下,使用静态配置方法实现服务信息注册。当大型系统中,服务量更大、变化更频繁时,为了避免不必要的服务中断,动态的注册和发现则尤为重要。本文讨论两个可用于服务注册和发现的项目Zookeeper和etcd。
- Zookeeper
Zookeeper是这类项目中比较悠久的一个,它起源于Hadoop,帮助Hadoop集群维护各种组件。Zookeeper使用了一种称为Zab(Zookeeper Atomic Broadcas)的协议作为其一致性复制的核心。
图1 Zookeeper数据结构
Zookeeper会维护一个具有层次关系的数据结构,非常类似于一个标准的文件系统。
Zookeeper数据结构的特点:
- 每个子目录项都被称为znode
- znode可以有版本,每个znode中存储的数据可以有多个版本
- znode可以被监控,包括目录节点中存储数据的修改、子节点目录的变化等
- znode可以有子节点目录,注意EPHEMERAL类型的目录节点不能有子节点目录
- znode可以是临时节点,一旦创建这个的znode客户端与服务器失去联系,znode将自动删除
服务注册的实现主要是通过命名空间(namespace)下的ephemeral nodes,ephemeral nodes只有在client建立连接后才存在ÿ