16 张图 | Nacos 架构原理①:一条注册请求会经历什么?

Nacos 作为注册中心,用来接收客户端(服务实例)发起的注册请求,并将注册信息存放到注册中心进行管理。

那么一条注册请求到底会经历哪些步骤呢?

知识点预告

先上一张整体的流程图:

  • 集群环境:如果是 Nacos 集群环境,那么拓扑结构是什么样的。

  • 组装请求:客户端组装注册请求,下一步对 Nacos 服务发起远程调用。

  • 随机节点:客户端随机选择集群中的一个 Nacos 节点发起注册,实现负载均衡。

  • 路由转发:Nacos 节点收到注册请求后,看下是不是属于自己的,不是的话,就进行路由转发。

  • 处理请求:转发给指定的节点后,该节点就会将注册请求中的实例信息解析出来,存到自定义的内存结构中。

  • 最终一致性:通过 Nacos 自研的 Distro 协议执行延迟异步任务,将注册信息同步给集群中的其他节点,保证了数据的最终一致性。

  • 异步重试:如果注册失败,客户端将会切换 Nacos 节点,再次发起注册请求,保证高可用性。

这些知识点里面还有很多细节,我会通过画图 + 源码剖析的方式给大家解答。如果遇到源码看不太懂的地方,可以多看下我画的图,然后翻下源码,对照着一起看。

小 Tip:本文使用的 Nacos 版本: 2.0.4。

一、源头:发起注册

1.1 阅读源码的小技巧

上篇我们讲到加上一个注解 @EnableDiscoveryClient 就可以使服务自动注册到 Nacos。

那么这个发起注册的地方到底在哪呢?注册信息又是长什么样的呢?

告诉大家一个看源码的小技巧,拿到源码后,不是直接各个文件都看一篇,而是先看源码中带的 example 文件夹。如下图所示,找到 example 的 App 类,里面就有发起注册的实例代码。如下图所示:

当然,我们也可以通过官网给的 curl 命令发起 HTTP 请求:

curl -X POST 'http://127.0.0.1:8848/nacos/v1/ns/instance?serviceName=nacos.naming.serviceName&ip=20.18.7.11&port=8080'

复制代码

留个问题:我们都是加一个 Nacos 注解 @EnableDiscoveryClient,就会自动把服务实例注册到 Nacos,这个是怎么做到的?

1.2 发起注册的流程图

先来看一下代码的流程图:

跟着这个流程图,我们 debug 来看下。

1.3 组装注册的实例信息

入口的核心代码如下图所示,它会组装注册的实例信息<

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值