Nacos注册中心功能如何使用?

Nacos是Alibaba推出的微服务组件,可替代Eureka,兼具服务注册中心和配置中心功能。文章详细介绍了Nacos的安装启动、配置使用,包括服务分级存储模型、NacosRule负载均衡策略、服务权重配置以及环境隔离。同时,对比了Nacos与Eureka在可用性和一致性上的区别。
摘要由CSDN通过智能技术生成

目录

1. Nacos是什么?

2. Nacos注册中心功能怎么用?

 3. Nacos服务分级存贮模型

 4. NacosRule负载均衡

5. Nacos服务权重配置

6. Nacos环境隔离

7. Nacos与Eureka的区别


1. Nacos是什么?

Nacos是Alibaba推出的一款全新的,可以替代Eureka注册中心的微服务组件之一。

我们都知道,在做微服务项目时,我们可以通过Eureka将各个服务注册进去,完成服务的拉取调用;那么我们的Nacos也是一个服务注册中心。而且,Nacos不仅可以作为一个注册中心,还可以当作配置中心来使用,直接可以替换掉我们之前所使用的 SpringCloudConfig 组件,可以说是一个顶俩,此外,Nacos还有一些附加的功能属性,这里就不再一一举例了,我们直接进入正题。

2. Nacos注册中心功能怎么用?

想要使用Nacos这款分布式组件,首先我们要下载它,下载的过程可能有些繁琐耗时,这里就不展示了,没有下载的可以去搜索相关博客进行下载。

在微服务项目中想要使用Nacos完成功能模块的注册,简单分为一下几步

(1)启动Nacos

安装好我们的Nacos之后,打开nacos文件中的bin文件夹,

 点击启动就可以了,这里要注意使用单机启动,因为Nacos默认为集群启动。

如果不知道怎么改,有两个办法,看我演示

方法一:使用命令行的形式

还是进入我们nacos文件的bin目录文件下,如下所示

 输入cmd回车,会出现黑窗口命令行,在黑窗口中输入startup.cmd -m standalone "翻译过来就是以单机模式启动"

启动成功如下图

方式二:修改文件配置

使用编辑模式打开我们的启动器 startup.cmd 文件,把文件中的集群改成单机set MODE=“standalone”就可以了,这里我已经改好了

 改过之后保存,仍然双击这个文件就可以启动了,启动成功之后页面和方式以是一样的。

(2)在父工程中方添加Spring-Cloud-Alibaba依赖

<!--nacos的管理依赖-->
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.2.5.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>

这里面的版本可不是乱用的,每个alibaba组建的版本所对用的springboot版本和springcloud版本都是有联系的,如果你的与我不一致,可以去alilbababa官网搜索与自己版本一致的使用,否则后期可能会出现一些奇怪的小bug

(3)添加Nacos客户端依赖

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

这里的客户端依赖要在每一个微服务项目的pom.xml文件中都要引入,否则Nacos是不会注册它们的。

(4)修改yml文件

spring:    
  cloud:
    nacos:
      server-addr: localhost:8848  # nacos端口地址

在pom文件中添加依赖之后,还要在各个项目的yml文件中配置nacos的地址和端口,因为我的是本机,所以就写成了localhost,但是在实际开发中,nacos都是集群配置,每一个nacos都要写真实的ip和端口,端口号不改默认就是8848.

(5)启动项目测试

完成了上述依赖配置和文件配置,我们就可以进行测试了,打开浏览器输入localhost:8848;

如下图所示,这里我已经注册成功了几个实例,点击详情还可以查看各个实例的详细信息。

 3. Nacos服务分级存贮模型

在我们的nacos中,它还添加了一个服务分级存贮模型的概念,什么意思呢?

我们都知道,一个微服务项目是非常庞大的,可能我们的一个业务会有很多的模块,在部署的时候,我们可以把它部署在同一台机器上,一个服务下面对应多个实例,这就好比是把所有的鸡蛋放在同一个篮子里。如下图所示:

但是,有一个问题,如果有一天机房出现故障了,那业务不就停掉了吗?这肯定是不行的,那该怎么办呢?

nacaos中就设置了分级存储模型,添加了一个集群的概念。

在之前,我们的一个服务可以对应多个实例;但现在,我们的一个服务可以对应若干个集群,集群下面又对应多个实例,在中间加了一层,如下所示

