Nacos注册中心

简介: 本文详细介绍Nacos的安装部署、服务注册与发现、分级模型、负载均衡策略、权重控制、环境隔离及临时/持久化实例等核心功能,涵盖Spring Cloud Alibaba整合实践,帮助开发者掌握Nacos在微服务架构中的应用,实现高效服务治理与配置管理。

1.Nacos安装部署
1.1 下载安装
nacos官网提供了安装部署教程,其下载链接指向github官网,选择合适版本即可。如访问受阻可直接使用以下最新稳定版压缩包:,后续我们也可能会更改为其他版本做更多测试。
公司一般会采用最新版落后几个版本的稳定版当做生产版本,避免一些新特性引发的未知问题。
1.2 启动
● window请直接进入路径:cd nacos/bin后双击startup.sh启动,或按照下述指令启动
cd nacos/bin
startup.cmd -m standalone
● linux或mac进入路径:nacos/bin/,cmd控制台执行
cd nacos/bin
sh startup.sh -m standalone
注意:如存在端口冲突,可至路径:nacos/conf/application.properties 中修改后启动

注意:nacos存储路径不可有中文。如遇启动异常,
● mac可至路径:nacos/logs/start.out 查看具体错误信息
● windows可至路径:nacos/logs/nacos.log 查看具体错误信息,正常启动日志如下

1.3 访问
成功启动后访问如下地址:http://localhost:8848/nacos/#/login,默认用户名/密码:nacos/nacos
2.整合Nacos注册中心
2.1 依赖导入
父工程新增spring-cloud-alibaba依赖


com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.6.RELEASE
pom
import

因为Spring-cloud-alibaba自身也是集成了多个组件,所以这里只需引入alibaba大管家即可

子工程去除eureka依赖
注意order-service、user-service均需删除
子工程新增spring-cloud-alibaba-nacos依赖
注意:不同于父工程,是nacos-discovery,order-service、user-service均需添加


com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery

至此,三个工程pom如下(eureka相关工程无需操作):
● 父pom:
● user-service pom:
● order-service pom:
2.2 配置文件修改注册中心
子工程均去除eureka注册配置,均新增nacos配置
spring:
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
至此,两个业务工程application.yml如下(eureka相关工程无需操作):
● order-service:
● user-service:
2.3 启动工程并验证
启动应用后访问Nacos会发现服务已完成注册

如启动遇到工程仍存在Eureka依赖,可尝试重新编译整个工程,或手动删除target文件夹后再启动

3.Nacos服务分级模型

不同于Zookeeper没有针对服务发现设计数据模型,它的数据是以一种更抽象的树形K-V组织的,因此理论上可以存储任何语义的数据。而Eureka或Consule都做到了实例级别的数据扩展,这能满足大多数场景但无法满足大规模和多环境的服务数据存储。Nacos经过多年经验后提炼出上述模型,其特点在于:服务-集群-实例三层模型,可以满足所有场景下的数据存数和管理。
通过设置不同的集群所在参数,可以保证相同集群间优先调用,减少网络开销。当本地集群服务无法拉取时,再去跨集群调用。对于此工程我们只需要设置提付提供者集群参数:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务地址
discovery:
cluster-name: HZ # 声明集群名称杭州
此时访问Nacos会发现其增加了集群属性发生变化,原为:Default

为模拟多集群场景,此时我们复制一个新的userApplicatio3启动类,具体操作步骤如下:
● 复制一个新的userApplicatio3启动类,设置其启动端口:-Dserver.port=8083
● 更改配置文件集群属性为GZ(注意不要停userApplication、userApplication2,否则原注册信息会失效)
● 启动userApplication3并访问nacos

此时查看Nacos服务信息会发现,已经有了两个集群信息。

此时我们就完成Nacos分级模型的验证,在实际的工作、生产环境中,一般来说服务都是同集群部署,不需要开发人员声明式感知服务所在集群信息。
4.NacosRule负载均衡策略
修改oder-service集群属性、负载均衡策略,调整为如下:
注意:此时需要将OrderApplication中的代码声明式负载均衡策略注释或删除(约定大于配置),否则失效
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
discovery:
cluster-name: HZ # 声明集群名称杭州
userservice: # 给某个微服务配置负载均衡规则,这里是userservice服务
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
此时重启应用后会发现orderservice集群属性存在变化:

访问oder-service服务会发现其优先匹配HZ集群的userApplication、userApplication2。
上面我们提到优先调用本集群的服务,当本集群服务实例不存在时会考虑跨集群调用,故我们停掉userApplication、userApplication2,再做一次访问会发现访问正常,同时请求日志打到userApplication3。

5.Nacos权重控制
基于上一章节的负载均衡算法,我们可以了解到:存在部分机器性能更优,此时该机器理应得到更多的流量分配,nacos通过设置服务权重解决这一问题,权重越大访问评率越高,配置页面如下:
编辑后再次访问服务,会发现流量产生明细变化。如权重设置为0对于服务调用方等同于服务下线。
6.Nacos环境隔离
日常开发过程中,我们一般会有dev、test、poc、prod等多个环境,同一个服务不同环境之间因存在代码不一致问题肯定需要做隔离调度,Nacos通过namespace解决此问题,配置页面如下,我们新增一个dev:

增加完成后列表发生变化如下:
我们尝试在order-service中增加namespace,并重启服务再次访问,注意:namespace后字符串为上图ID
cloud:
nacos:
server-addr: localhost:8848 #nacos服务地址
discovery:
cluster-name: HZ # 声明集群名称杭州
namespace: 06e5f1a5-9ecb-438a-aae0-b434073bb973 # 命名空间
此时会因不在同一命名空间导致无法访问(因userservice暴露服务时未声明namespace,默认public)

