本文共 1699 字,大约阅读时间需要 5 分钟。
基本概念
Nacos(Dynamic Naming and Configuration Service)是一款用于构建云原生应用的动态服务发现、配置管理和服务管理平台。它集成了服务注册和配置管理于一体,能够帮助开发者更高效地管理和发现服务。
特点
- 易用性:提供简单的数据模型、标准的RESTful API、易用的控制台以及丰富的使用文档。
- 稳定性:99.9%的高可用性,确保服务稳定运行。
- 实时性:数据变更能够在毫秒级别推送给客户端。
- 扩展性:支持十万级服务和配置,百万级连接,具备强大的扩展能力。
核心功能点
服务注册
Nacos客户端通过发送REST请求向Nacos服务器注册服务,提供自身的元数据,如IP地址、端口等信息。Nacos服务器将这些元数据存储在一个双层内存Map中。
服务心跳
注册完成后,Nacos客户端会维护一个定时心跳,定期向Nacos服务器发送心跳信号,表明服务仍然可用,防止服务被剔除。默认心跳周期为5秒。
服务健康检查
- 健康实例筛选:Nacos服务器阻止向不健康的主机或服务实例发送请求。
- 定时健康检查:Nacos服务器会定期检查注册服务实例的健康状况。
- 若实例未收到客户端心跳超时15秒,将其健康属性置为
false。 - 若实例未收到心跳超时30秒,将其从注册表中剔除。
- 剔除的实例若恢复心跳,仍需重新注册。
服务发现
- 服务消费者:通过向Nacos服务器发送REST请求获取服务注册表,并将结果缓存到本地。
- 定时更新:在本地启动定时任务,定期拉取最新的服务注册表更新缓存。
- 发现机制:支持基于DNS和RPC的服务发现,提供两种实现方式:
- 服务提供者:支持原生SDK、OpenAPI以及独立的Agent。
- 服务消费者:支持DNS和HTTP/API方式。
服务同步
Nacos服务器集群之间通过互相同步服务实例,确保服务信息的一致性。
服务配置
- 中心化管理:外部化、动态化管理应用配置和服务配置。
- 动态配置:消除配置变更需要重新部署的痛点,支持在线编辑、历史版本、回滚和灰度发布等功能。
对比
Eureka对比
- 闭源与开源:Eureka 2.0为闭源版本。
- 实例数量:Nacos支持的注册实例数量远超Eureka。
- 一致性:Nacos采用Raft协议,集群一致性远超Eureka。
- 阈值机制:Nacos的阈值针对特定服务,Eureka的自我保护阈值针对所有服务。
- 协议与连接方式:Nacos使用Netty长连接,Eureka采用短连接定时发送心跳。
- 保护机制:
- Eureka采用自我保护机制,在统计续约失败比例达到阈值时,暂停剔除实例。
- Nacos在健康实例占总实例比例低于阈值时,仍返回健康实例给客户端,确保集群稳定运行。
Spring Cloud Config对比
- 动态更新:Nacos通过长连接实时推送配置更新,速度更快。
- 可视化界面:Nacos提供在线管理界面,Eureka仅提供服务状态预览。
- 工作流程:Nacos支持一键回滚、历史版本等功能,简化配置管理流程。
核心功能点对比表
| 模块 | Nacos | Eureka | 说明 |
| 注册中心 | 是 | 是 | 提供服务注册功能,实现服务中心化。 |
| 配置中心 | 是 | 否 | Nacos提供完整的配置管理界面,Eureka需配合其他工具。 |
| 动态刷新 | 是 | 否 | Nacos通过长连接实时更新配置,Eureka需依赖消息总线。 |
| 可用区AZ | 是 | 是 | 支持服务划分区域,实现容灾自动切换。 |
| 分组 | 是 | 否 | Nacos支持基于业务和环境的分组管理。 |
| 元数据 | 是 | 是 | 提供服务标签数据,例如环境和服务标识。 |
| 权重 | 是 | 否 | Nacos默认支持权重设置,调整服务负载。 |
| 健康检查 | 是 | 是 | Nacos支持服务端和客户端健康检查,Eureka由客户端发起心跳。 |
| 负载均衡 | 是 | 是 | 提供均衡策略,Eureka采用Ribbon。 |
| 管理界面 | 是 | 否 | 提供在线服务管理界面,Eureka功能有限。 |
总结
Nacos作为一款功能强大的服务治理平台,在服务注册、配置管理、服务发现等方面具有显著优势。其支持的高一致性、动态配置以及实时更新配置功能,使其在云原生应用构建中具有重要地位。
转载地址:http://ygdfk.baihongyu.com/