Nacos
Nacos可以看作注册中心+配置中心,比Eureka更加强大。
注册中心
在父工程中引入SpringCloudAlibaba的版本依赖
<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>
在服务中引入nacos的依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件(application.yml)
spring:application:name: orderservice # 服务名称,和Eureka一样cloud:nacos:server-addr: localhost:8848discovery:cluster-name: SX # 集群名称
配置文件中需要指定服务的名称(这里和Eureka一样),其次需要指定nacos的ip+端口。至于下边的cluster-name是指定当前服务的集群名称。
这就是Nacos的服务分级存储模型,即一个服务可以包含多个集群,如杭州、上海,每个集群下可以有多个实例,形成分级模型。微服务互相访问时,应该尽可能访问同集群实例,因为本地访问速度更快。当本集群内不可用时,才访问其它集群。
划分的时候其实是根据机器所处的地理位置来划分,同一个机房之间的服务调用肯定速度更快。
当然默认的负载均衡策略不会想我们想象的那样,Nacos提供了同集群优先的负载均衡策略,只需要修改配置文件(application.yml)中的负载均衡策略:
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
这样在服务调用的时候会遵循同集群优先,但是在同集群下的实例是随机的,而不再是轮询策略。
权重配置
Nacos也提供了权重的配置,可以修改某一个实例的权重而改变被选择的频率。当权重为0的时候就一定不会访问,相当于该实例已经下线。这样我们在做一些版本的升级时就不会影响用户的正常访问。
命名空间NameSpace
Namespace 是 Nacos 提供的一个虚拟隔离区域,用于将不同的服务和配置进行逻辑分组。不同的 Namespace 之间是完全隔离的,即一个 Namespace 中的服务或配置不会影响到另一个 Namespace 中的内容。举个例子,把服务服务调用者放到默认的public,把服务提供者放到新增的test’,然后再去访问。
由此可见,public和test这两个命名空间时完全隔离的。
Group
Group 是用于对同一 Namespace 内的服务进行进一步分组的单位,可以用于将同一 Namespace 中的服务按业务分类或功能模块进行管理。例如,一个 Namespace 可以包含多个 Group,如 payment
、order
、inventory
等
Nacos与Eureka的区别
Nacos和Eureka整体结构类似,服务注册、服务拉取、心跳等待,但是也存在一些差异:
Nacos对不同的服务提供者实例采取的监测机制不一样,而且消费者也不是只能去pull,Nacos也会主动的去push。
-
Nacos与eureka的共同点
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
-
Nacos与Eureka的区别
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式。并且临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式
- Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式