当我们的业务越做越大,我们可以在多个城市部署多个集群;就算未来有一天,某个机房出故障了,那也只是其中的一个集群挂掉了,但另外的集群仍然可以运作,对我们的业务不会造成较大影响。

那么在nacos中怎样设置分级存储模型呢?

很简单,我们只需要在yml文件中设置一个属性就可以了,

nacos:
      discovery:
        cluster-name: SZ

我们在yml文件中nacos的下一级设置一个discovery的属性,这里有一个cluster-name就是用来设置集群名称的,名字可以随便起,配置好之后,我们重启项目,在浏览器中再去看nacos,点击我们配置的一个实例,点击详情,这里就会显示我们刚才配置的集群名称“SZ”

 4. NacosRule负载均衡

我们知道,在Eureka中,我们可以配置负载均衡规则,在nacos中,也是可以配置负载均衡规则的。

配置方法也是在yml文件中

userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule

因为我们的orderservice业务调用了userservice业务,所以要在orderservice的yml文件中配置调用userservice时的负载均衡规则。

而且,当我们配置了NacosRule之后,它会默认优选选择同集群的机器访;当同集群的机器都出现故障访问不了时,它才会访问同业务的其他集群,并会爆出跨集群访问警告,但不会报错;此外,NacosRule是随机负载均衡。

5. Nacos服务权重配置

当我们设置了集群之后,请求会到达我们的多台设备,nacos会根据随机负载均衡去挑选一台设备。但是,有些激起他们的性能是有差异的;假设有两台机器,机器A性能好,机器B性能差,我们希望机器A能多处理一些请求,机器B能少处理一些请求,怎么做呢?

我们就可以通过设置服务权重来实现,在nacos控制台,如下图

 点击一个实例,我们可以点击编辑,设置其权重,所有实例默认都为1,权重越小,被随机访问的概率越低,就能达到我们的目的。

另外,当我们权重调成0时,是无法被访问的,我们就可以在实际开发中做到一个平滑的升级。

6. Nacos环境隔离

因为我开在开发时,有开发环境,有生产环境,有测试环境。怎么样能将它们隔开呢?

这里就可以用到我们Nacos的环境隔离,怎么做呢?

很简单

第一步:

 第二步:

 第三步:

 第四步:在yml文件中进行配置,如下

我么还是在orderservice业务的yml文件下,discovery下方配置namespace属性即可,namespace的值为随机生成的id。

完成上述步骤之后,重启服务,当我们再查询订单时,就查不到了,也因为他们的namespace不一样,被隔离在了两个环境下。

7. Nacos与Eureka的区别

Eureka注册中心是AP,更加注重可用性,我们的服务消费者会调用服务提供者,并把服务提供者列表缓存起来,每隔30s会再次从Eureka拉去一次更新,如果在30s内有服务挂掉,Eureka是不会主动提醒服务消费者的,就会造成不一致性,而且Eureka发现有服务挂掉之后,是不会把它从服务列表中剔除的,而是等它恢复正常。

Nacos是AP+CP,既可以选择AP,又可以选择CP。在Nacos中,所有的实例默认都是临时实例,当所有实例都是临时实例时,nacos和eureka一样都是AP,当nacos中有非临时实例时,就会转变成CP。

服务提供者

因为在Nacos中,我们可以为一个实例设置是永久实例还是临时实例。它们两个在做健康检测时,是不太一样的。

如果是临时实例,也是通过心跳总检测,与Eureka一样,每隔一段时间发送一次心跳,发送频率比Eureka要快;当它挂掉之后,Nacos会把它从服务列表中剔除。

如果是非临时实例,Nacos会主动向非临时实例发送请求,询问它是否还健康可用;当它挂掉之后,Nacos不会把它剔除,而是将它标记为不健康状态,等它恢复正常。

服务消费者

Eureka采用的是Pull拉取的方式,消费者会从Eureka注册中心中拉取自己所需要的服务列表,并短暂的缓存起来,这样下次再调用同一个服务时,就不需要再次拉取了,而是直接从缓存服务列表中拿到消费即可;

Nacos是采用Pull+Push(拉取和推送),除了Pull和Eureka一样之外,多了一个Push(推送)的功能,Nacos每隔一段时间会主动将服务列表推送给消费者;

Nacos每隔一段时间去更新服务列表,而且,当我们有服务挂掉之后,nacos会马上推送消息给服务消费者,告诉它有所变更,保证了服务的一致性。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值