Nacos是微服务的核心组件,也是大厂重点考察对象,下面我就重点来详解Nacos原理@mikechen
Nacos
Nacos,全称是“Dynamic Naming and Configuration Service”,是阿里巴巴开发的一款动态服务发现、配置管理、和服务管理平台。
Nacos,主要用于微服务架构中的服务注册、发现、配置管理等核心功能。
Nacos原理
Nacos架构,如下图所示:
Nacos 的核心原理,主要围绕 服务发现、服务注册、配置管理、和健康检查… 等功能展开。
1.服务注册
服务注册,是指微服务启动后将自己的实例信息(如: IP 地址、端口号、服务名等)注册到 Nacos。
如下图所示:
工作流程,如下:
1)服务启动后注册
当一个微服务实例启动后,它会主动向服务注册中心,发送一个注册请求.
携带服务的元数据(如:服务名、实例ID、IP地址、端口、健康检查URL。。。等)。
服务注册中心接收到该请求后,会将该服务实例的信息存储到自己的注册表中。
2) 服务注册落地
Nacos 服务器接收到注册请求后,将该服务实例的信息存储。
比如:Nacos 服务器接收到注册请求后,将该服务实例的信息存储到 注册表 中(保存在内存、或持久化存储中)。
3)服务一致性
Nacos 通过 Raft 一致性协议,保证服务实例数据在集群中保持一致,确保数据的可靠性、和一致性。
Raft 通过选举一个 Leader 节点,来管理注册表的写入操作,Leader 将数据写入后,同步到其他 Follower 节点,保证数据一致。
2.服务发现
服务发现,是指服务消费者在调用服务时,通过 Nacos 获取到服务提供者的网络地址信息。
服务消费者在需要调用某个服务时,会通过服务注册中心查找目标服务的位置信息。
如下图所示:
比如:实例的 IP 地址、和端口,获取一个、或多个可用的服务实例。
消费者可以直接选择一个实例进行调用,或者使用负载均衡策略选择最合适的实例。
Nacos 提供了两种服务发现模式:
主动拉取模式:客户端通过 Nacos 的 API ,主动查询某个服务的实例列表;
被动推送模式:当注册的服务实例发生变化时,Nacos 会通过长连接、或推送的方式,将更新通知客户端。
3.配置管理
Nacos 配置管理的核心:是实现对配置的集中管理、和动态更新。
避免了配置,散布在多个微服务实例中带来的维护复杂性。
用户将配置以 Key-Value 形式存储到 Nacos 中,Nacos 服务器会将配置保存到持久化存储。
为了实现配置的动态更新,Nacos 采用了长轮询机制,客户端会定期(默认 30 秒)向 Nacos 服务端发起请求,询问配置是否有变更。
如下图所示:
如果配置发生变更,Nacos 服务端会将最新的配置推送给客户端。
客户端在收到新的配置后,可以根据需要进行处理,比如:动态刷新、更新内存中的配置。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》