我们修改user-service的配置文件,增加namespace,并重启服务再次访问会发现服务恢复正常
7.Nacos临时实例与持久化实例
Nacos在定义上区分临时实例和持久化实例,其主要区分关键是健康检查的方式。
● 临时实例:客户端上报模型,能够自动摘除不健康实例,无需持久化实例存储
● 持久实例:服务端反省探测模式,客户端因不上报心跳故不会自动摘除下线实例

在大中型公司,两种类型一般都会使用,基础的组件如数据库、缓存等往往不能上报心跳,这种类型的服务在注册时就需要作为持计划实例注册。而上层的业务服务,如微服务或Dubbo服务,服务的Provider端支持添加心跳,此时就可以使用临时实例的注册方式。
其配置文件配置如下:
cloud:
nacos:
server-addr: localhost:8848 # nacos服务地址
discovery:
cluster-name: HZ # 声明集群名称杭州
namespace: 06e5f1a5-9ecb-438a-aae0-b434073bb973 # 命名空间
ephemeral: false # 设置为非临时实例
8.Nacos更多总结分析
,如无法访问可链接至:https://kdocs.cn/l/ccGuOOfpPjFv,图片展示如下:

9.总结
本节从Nacos安装、运行到具体规则配置,带领读者们深度参与了Nacos日常使用场景,Nacos作为注册中心可以优雅替换Eureka也离不开SpringCloud Alibaba的开源贡献。作为国内主流的配置、注册中心,Nacos在国内多数微服务公司都有使用,感兴趣的可以阅读一下本节推荐资料,笔者整理归纳在本文第8章节。
Nacos除了能够实现服务注册发现(AP),此外还有个重要特性:配置管理(CP),我们将在下一章节展开学习。

思考问题
● Nacos是什么?解决了什么问题?
● Nacos是如何优雅替换Eureka的?
● Nacos实现的是客户端,还是服务端负载均衡?
● Nacos如何实现注册中心?

10.推荐阅读资料
● Nacos白皮书:

相关文章
|
5月前
|
XML Java Nacos
Spring Boot 整合Nacos 版本兼容适配 史上最详细文档
本文介绍SpringBoot整合Nacos的完整流程,涵盖Nacos下载安装、配置中心与服务发现集成、版本兼容性问题及实战配置。重点解决SpringBoot 3.3.0与Nacos版本适配难题,推荐使用Spring Cloud Alibaba方案,并提供项目开源地址供参考学习。
|
存储 边缘计算 人工智能
边缘计算是啥?
边缘计算是啥?
1103 0
|
IDE Java 开发工具
导入jar包后无法找到`com.aliyun.teaopenapi.models.Config`这个类
导入jar包后无法找到`com.aliyun.teaopenapi.models.Config`这个类
1890 3
|
2月前
|
存储 Kubernetes 应用服务中间件
容器服务ACK入门:Kubernetes上云实践
本文介绍阿里云容器服务ACK(Kubernetes)上云实践,涵盖集群创建、工作负载部署、服务暴露、存储管理与监控运维。通过实战示例,帮助用户快速掌握ACK核心功能及微服务部署全流程。
216 0
|
6月前
|
安全 Java 关系型数据库
nacos 升级指北 草履虫级教程
本文记录了Nacos从2.4.1升级至2.5.1的完整步骤,适用于使用MySQL持久化、JDK8、Linux环境及Jar包部署的情况。内容包括升级前的版本兼容性调查、数据库与配置备份、升级操作流程及回滚方案,确保升级过程安全可控。
|
8月前
|
运维 数据可视化 网络安全
四步搞定网站部署!Websoft9让多应用托管变得如此简单
Websoft9 是一款开源的服务器应用管理平台,帮助用户快速、安全地部署网站。通过简化复杂的流程,它将部署操作分为四个直观步骤,即使是技术小白也能轻松搭建专业网站。平台支持多应用集成、自动化部署和可视化运维,显著提升效率并降低维护成本。
538 0
四步搞定网站部署!Websoft9让多应用托管变得如此简单
|
存储 网络协议 Nacos
高效搭建Nacos:实现微服务的服务注册与配置中心
Nacos(Dynamic Naming and Configuration Service)是阿里巴巴开源的一款动态服务发现、配置管理和服务管理平台。它旨在帮助开发者更轻松地构建、部署和管理分布式系统,特别是在微服务架构中。
2162 82
高效搭建Nacos:实现微服务的服务注册与配置中心
|
人工智能 计算机视觉 C++
AI计算机视觉笔记七:基于mediapipe的虚拟鼠标控制
该项目旨在通过摄像头识别手指动作以实现鼠标控制。利用mediapipe检测手指关键点,并通过食指移动鼠标,当食指与中指距离小于阈值时触发点击事件。环境基于miniconda3,需创建虚拟环境并安装mediapipe、numpy、autopy和opencv等依赖。代码分为`AiVirtualMouse.py`和`HandTrackingModule.py`两个部分,前者用于实现鼠标控制逻辑,后者提供手势检测功能。运行时可能出现`PacketInvoked`错误,需修改`solution_base.py`文件第595行以解决。
|
Java Spring
SpringBoot入门(5) - 定制自己的Banner
SpringBoot入门(5) - 定制自己的Banner
513 0
 SpringBoot入门(5) - 定制自己的Banner
|
负载均衡 Java Nacos
Nacos服务注册与发现
【10月更文挑战第11天】Nacos 是一个开源平台,用于服务发现和配置管理,提供服务注册、发现及动态配置等功能,适用于微服务架构。其核心功能包括服务注册、服务发现和动态配置管理,支持多种语言如 Java、Go、Python 等,具备高可用性和易用性。Nacos 可用于微服务治理、动态扩展和跨语言服务调用等场景,简化了服务间的交互和管理。
560 10