Nacos注册中心

简介: 本文介绍Nacos的安装部署、启动访问及整合Spring Cloud Alibaba作为注册中心的完整流程,涵盖服务分级模型、负载均衡策略、权重控制、环境隔离(namespace)、临时与持久化实例等核心特性,帮助开发者快速掌握Nacos在微服务架构中的应用。

1.1 下载安装nacos官网提供了安装部署教程,其下载链接指向github官网,选择合适版本即可。如访问受阻可直接使用以下最新稳定版压缩包:

nacos-server-2.1.0.zip(112 MB),后续我们也可能会更改为其他版本做更多测试。公司一般会采用最新版落后几个版本的稳定版当做生产版本,避免一些新特性引发的未知问题。1.2 启动window请直接进入路径:cd nacos/bin后双击startup.sh启动,或按照下述指令启动linux或mac进入路径:nacos/bin/,cmd控制台执行注意:如存在端口冲突,可至路径:nacos/conf/application.properties 中修改后启动注意:nacos存储路径不可有中文。如遇启动异常,mac可至路径:nacos/logs/start.out 查看具体错误信息windows可至路径:nacos/logs/nacos.log 查看具体错误信息,正常启动日志如下1.3 访问成功启动后访问如下地址:http://localhost:8848/nacos/#/login,默认用户名/密码:nacos/nacos2.整合Nacos注册中心2.1 依赖导入父工程新增spring-cloud-alibaba依赖因为Spring-cloud-alibaba自身也是集成了多个组件,所以这里只需引入alibaba大管家即可子工程去除eureka依赖注意order-service、user-service均需删除子工程新增spring-cloud-alibaba-nacos依赖注意:不同于父工程,是nacos-discovery,order-service、user-service均需添加至此,三个工程pom如下(eureka相关工程无需操作):父pom:

pom.xml(3 KB)user-service pom:

pom.xml(2 KB)order-service pom:

pom.xml(2 KB)2.2 配置文件修改注册中心子工程均去除eureka注册配置,均新增nacos配置至此,两个业务工程application.yml如下(eureka相关工程无需操作):order-service:

application.yml(1 KB)user-service:

application.yml(1 KB)2.3 启动工程并验证启动应用后访问Nacos会发现服务已完成注册如启动遇到工程仍存在Eureka依赖,可尝试重新编译整个工程,或手动删除target文件夹后再启动3.Nacos服务分级模型不同于Zookeeper没有针对服务发现设计数据模型,它的数据是以一种更抽象的树形K-V组织的,因此理论上可以存储任何语义的数据。而Eureka或Consule都做到了实例级别的数据扩展,这能满足大多数场景但无法满足大规模和多环境的服务数据存储。Nacos经过多年经验后提炼出上述模型,其特点在于:服务-集群-实例三层模型,可以满足所有场景下的数据存数和管理。通过设置不同的集群所在参数,可以保证相同集群间优先调用,减少网络开销。当本地集群服务无法拉取时,再去跨集群调用。对于此工程我们只需要设置提付提供者集群参数:此时访问Nacos会发现其增加了集群属性发生变化,原为:Default为模拟多集群场景,此时我们复制一个新的userApplicatio3启动类,具体操作步骤如下:复制一个新的userApplicatio3启动类,设置其启动端口:-Dserver.port=8083更改配置文件集群属性为GZ(注意不要停userApplication、userApplication2,否则原注册信息会失效)启动userApplication3并访问nacos此时查看Nacos服务信息会发现,已经有了两个集群信息。此时我们就完成Nacos分级模型的验证,在实际的工作、生产环境中,一般来说服务都是同集群部署,不需要开发人员声明式感知服务所在集群信息。4.NacosRule负载均衡策略修改oder-service集群属性、负载均衡策略,调整为如下:注意:此时需要将OrderApplication中的代码声明式负载均衡策略注释或删除(约定大于配置),否则失效此时重启应用后会发现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此时会因不在同一命名空间导致无法访问(因userservice暴露服务时未声明namespace,默认public)我们修改user-service的配置文件,增加namespace,并重启服务再次访问会发现服务恢复正常7.Nacos临时实例与持久化实例Nacos在定义上区分临时实例和持久化实例,其主要区分关键是健康检查的方式。临时实例:客户端上报模型,能够自动摘除不健康实例,无需持久化实例存储持久实例:服务端反省探测模式,客户端因不上报心跳故不会自动摘除下线实例在大中型公司,两种类型一般都会使用,基础的组件如数据库、缓存等往往不能上报心跳,这种类型的服务在注册时就需要作为持计划实例注册。而上层的业务服务,如微服务或Dubbo服务,服务的Provider端支持添加心跳,此时就可以使用临时实例的注册方式。其配置文件配置如下:8.Nacos更多总结分析

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

