1、
Nacos是一个开源的服务发现和配置管理平台,主要用于微服务架构中的服务发现、配置管理和服务管理。它提供了以下主要功能:
-
服务注册和发现:Nacos提供了简单易用的服务注册和服务发现机制。服务提供者将自己的服务注册到Nacos,服务消费者从Nacos中发现服务。
-
动态配置管理:Nacos提供了分布式配置管理,可以动态推送配置更新。当配置发生变化时,相关服务实例会立即得到通知并自动更新配置。
-
动态DNS服务:Nacos提供基于DNS协议的服务发现手机。应用程序可以通过内嵌的Nacos SDK或使用DNS协议来发现服务。
-
负载均衡和流量控制:集成了Dubbo、Spring Cloud等微服务框架,提供了基于服务的负载均衡和流量管理能力。
-
多语言支持:Nacos提供了Java、Go、Node.js、Python等多语言的开发包,支持大多数主流开发语言。
Nacos的主要优势包括易用性、高可用性、可扩展性、安全性等。它广泛应用于Alibaba内部以及外部的微服务架构中,是阿里巴巴开源的一个重要项目。
2、pom依赖:
管理依赖:
<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>
依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
3、nacos的基本注册:
下载之后通过 startup.cmd -m standalone启动在bin目录下启动。8848(钛金手机)是默认端口
yml文件中的配置:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos的服务器地址
4、nacos的多级存储模型
这样做的好处:服务调用可以做到访问本地集群的服务,这样没有高延迟。如果跨集群调用怎么会有较高的延迟。(比如,上海有一个服务,需要调用杭州的,那么这样调用的时间开销就比较大了。如果所有的服务上海都有,且放在同一个机房(或者同一局域网),则就不需要网络的传输,速度会大大的加快)
5、负载均衡:nacos默认的集群是轮询,就是不管你有木有集群,这些所有的服务默认都是轮询访问。
user-server: #服务的名称
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule #负载均衡的策略,nacos是优先选择同一个集群的服务
同一个集群下面的服务首先找通过一个集群的服务,如果没找到就去找其他的集群中相应的服务。
(2)nacos权重负载均衡(0-1):
在nacos中有一个权重,默认是为1,通过编辑设置改变这个权重的大小,可以控制对这个服务的访问的次数。如果一个权重是1,一个是0.1,则第一个被访问的次数是第二个的十倍(当然这个前提是你在同一个集群当中,如果是不同的集群可能是不生效的)。
如果权重设置为0则所有的请求都不会去这个实例。这样做的好处:可以实现灰度发布。使得所有的程序一点一点测试上线。也可以用于软件的更新迭代。一个程序更新完之后,首先将这个机器的服务启动,将其他机器的服务的权重设置为0。然后慢慢启动,让用户感知不到程序发生更新。
6、环境隔离(nacos首先是注册中心,还是数据中心)
NameSpace:这个隔离主要用作对环境的隔离,可以是对开发、测试、上线的环境的隔离。
Group:是业务比较类似的放在同一个组下面,这样比较方便一些。
Service:服务
环境隔离之后:服务之间不能相互的调用了,只在同一个namespace下的服务之间可以相互调用了。
cloud:
nacos:
discovery:
server-addr: localhost:8848 #nacos的服务器地址
cluster-name: SH
namespace: 05597e8e-9e2d-47c0-b115-3e1a6add4f9c #namespace的id
nacos与Eureka的对比:
1、eureka和nacos相同的点:nacos和eureka的执行过程,如果有服务增加,则服务会被nacos(eureka)注册。服务消费者会定时的拉取nacos或者eureka中的服务提供者。这个拉取是服务被动的拉取,当在一次拉取之后,还没有到下次拉取的时间的时候,如果有服务提供者挂了,则服务消费者不知道并主动的去请求服务提供者则会失败报错。在每次拉取服务之后,服务消费者的服务列表会更新,并持续到下次拉取更新。
nacos和eureka如何知道服务是否还在存活?服务会通过心跳机制来告诉注册中心自己还活着,还能工作。
2、nacos和eureka的不同点:在eureka服务一直是被动的,一直是服务询问eureka(服务一直是舔狗)。
在nacos中服务即使主动的也是被动的(可以说nacos和服务是双向奔赴)。当nacos中的服务列表发生变化,nacos会主动将服务的情况告诉服务消费者,而不是服务消费者等待到下次拉取的时候才知道。
服务提供者有两个:
(1)临时实例(临时工):你需要主动的向nacos报告自己的身体状况(心跳检测)。当你没按规定的时间向nacos发生心跳,你就会被nacos从服务列表中剔除。
(2)非临时实例(正式工):nacos会主动的向你询问,当你发生异常,nacos会将你标记为不健康(而不是直接从列表中剔除)。当你恢复之后,nacos又会将你标记为健康