Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。
相比Eureka功能更加丰富,在国内欢迎程度较高。
Nacos官网地址。

之前谣言说 用 Nacos 是因为 Eureka 不再迭代升级,停止维护。下面是Eureka的GitHub地址。目前最新版本是 1.10.17。

Eureka一致有两个版本:1.4.x   2.x。
其实SpringCloud停止维护的是Eureka的2.x版本。

1.Nacos 安装指南

这里介绍Windows安装
1.1.首先下载nacos-server:https://github.com/alibaba/nacos/releases

1.2.解压

Nacos安装包解压后分如下目录:
bin:启动脚本
conf:配置说明。Nacos的端口是 8848
target:

1.3.启动
启动进入bin目录,结构如下:

接着执行命令:

  • windows命令
  • startup.cmd -m standalone
  • standalone–单机启动。-m 模式:集群启动、单机启动

用户名:nacos;密码:nacos

2. Nacos注册中心

服务注册到Nacos
2-1、在cloud-demo父工程中添加spring-cloud-alilbaba的管理依赖:

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId><version>2.2.6.RELEASE</version><type>pom</type><scope>import</scope></dependency>

2-2、添加nacos的客户端依赖

<!-- nacos客户端依赖 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2-3、order-service application.yml 文件中添加nacos配置

server:port: 8080
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 密码driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservicecloud:nacos:server-addr: localhost:8848 #nacos服务地址
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: # eureka地址信息
#      defaultZone: http://127.0.0.1:10086/eureka
userservice: # 给需要调用的微服务配置负载均衡规则,orderservice服务去调用userservice服务ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
ribbon:eager-load:enabled: trueclients:- userservice

2-4、user-service application.yml 文件中添加nacos配置

server:port: 8081
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: 密码driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice #服务名称cloud:nacos:server-addr: localhost:8848 #nacos服务地址
mybatis:type-aliases-package: cn.itcast.user.pojoconfiguration:map-underscore-to-camel-case: true
logging:level:cn.itcast: debugpattern:dateformat: MM-dd HH:mm:ss:SSS
#eureka:
#  client:
#    service-url: # eureka地址信息
#      defaultZone: http://127.0.0.1:10086/eureka

2-5、启动如下服务

2-6、通过访问 http://192.168.0.103:8848/nacos/index.html 后查看服务列表

通过 详情 可以看到具体的服务实例信息

3.Nacos服务分级存储模型


服务跨集群调用问题
服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
本地集群不可访问时,再去访问其它集群

注意:Intellj 上模拟多个实例操作
另外,我们可以将user-service多次启动, 模拟多实例部署,但为了避免端口冲突,需要修改端口设置:



服务集群属性
1、修改 application.yml,添加如下内容:
先配置HZ集群后可以启动 UserApplication、UserApplication2

spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: 密码driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice #服务名称cloud:nacos:server-addr: localhost:8848 #nacos服务地址discovery:cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州


2、再将配置集群名称改为 SH,记得此时只需要启动 UserApplication3,UserApplication、UserApplication2无需再重启

3、最后将 order-service 的集群配置也改为 HZ

spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 密码driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservicecloud:nacos:server-addr: localhost:8848 #nacos服务地址discovery:cluster-name: HZ # 配置集群名称,也就是机房位置,例如:HZ,杭州

再去启动一个上海集群的实例

-Dserver.port=8083 -Dspring.cloud.nacos.discovery.cluster-name=SH


启动后可以观察到Nacos控制台上有三个实例。杭州两个、上海一个

通过访问 http://localhost:8080/order/101~106 观察控制台消息。


可以看的当前三个时间均有被访问。这是因为负载均衡规则配置了随机。
那么下面我们只要order-service杭州集群访问 杭州的user-service

下面先修改 order-serice 的 application.yml 的负载均衡规则
或者Ribbon的默认实现 ZoneAvoidanceRule 并不能实现根据同集群优先来实现负载均衡,我们把规则改成 NacosRule 即可

userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡规则
@Bean
public IRule iRule(){//默认为轮询规则,这里自定义为随机规则return new NacosRule();
}

