动态加入:提供者可以通过注册中心动态的把自己暴露给其他消费者,无需消费者分别更新配置文件信息。
动态发现:消费者可以动态感知新的配置、路由规则和新的服务提供者,无须重启即可生效。
动态调整;注册中心支持参数的动态调整,新参数自动更新到所有相关服务节点。
统一配置:避免了本地配置导致每个服务的配置不一致问题。
模块名称 | 描述模块描述 |
---|---|
dubbo-registry-api | 注册中心的所有API和抽象类 |
dubbo-registry-zookeeper | 使用Zookeeper作为注册中心的实现 |
dubbo-registry-redis | 使用Redis作为注册中心的实现 |
dubbo-registry-default | 基于内存的默认实现 |
dubbo-registry-muliticast | multicast模式的服务注册与发现 |
官方推荐Zookeeper,还可以对注册中心进行扩展。目前有etcd扩张,主要基于RegistryFactory和Registry类实现。
1、服务提供者启动时,会向注册中心写入自己的元数据信息,同事订阅配置元数据信息。
2、消费者启动时,会向注册中心写入自己的元数据信息,并订阅服务提供者、路由和元数据信息。
3、服务治理中心启动时,会同时订阅服务提供者、消费者、路由和配置元数据信息。
4、当有服务提供者离开或者有新的服务提供者加入,注册中心中的服务提供者目录发生变化,并将变化信息动态通知消费者、服务治理中心。
5、消费者发起服务调用时,会异步将调用、统计信息上报给监控中心。
树形结构注册中心。节点分为: 持久节点、持久顺序节点、临时节点、临时顺序节点。
持久节点:注册后保证节点不会丢失,注册中心重启也会存在。
临时节点:服务注册后连接丢失或session超时,注册的节点会自动被移除。
Dubbo只会注册以上两种类型节点。
Dubbo在启动时,会根据用户配置,在注册中心创建4个目录,在providers和consumers目录中分别存储服务提供方、消费方元数据信息,主要包括IP、端口、权重、应用名等。
进行服务调用时,用户可通过服务治理平台(web页面)下发路由配置。如果要在运行时改变服务参数,用户可通过服务治理平台下发动态配置。服务器端会通过订阅机制收到属性变更,重新更新已经暴露的服务。
服务元数据中的所有参数都是以键值对(key-value)形式存储的。
目录名称 | 存储样例 |
---|---|
/dubbo/service/providers | dubbo://192.168.1.1.8181/com.zk.service.Service1?key=value&... |
/dubbo/service/consumers | consumers://192.168.2.2.8181/com.zk.service.Service1?key=value&... |
/dubbo/service/routers | condition://192.168.3.3:8181/com.zk.service.Service1?category=routers&key=value&... |
/dubbo/service/configurators | condition://192.168.3.3:8181/com.zk.service.Service1?category=configurators&key=value&... |
providers包含key.value的元数据信息。
routers包含category,routers的元数据信息。