Nacos 注册中心
如何启动Nacos
-
win10控制台进入
Nacos安装地址的的bin,输入startup.cmd -m standalonestartup.cmd -m standalone
为什么要学Nacos
Nacos是阿里巴巴的产品,在国内受欢迎程度比较高。而Eureka也不是因为版本太老或者有重大缺陷所以不继续使用,而是相较于Nacos而言,使用人数还是有些差别。
Springcloud如何添加Nacos依赖
-
客户端注入依赖
<!-- Nacos客户端依赖包 --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-Nacos-discovery</artifactId> </dependency> -
客户端配置
spring: cloud: Nacos: # Nacos 服务地址 server-addr: localhost:8848Nacos服务地址根据实际情况来调整 -
结果
当完成上述的步骤之后,就把对应的服务绑定在对应端口的
Nacos注册器中。我们启动已绑定的服务,可以通过访问Nacos地址http://192.168.153.129:8848/Nacos/index.html来查看绑定服务名称和端口是否呈现
Nacos服务分级存储模型是什么
-
Nacos服务分级存储模型分为三层,第一层是服务,第二层是集群,第三层是实例。一个服务可以包含多个集群,一个集群可以包含多个实例。
Nacos为什么添加集群的概念
- 尽可能避免跨集群调用
- 服务调用尽可能选择本地集群的服务,跨集群调用延迟较高本地集群不可访问时,再去访问其它集群
什么是跨集群调用
-
杭州的消费者跨集群去调用上海的提供者便是跨集群调用。大白话就是陀地不要偏要北姑。
如何给服务配置集群
-
给服务配置集群,根据服务实例启动时配置文件内的集群名称来将服务划分到对应的集群。
spring: cloud: Nacos: server-addr: localhost:8848 discovery: # 配置集群名称,将服务配置到对应集群 cluster-name: HZ -
完成配置后重启服务实例。
-
重启后可以通过
Nacos管理页面看到同一个服务的不同实例分配至不同的集群
**注意:**实例的分配的集群是服务实例启动的时候分配的。如果在一台设备上操作,打算将一个服务的不同实例分配至不同的集群,需要在每次启动服务实例的时候修改集群名称
NacosRule负载均衡策略是什么
-
优先调用同集群服务实例列表。
-
本地集群找不到提供者,才会去其他集群寻找,并且会报敬告
-
确定了可用实例列表后,再采用随机负载均衡挑选实例
Nacos如何设置权重
-
在同一集群下的不同实例对应的服务器可能有所不同,服务器设备性能有差异,部分机器性能较好,另一些较差,性能好的承担更多的用户请求。
我们通过
Nacos管理页面中对同一集群的不同实例的权重进行调整。权重从1~0,1为必定可以被调用,0.5为50%几率被调用,0为绝对不被调用。
Nacos有什么实践场景
-
可以让服务平滑升级。
当服务实例
a要升级的时候,逐步下降他的权重至0,让服务分流到其他实例。升级完毕之后,逐步上升实例a的权重,可以进行少量的服务进行测试。最后将其的权重调整到适合的比例。这么做可以让用户不会感觉到服务的变化,对用户体验没有太大的影响。也能平滑的升级服务。
什么是命名空间(Namespace)
- 命名空间也称为
Namespace,它用于在多环境下配置管理和服务隔离。在不同的命名空间下,可以存在相同过的Group或Data ID的配置。Namespace常用的场景之一就是不同环境的配置的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。使用一套Nacos注册中心去管理多套不同的环境服务器,呈现出了Nacos一个平台的概念。
如何创建命名空间(Namespace)
-
我们可以在
Nacos管理页面中创建命名空间
如何将实例放入对应的命名空间中
-
将对应命名空间的命名空间 ID配置到对应服务的配置中
spring: cloud: Nacos: discovery: # 命名空间 ID namespace: 0904c371-193a-4cd9-badc-3781e91a0bbe修改配置之后重启服务。
-
我们可以通过
Nacos管理页面查看到对应的服务已转移
如果不配置命名空间会怎样
- 如果不配置命名空间的话,所有的服务默认放在
public命名空间当中
不同命名空间的服务能相互调用吗?
- 不能! 不能! 不能!命名空间就是为了多环境下的服务和资源隔离的!
消费者是否每次请求都向Nacos拉取服务
- 不是的。如果每次远程调用都需要向
Nacos拉取服务,那么就会对Nacos造成过大的压力。所以消费者会像Nacos定时拉提供者信息并放入服务列表缓存内。这样既即节约时间,也降低Nacos压力
Nacos客户端服务实例如何如何区分
-
Nacos的客户端服务分为临时实例和非临时实例。我们可以通过Nacos管理页面查看
临时实例和非临时实例有什么区别
- 当服务实例作为提供者的时候,临时实例采取的是心跳监控策略。每隔一段时间临时实例就会向
Nacos汇报心跳。当心跳停止的时候,Nacos就会认为此实例出现异常,直接剔除出服务列表。 - 当服务实例作为提供者的时候,非临时实例采取的是主动询问策略。每隔一段时间
Nacos便会询问非临时实例的状态。当非临时实例状态不好的时候,Nacos会认为此实例出现异常,但不会剔除出服务列表,而是继续主动询问,至实例状态恢复或手动在Nacos管理页面删除服务。 - 可以看出,临时实例像别人家的孩子,非临时实例像自家孩子。
Nacos拟人化了。
Nacos如何设置服务为非临时服务
-
Nacos默认服务为临时服务,如果想将服务设置成非临时服务只需要修改服务配置即可。spring: cloud: nacos: discovery: # true设置为临时服务 false设置为非临时服务 ephemeral: false
Nacos是否会主动推送信息给消费者
- 会的。
Nacos也考虑到了消费者会定期向Nacos服务端拉取服务并存入服务列表缓存。但是可能会出现在拉取的间隙提供者状态发生改变,从而导致消费者远程调用服务的时候出现异常。所以Nacos服务端提供了一种服务。每当服务的状态发生了改变的时候,就会为该服务的消费者主动推送变更信息。
Nacos和Eureka之间有什么异同
Nacos相较于Eureka而言,有着更多的功能,有着更好的生态。但是两者之间的使用并没有太大的差距。可以实现无缝切换。若是日后工作中使用的是Eureka注册器,可以尝试推荐使用Nacos来代替。- 区别
- 两者对于微服务提供注册这个功能而言没有太大的区别,但是两者使用的依赖和配置是有所差异的。
- 两者服务分级存储模型有所不同,
Eureka是两级,分别是:服务和实例。Nacos是三级,分别是:服务,集群和实例。 Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
Nacos支持服务列表变更的消息推送模式,服务列表更新更及时Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式
- 共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测