访问地址:http://localhost:8080/order/101~106
在访问中我们发现,只有同在一个 HZ 集群下的 UserApplication、UserApplication2 会被调用,并且是随机的。


UserApplication3 显然没有调用日志。
我们试着把 UserApplication、UserApplication2 停掉。依旧可以访问。
在 UserApplication3 控制台可以看到发出了一串的警告,因为 UserApplication 本身是在 HZ 集群的,这波 HZ 集群没有了 UserApplication,就会去别的集群找。

4.权重配置

实际部署中会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能较好,另一些较差,我们希望性能好的机器承担更多的用户请求。但默认情况下 NacosRule 是同集群内随机挑选,不会考虑机器的性能问题。

因此,Nacos 提供了权重配置来控制访问频率,0~1 之间,权重越大则访问频率越高,权重修改为 0,则该实例永远不会被访问。
在 Nacos 控制台,找到 UserApplication 的实例列表,点击编辑,即可修改权重。
根据权重负载均衡
1、在Nacos控制台可以设置实例的权重值,首先选中实例后面的编辑按钮

2、将权重设置为0.1,测试可以发现8081被访问到的频率大大降低

总结:
实例的权重控制
1、Nacos控制台可以设置实例的权重值,0~1之间
2、同集群内的多个实例,权重越高被访问的频率越高
3、权重设置为0则完全不会被访问

5.环境隔离 - namespace

Nacos 提供了 namespace 来实现环境隔离功能。

Nacos 中可以有多个 namespace
namespace 下可以有 group、service 等
不同 namespace 之间相互隔离,例如不同 namespace 的服务互相不可见

5-1.创建namespace


我们可以点击页面新增按钮,添加一个 namespace:

然后,填写表单:

就能在页面看到一个新的 namespace:

配置namespace
给微服务配置 namespace 只能通过修改配置来实现。
例如,修改 order-service 的 application.yml 文件:

spring:cloud:nacos:server-addr: localhost:8848discovery:cluster-name: HZnamespace: 492a7d5d-237b-46a1-a99a-fa8e98e4b0f9 # 命名空间ID

重启 order-service 后,访问控制台。
public

dev

此时访问 order-service,因为 namespace 不同,会导致找不到 userservice,控制台会报错:

临时实例
Nacos 的服务实例分为两种类型:
临时实例:如果实例宕机超过一定时间,会从服务列表剔除,默认的类型。
非临时实例:如果实例宕机,不会从服务列表剔除,也可以叫永久实例。
配置一个服务实例为永久实例:

spring:cloud:nacos:discovery:ephemeral: false # 设置为非临时实例

6.Nacos注册中心原理

nacos注册中心细节分析

另外,Nacos 集群默认采用AP方式(可用性),当集群中存在非临时实例时,采用CP模式(一致性);而 Eureka 采用AP方式,不可切换。(这里说的是 CAP 原理,后面会写到)

总结:
Nacos与eureka的共同点
1.都支持服务注册和服务拉取
2.都支持服务提供者心跳方式做健康检测
Nacos与Eureka的区别
1.Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
2.临时实例心跳不正常会被剔除,非临时实例则不会被剔除
3.Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
4.Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式

