Dubbo微服务体系中,注册中心是核心组件之一,dubbo通过注册中心实现服务注册与发现。
注册中心有哪些作用?
- 动态加入: 服务提供者通过注册中心动态的把自己暴露给其他服务消费者,无需服务提供者逐个更新配置文件。
- 动态发现: 动态感知新的配置、路由规则、新服务不需要重启服务使之生效。
- 动态调整: 动态调整参数,自动同步到所有相关的服务节点。
- 统一配置: 避免了本地配置导致每个服务的配置不一致。
Dubbo 2.6.x版本中主要包含四种注册中心: Zookerper、Redis、Simple、Multicast。
Dubbo 2.7.7最新版本中注册中心增加了:Sofa、Nacos、Eureka、etcd3、Consul。
- Eureka: 是SpringCloud Netfilx中的重要组件,主要作用是做服务注册和发现,但是现在已经闭源(2.0版本以后)。
- Nacos: 是一个更易于构建原生态应用的动态服务发现,配置管理和服务管理平台,它是Spring Cloud Alibaba组件之一,负责服务注册与发现和服务配置,可以认为nacos=enueka+config。
- Consul: 是基于GO语言开发的开源工具,主要面向分布式,服务化的系统提供服务注册,服务发现和配置管理的功能。
- Sofa: 蚂蚁金服开源的具有承载海量服务注册和订阅能力的、高可用的服务注册中心。
Dubbo 2.6.x官方推荐使用的注册中心是Zookerper,而Nacos现在使用的也越来越多。
Nacos和Zookerper有什么不同?
-
CAP理论
一致性(Consistency) :所有节点在同一时间具有相同的数据
可用性(Availability) :保证每个请求不管成功或者失败都有响应
分区容忍性(Partition tolerance) :系统中任意信息的丢失或失败不会影响系统的继续运作 -
Zookerper
- CAP理论选择CP强一致性,如果Master节点挂了,zookeeper集群需要重新选举,这个是时候不能提供服务的。
- 健康检查支持Keep Alive。
-
Nacos
- Nacos同时支持AP和CP两种模式,具体选择根据服务注册选择临时和永久来决定走AP模式还是CP模式。
- Nacos=配置管理+注册中心
- Nacos 支持传输层 (PING 或 TCP)和应用层 (如 HTTP、MySQL、用户自定义)的健康检查。
注册中心工作流程
- 服务提供者启动时,会向注册中心写入自己的元信息,同时会订阅配置元数据信息 。
- 消费者启动时,向注册中心写入自己的元信息,并订阅服务提供者、路由和配置元信息。
- 服务治理中心(dubbo-admin)启动时,会订阅所有消费者、服务提供者、路由和配置元数据信息。
- 服务提供者离开或者有新服务加入,注册中心服务提供者目录会发生变化,变化信息会动态通知消费者,服务治理中心。
- 消费者发起服务调用时,会异步调用,统计信息等上报监控中心(dubbo-admin-simple)
Zookeeper原理
Zookeper是树形结构的注册中心,每个节点的类型分为持久节点、持久顺序节点、临时节点、临时顺序节点。1.持久节点:服务注册后保证节点不丢失,注册中心重启也会存在。
2.持久顺序节点:在持久节点特性基础上增加节点先后顺序的能力。
3.临时节点:服务注册后连接丢失或者Session超时,注册的节点会自动被移除。
4.临时顺序节点:在临时节点基础上增加了节点的先后顺序能力。
Dubbo使用Zookerper注册中心,只是用了持久节点和临时节点,对创建的顺序并没有要求。
+ /dubbo
+ --service
+-- providers
+-- consumers
+-- routers
+-- configurators
Dubbo在启动时会创建4个目录,在providers和consumers目录中分别存储服务提供方,消费方元数据信息,主要包括IP、端口、权重和用户名等数据,routers用于消费路由策略,URL元数据信息,configurators服务动态配置元数据信息。
-
Zookeeper发布实现
服务提供提供者注册是为了让消费者感知服务的存在,从而发起远程调用,也让服务治理中心感知有新的服务提供者上线,Zookeeper发布就是调用Zookeeper的客户端在注册中心创建一个目录,取消发布只要把对应的路径删除。
-
Zookeeper订阅实现
订阅通常有pull和push两种形式:pull 客户端定时轮询