注册中心是如何工作的

简介: 【2月更文挑战第8天】

注册中心存储的服务信息一般包含三部分内容:分组、服务名以及节点信息,节点信息又包括节点地址和节点其他信息。那么注册中心是如何工作的呢?

1. 如何注册节点


知道了服务的节点信息如何存储之后,服务注册流程是怎么样的呢?可以用下面这张流程图来描述。

服务注册流程主要有下面几个步骤:

  • 首先查看要注册的节点是否在白名单内?如果不在就抛出异常,在的话继续下一步。
  • 其次要查看注册的 Cluster(服务的接口名)是否存在?如果不存在就抛出异常,存在的话继续下一步。
  • 然后要检查 Service(服务的分组)是否存在?如果不存在则抛出异常,存在的话继续下一步。
  • 最后将节点信息添加到对应的 Service 和 Cluster 下面的存储中。


2. 如何反注册


来看下服务提供者节点反注册的流程,可以用下面这张流程图来描述。

节点反注册流程主要包含下面几个步骤:

  • 查看 Service(服务的分组)是否存在,不存在就抛出异常,存在就继续下一步。
  • 查看 Cluster(服务的接口名)是否存在,不存在就抛出异常,存在就继续下一步。
  • 删除存储中 Service 和 Cluster 下对应的节点信息。
  • 更新 Cluster 的 sign 值。


3. 如何查询节点信息


关于服务消费者是如何从注册中心查询服务提供者的节点信息,可以用下面这张流程图来描述。

服务消费者查询节点信息主要分为下面几个步骤:

  • 首先从 localcache(本机内存)中查找,如果没有就继续下一步。这里为什么服务消费者要把服务信息存在本机内存呢?主要是因为服务节点信息并不总是时刻变化的,并不需要每一次服务调用都要调用注册中心获取最新的节点信息,只需要在本机内存中保留最新的服务提供者的节点列表就可以。
  • 接着从 snapshot(本地快照)中查找,如果没有就继续下一步。这里为什么服务消费者要在本地磁盘存储一份服务提供者的节点信息的快照呢?这是因为服务消费者同注册中心之间的网络不一定总是可靠的,服务消费者重启时,本机内存中还不存在服务提供者的节点信息,如果此时调用注册中心失败,那么服务消费者就拿不到服务节点信息了,也就没法调用了。本地快照就是为了防止这种情况的发生,即使服务消费者重启后请求注册中心失败,依然可以读取本地快照,获取到服务节点信息。


4. 如何订阅服务变更


服务消费者如何订阅服务提供者的变更信息呢?可以用下面这张流程图来描述。

主要分为下面几个步骤:

  • 服务消费者从注册中心获取了服务的信息后,就订阅了服务的变化,会在本地保留 Cluster 的 sign 值。
  • 服务消费者每隔一段时间,调用 getSign() 函数,从注册中心获取服务端该 Cluster 的 sign 值,并与本地保留的 sign 值做对比,如果不一致,就从服务端拉取新的节点信息,并更新 localcache 和 snapshot。


以上就是服务注册和反注册、服务查询和服务订阅变更的基本流程。

相关文章
|
设计模式 前端开发 关系型数据库
【DDD】全网最详细2万字讲解DDD,从理论到实战(代码示例) 3
【DDD】全网最详细2万字讲解DDD,从理论到实战(代码示例)
6160 2
|
SQL 关系型数据库 MySQL
一篇文章解析mysql的 行转列(7种方法) 和 列转行
一篇文章解析mysql的 行转列(7种方法) 和 列转行
3719 0
|
9月前
高性能网络库设计之日志组件
高性能网络库设计之日志组件
253 2
|
安全 Go
用 Zap 轻松搞定 Go 语言中的结构化日志
在现代应用程序开发中,日志记录至关重要。Go 语言中有许多日志库,而 Zap 因其高性能和灵活性脱颖而出。本文详细介绍如何在 Go 项目中使用 Zap 进行结构化日志记录,并展示如何定制日志输出,满足生产环境需求。通过基础示例、SugaredLogger 的便捷使用以及自定义日志配置,帮助你在实际开发中高效管理日志。
615 1
|
iOS开发 开发者 MacOS
macOS打开程序提示文件已损坏
macOS打开程序提示文件已损坏
390 5
|
网络协议 安全 网络架构
NAT穿透技术、穿透原理和方法
【10月更文挑战第19天】 NAT穿透技术、穿透原理和方法
1701 7
|
Android开发
Android android:exported="true" 属性
Android android:exported="true" 属性
2266 0
|
小程序
新闻电影资讯类小程序模板源码
新闻电影资讯类小程序模板源码
2936 5
|
网络协议 安全 Linux
在Linux中,当一台服务器无法ping通其他主机时,可能有哪些原因?
在Linux中,当一台服务器无法ping通其他主机时,可能有哪些原因?
|
程序员 编译器 C语言
C语言----动态内存分配(malloc calloc relloc free)超全知识点
C语言----动态内存分配(malloc calloc relloc free)超全知识点
2030 6