Nacos注册中心是微服务的核心组件,也是大厂经常考察的内容,下面我就重点来详解Nacos注册中心@mikechen
微服务注册中心
微服务注册中心,是用于管理和、协调微服务架构中各个服务的组件。
比如:大家熟知的Eureka、Nacos…这些都是平常开发,经常使用到的注册中心。
Nacos 既可以作为服务注册中心,也可以作为配置中心,接下来我们详细解析 Nacos 注册中心功能原理@mikechen
Nacos注册中心原理
微服务,注册中心原理,主要会涉及到:服务注册、服务发现…等机制。
整体流程,如下图所示:
Nacos 的注册中心功能,依赖于以下3大关键组件:
1.Nacos Server
提供服务注册和发现的核心组件,负责管理服务实例、健康检查和服务列表的维护。
2.Nacos Client
服务提供者和消费者通过 Nacos Client 与 Nacos Server 进行通信,完成服务注册、发现以及心跳续约等功能。
3.Naming 模块
Nacos 的服务注册与发现模块。Nacos 将每个服务视为一个命名实体,客户端可以通过服务名动态发现可用的实例。
Nacos注册中心工作流程
整体工作流程,如下:
首先,是服务注册。
服务启动时,将其地址、和相关元数据,注册到注册中心。
比如:
- 服务名称(Service Name):服务的逻辑名称,用于区分不同的服务实例;
- 实例 ID(Instance ID):服务实例的唯一标识符,通常由服务名称、和实例的 IP、端口…等信息生成;
- IP 地址(IP Address):服务实例所在机器的 IP 地址;
- 端口(Port):服务运行的端口号,用于其他服务进行访问,比如:8020、8021…等等;
- 健康检查 URL(Health Check URL):注册中心使用该 URL 定期检查服务实例是否健康;
- 元数据(Metadata):额外的服务信息,可能包括服务版本、所在区域(Zone/Region)、负载情况…等。
示例,如下:
hostname: localhost # 实例的主机名 instance-id: my-service-1 # 实例 ID prefer-ip-address: true # 是否使用 IP 地址注册 ip-address: 127.0.0.1 # 服务的 IP 地址 lease-renewal-interval-in-seconds: 10 # 心跳发送间隔
注册中心,会维护一张服务注册表,记录所有可用的服务实例,而且,当新的实例上线或离线时,注册表会更新。
其次是,服务发现
服务发现,指的是:服务消费者(Service Consumer)在需要调用其他服务时,向注册中心发送请求,询问某个服务的可用实例信息。
这里我以Nacos为例,比如:消费者请求某个服务时,Nacos返回可用的服务实例列表。
spring: application: name: service-a # 服务名称 cloud: nacos: discovery: server-addr: localhost:8848 # Nacos 注册中心地址
然后,消费者根据负载均衡算法,选择一个服务实例。
常见的负载均衡算法,有包含:轮询、随机、最少连接………等等。
如果 service-***
有多个实例运行(例如:端口为 8081 、和 8082 的两个实例)。
Nacos 会自动处理服务实例的负载均衡,@LoadBalanced
注解会确保调用时自动选择一个可用的服务实例。
如下所示:
@Bean @LoadBalanced // 开启负载均衡 public RestTemplate restTemplate() { return new RestTemplate(); }
再次,就是健康检查
比如:注册中心监控服务的状态,如果某个服务实例不可用,会从注册表中移除。
注册中心,会定期检查已注册服务的健康状态,比如:主动探测(主动发起 HTTP 请求、或 TCP 连接)和被动探测(服务实例的心跳检测…等等)。
如果某个服务实例未能通过健康检查,注册中心会将其标记为不可用,并从注册表中移除该实例,防止客户端调用不可用的服务。
比如:Nacos 定期通过心跳检测服务实例的健康状况,如果某个实例失效,Nacos 会自动将其从可用实例列表中移除。
陈睿mikechen
10年+大厂架构经验,资深技术专家,就职于阿里巴巴、淘宝、百度等一线互联网大厂。
关注「mikechen」公众号,获取更多技术干货!
后台回复【面试】即可获取《史上最全阿里Java面试题总结》,后台回复【架构】,即可获取《阿里架构师进阶专题全部合集》