注册中心-Nacos

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
!](https://img-blog.csdnimg.cn/ba1c2386da6a469ea14579b92262ce66.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA5oS_5bCG5q2k5b-D5Lyg5Zub5pa5,size_20,color_FFFFFF,t_70,g_se,x_16)
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=false
    username: root
    password: 密码
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    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: true
    clients:
      - userservice

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

server:
  port: 8081
spring:
  datasource:
    url: jdbc:mysql://localhost:3306/cloud_user?useSSL=false
    username: root
    password: 密码
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: userservice #服务名称
  cloud:
    nacos:
      server-addr: localhost:8848 #nacos服务地址
mybatis:
  type-aliases-package: cn.itcast.user.pojo
  configuration:
    map-underscore-to-camel-case: true
logging:
  level:
    cn.itcast: debug
  pattern:
    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=false
    username: root
    password: 密码
    driver-class-name: com.mysql.jdbc.Driver
  application:
    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=false
    username: root
    password: 密码
    driver-class-name: com.mysql.jdbc.Driver
  application:
    name: orderservice
  cloud:
    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:8848
      discovery:
        cluster-name: HZ
        namespace: 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方式

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值