注册中心-Nacos相关推荐

  1. 阿里注册中心nacos使用整合Dubbo-原创

    阿里注册中心nacos是今年开源的框架,一开始以为就是个zk.后面看了图才明白他对标的竟然是consul\eureka,最重要是完美支持dubbo.我想今年开源它也是别有用意 .(目前nacos0.7 ...

  2. 微服务系列之ZooKeeper注册中心和Nacos注册中心Nacos和Zookeeper对比

    一.ZooKeeper注册中心 Zookeeper 是 Apache Hadoop 的子项目,是一个树型的目录服务,支持变更推送,适合作为 Dubbo 服务的注册中心,工业强度较高,可用于生产环境,推 ...

  3. 服务注册中心Nacos

    文章目录 一.服务注册中心Nacos最佳实践 1.Nacos注册中心简介 背景分析 Nacos概述 构建Nacos服务 初始化配置 服务启动与访问 2.服务注册与调用入门(重点) 业务描述 生产者服务 ...

  4. Gateway 转发请求至注册中心Nacos中的服务404问题(网关日志提示availabilityFilteringRule.activeConnectionsLimit = 2147483647)

    Gateway 转发请求至注册中心Nacos中的服务404问题 问题描述 一次练手项目中,原本没问题并且测试过的gateway,再次转发链接的时候返回404状态码.gateway和被调用模块的日志信息 ...

  5. 微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关

    微服务笔记:第一章_微服务简介|Eureka注册中心|Nacos注册中心|Nacos配置管理|Feign|Gateway服务网关 1. 微服务简介 1.1 服务架构演变 1.2 SpringCloud ...

  6. nacos 公共_SpringCloud配合注册中心Nacos的使用

    一.Nacos简介 Nacos核心提供的两个功能:服务注册与发现,动态配置管理. 1.服务注册与发现 Nacos提供基于DNS和基于RPC的服务发现,即能被用来支持https/http的服务注册与发现 ...

  7. nacos enablediscoveryclient_Spring Cloud(五):注册中心nacos篇

    点击蓝字关注我们 大家好,我是杰哥,转眼间,我们的Spring Cloud专辑已到了第五次分享,而我们的注册中心篇章已经分别完成了Eureka.zookeeper篇,今天正式进入nacos篇的学习na ...

  8. 【Spring Cloud】注册中心-Nacos

    1.名字的由来 前四个字母分别为 Naming 和 Configuration 的前两个字母,最后的 s 为 service 2.是什么 Nacos是一个更易于构建云原生应用的动态服务发现.配置管理和 ...

  9. 微服务注册中心 Nacos 实现原理详解!

    Nacos 架构 Provider APP:服务提供者 Consumer APP:服务消费者 Name Server:通过VIP(Virtual IP)或DNS的方式实现Nacos高可用集群的服务路由 ...

  10. SpringCloud:注册中心nacos

    一.Nacos简介 Nacos 英文全称Dynamic Naming and Configuration Service,Na为naming/nameServer即注册中心,co为configurat ...

最新文章

  1. 哈佛牙学院博士后:教你口腔保健基本功之刷牙篇
  2. Matlab下 IIR 滤波器实现(Simulink仿真和C语言实现)
  3. 打印折痕方向(二叉树应用)
  4. Linux与Windows数据传输
  5. android界面布局错位,IOS 浏览器页面布局错位(如:点不到)的分析与解决
  6. 『Linux』ArchLinux与VirtualBox的结合「二」
  7. 清楚form表单数据的便捷jQuery之法
  8. MySQL(14) 数据库优化方案
  9. 施耐德变频器与昆仑通态触摸屏Modbus通讯程序实现正转反转,启停复位,频率设定等功能
  10. 安卓android usb 转 RS 232 串口 芯片的比较
  11. 爬虫项目实操四、用Scrapy爬取招聘网站的招聘信息
  12. [渝粤教育] 西南科技大学 管理学原理 在线考试复习资料(6)
  13. cms10——友情链接
  14. RabbitMQ 归纳总结
  15. js统计英文单词数量
  16. 一文带你了解如何编辑工作流流程图
  17. 这些数据爬虫网站,帮你工作提质增效,还不收藏?
  18. 《圣斗士》黄金圣斗士美图赏
  19. pos机顾显java控制打印内容,使用POS打印机进行Java收据打印
  20. 弱校胡策 大逃亡(BFS灌水+二分答案)

热门文章

  1. 禅道xampp文件夹无法删除_无法删除文件夹 文件正在被另一个人或程序使用
  2. 1.orientDB 了解
  3. 来自ML的祝福:和CycleGAN一起庆祝春节
  4. 过去,哔哩哔哩上面的视频只能在手机上面下载;现在,我用Python爬虫实现了能在PC端上面下载
  5. AnsysMaxwell常见问题汇总
  6. 实验及工程技术人员招聘 | 华南理工大学广州国际校区
  7. rdflib解析protege的owl文件
  8. 搭建SGC实现引文网络节点预测(PyTorch+PyG)
  9. 学习使用turtlebot2——安装ROS Indigo系统
  10. Tarjan 求有向图的强连通分量