本文讲解Nacos作为服务注册中心的用法,服务分级模型,集群分发,服务隔离以及和Eureka的区别,从多方面入门掌握Nacos
代码地址:https://gitee.com/webprogram/springcloud_learn
Nacos注册中心
认识和安装Nacos
Nacos是阿里巴巴的产品,现在是Springboot中的一个组件,相比Eureka功能更加丰富,在国内受欢迎度较高
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台
Nacos安装
GitHub主页:https://github.com/alibaba/nacos
GitHub的Release下载页:https://github.com/alibaba/nacos/releases,根据自身情况选择合适文件下载
启动
安装包解压后,进入bin目录,执行命令:
startup.cmd -m standalone
按上图地址浏览器访问,输入默认账号密码:nacos/nacos
Nacos快速入门
服务注册
父工程 引入Nacos管理依赖
<dependencyManagement>
<dependencies>
<!-- acos的管理依赖-->
<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>
</dependencies>
</dependencyManagement>
服务模块 引入Nacos客户端依赖并配置注册中心地址
<!--Nacos客户端依赖-->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
spring:
cloud:
nacos: # nacos配置
server-addr: 127.0.0.1:8848 #Nacos注册地址
启动项目,Nacos管理界面如下:
可以看到,我们的服务已经注册进去了!!!
Nacos服务分级存储模型
nacos服务分级存储模型
一个服务会有多个实例,同时部署多个集群在不同‘地域\机房’,目的为了容灾
服务跨集群调用问题
*服务调用尽可能选择本地集群的服务,跨集群调用延迟较高
*本地集群不可用时,再去访问其他集群
例:杭州的集群中 orderservice调用userservice都是调用杭州机房中的服务,当杭州机房中userservice挂了,才回去跨区域访问上海机房中的userservice
服务集群属性
# 修改application.yml,添加如下内容:
# 1.配置所属集群名称
spring:
cloud:
nacos: # nacos配置
discovery:
cluster-name: HZ # 配置集群名称,例如:HZ,杭州:
#负载均衡策略
serservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.robbon.NacosRule # 负责均衡规则
上述配置,将某服务加入到‘HZ’集群,当配置负载均衡策略为NacosRule时,则优先调用本集群中的服务(通集群服务采用随机负载均衡规则进行调用),当本集群服务挂了则请求其他集群
Nacos管理页面如下:
根据权重负载均衡
背景:实际部署中服务器设备性能有差异,部分实例所在的激起性能较好,另一些比较差,那么性能好的应该多承担用户请求
nacos提供了权重配置来控制访问频率,权重越大则访问效率越高
配置方式:
总结:
*Nacos控制台可以设置实例的权重值,0-1之间
*集群内的多个实例,权重越大则访问频率越高
*当把权重设置为0时,则不会有请求过来(此时可以进行版本升级等,对用户来说是无感知的,实现平滑升级)
Nacos环境隔离
* namespace用来做环境隔离
* 每个namespace都有唯一id
* 不同namespace下的服务不可见
配置过程
以上步骤新建一个namespace,并生成唯一命名空间ID
# 配置namespace 值为生成的ID
spring:
cloud:
nacos:
namespace: a70b5a63-b7f2-41d2-8e56-0201045b2c76 # 命名空间唯一ID
此时启动项目会在对应命名空间下发现服务已注册,不同namespace之间的服务是被隔离的,无法访问
Nacos和Eureka对比
nacos注册中心细节分析
临时实例和非临时实例
# 服务注册到Nacos时,可以选择临时或非临时实例,通过下面配置来设置
spring:
cloud:
nacos: # nacos配置
ephemeral: false # true为临时(默认) false为非临时
总结
1.Nacos和Eureka的共同点:
*都支持服务注册和服务拉取
*都支持服务提供者心跳方式做健康监测
2.Nacos和Eureka的区别:
*Nacos支持服务端主动检测提供者的状态:临时实例采用心跳模式,,非临时实例采用主动检测模式
*临时实例心跳不健康会被注册中心剔除,非临时实例则不会被剔除
*Nacos支持服务列表变更的消息推送模式(主动向消费者推送服务列表),相对来说服务列表更新更及时
*Nacos集群默认采用AP方式,当集群中存在非临时实例时,采用CP模式;Eureka采用AP方式