Nacos服务注册是微服务的核心,下面我重点详解Nacos服务注册原理@mikechen
Nacos服务注册
服务注册 (Service Registration) :是指服务提供者在启动时,将其自身的身份信息,主动地报告给一个中央协调器——服务注册中心的过程。
简单来说,服务注册,就是服务提供者向“通讯录”登记自己的信息,以便其他服务能够找到它。
在传统的单体应用、或服务数量较少的架构中,服务之间的调用关系通常是静态配置、或硬编码的。
在现代的分布式系统和微服务架构中,服务的数量往往非常庞大。
并且,服务实例会频繁地启动、停止、扩容或缩容,这意味着服务的网络地址不再是固定不变的。
因此,Nacos服务注册机制的出现,正是为了解决这些问题。
Nacos服务注册原理
为了简洁明了地展现Nacos服务注册的核心流程,下面是一个高度概括的图示:
工作原理,如下:
┌─────────────────────┐ │ 服务提供者实例A │────┐ └─────────────────────┘ │ ┌─────────────────────┐ │注册+心跳(HTTP) │ 服务提供者实例B │────┼────> Nacos 注册中心 └─────────────────────┘ │ │ ┌─────────────────────┐ │ │ 服务消费者(发现) │<──┘ └─────────────────────┘
首先,服务提供者启动并注册。
应用程序启动时,其内置的Nacos客户端会自动收集自身的网络地址(IP、端口)、服务名称等信息,并将其发送给Nacos服务器进行注册。
POST /nacos/v1/ns/instance?serviceName=user-service&ip=192.168.1.100&port=8080
然后,保存注册信息。
注册中心接收到请求后,将实例信息保存到 内存中(实时服务列表),同时根据配置也可以持久化到数据库(如 MySQL)。
对于临时实例(默认),注册中心仅将数据存于内存;对于持久实例,还会写入数据库。
然后,持续心跳。
注册成功后,服务提供者会周期性地向Nacos服务器发送心跳,以证明自己仍然在线且健康。
PUT /nacos/v1/ns/instance/beat?serviceName=user-service&ip=192.168.1.100&port=8080
客户端定时(默认 5 秒)发送 心跳请求,告知注册中心“我还活着”。
服务端维护一个心跳超时时间(默认 15 秒),如果超时未收到心跳,会将该实例标记为不健康。
若持续心跳丢失超出阈值(默认 30 秒),服务实例会被自动剔除(下线)。
总之,Nacos 服务注册原理本质上是:通过客户端主动注册 + 心跳保活机制 + 服务端健康监控实现。