相关文章
|
2天前
|
存储 负载均衡 算法
负载均衡算法
本文介绍多种负载均衡算法:随机、轮询、最小活跃数、源地址哈希及一致性哈希,涵盖适用场景与实现原理,结合代码与图示解析其调度机制,适用于分布式系统流量管理。
|
2天前
|
存储 Java 关系型数据库
微服务概述
本文介绍单体架构与微服务架构的区别,阐述微服务的定义、核心特征及优缺点,涵盖技术选型、部署方案与常见问题,帮助读者理解微服务演进逻辑,为后续实践打下理论基础。(238字)
|
2天前
|
XML JSON Java
什么是RESTful
RESTful是一种基于资源的API设计规范,强调URI代表资源、使用HTTP动词进行操作,实现统一标准、结构清晰、易于维护的接口风格,解决传统接口行为不规范问题。
|
2天前
|
存储 数据库
数据库设计三范式
本文讲解数据库三范式设计原则:第一范式要求字段原子性,不可再分;第二范式要求消除部分依赖,一张表只描述一件事;第三范式要求消除传递依赖。通过实例分析,说明范式旨在减少数据冗余、提升维护效率,但实际设计应结合业务需求灵活应用,而非盲目遵循。
|
1天前
|
消息中间件 Java 数据安全/隐私保护
异步消息组件MQ基础
本文介绍了MQ(消息队列)的基本概念,重点对比了同步调用与异步调用的区别,通过生活实例帮助理解。异步调用通过消息中间件实现解耦、异步处理和流量削峰,提升系统性能。常见的MQ如RabbitMQ、Kafka等适用于高并发场景。RabbitMQ基于AMQP协议,支持多语言,结合SpringAMQP可轻松实现消息收发。文章还演示了RabbitMQ的安装、配置、数据隔离及工作队列模型,强调“能者多劳”机制以优化消费效率。
异步消息组件MQ基础
|
2天前
|
Java 数据库 微服务
微服务服务注册与发现
本文介绍了微服务架构的演进与实践。针对单体架构在团队协作、发布效率、扩展性等方面的局限,微服务通过将系统拆分为多个独立部署、单一职责的小型服务,实现高内聚、低耦合,提升系统的可维护性与伸缩能力。结合Spring Cloud与Spring Cloud Alibaba技术栈,文章以黑马商城项目为例,演示了如何创建微服务工程、进行服务拆分,并使用RestTemplate实现服务间远程调用,帮助开发者掌握微服务核心开发技能。
微服务服务注册与发现
|
1天前
|
负载均衡 Java 应用服务中间件
微服务网关与配置中心
本文介绍了微服务架构下的网关路由与鉴权机制,重点讲解使用Spring Cloud Gateway实现请求路由、负载均衡及JWT身份校验。通过Nacos实现服务发现,网关统一处理前端请求,解决多入口问题,并在全局过滤器中实现用户鉴权,保障系统安全。
|
1天前
|
JSON Java API
Feign远程调用
本文介绍了如何使用Feign替代RestTemplate实现微服务间的HTTP调用,涵盖依赖引入、注解配置、自定义日志、连接池优化及代码抽取等实践。通过Feign可简化远程调用,提升开发效率,并结合最佳实践实现代码复用与解耦。
|
2天前
|
关系型数据库 应用服务中间件 nginx
容器化部署引擎Docker
Docker是一种容器化技术,通过镜像打包应用及依赖,实现跨环境快速部署。它利用容器隔离运行应用程序,解决依赖冲突与环境差异问题,相比虚拟机更轻量、高效。
|
1天前
|
负载均衡 Java 数据安全/隐私保护
Gateway服务网关
网关是微服务架构的统一入口,核心功能包括请求路由、权限控制、限流及负载均衡。通过Spring Cloud Gateway可实现高效路由转发与过滤器处理,支持跨域配置,提升系统安全与性能。
Gateway服务网关