Nacos注册中心
阿里巴巴提供,现已被SpringCloud所使用,比Eureka功能更加强大
导入
Maven Repository: com.alibaba.nacos » nacos-client (mvnrepository.com)
可以在上面的maven仓库中选择自己想要使用的版本
默认是8848端口(成功人士标配,也是珠穆朗玛峰的高度)
父工程导入
客户端导入
pom先导入依赖
<!-- nacos客户端依赖包 -->
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
配置文件修改
spring:
cloud:
nacos:
server-addr: nacos:8848 # nacos服务地址
Nacos服务分级存储模型
服务跨集群调用问题
服务调用尽可能选择本地集群的服务,跨集群调用延迟高,本地集群不可访问时,再去访问其他集群
配置集群
spring:
datasource:
url: jdbc:mysql://mysql:3306/cloud_order?useSSL=false
username: root
password: 123
driver-class-name: com.mysql.jdbc.Driver
application:
name: orderservice
cloud:
nacos:
server-addr: nacos:8848
discovery:
cluster-name: GZ #集群名称,这里代指中国
调用本地集群就去消费者里面设置
cloud:
nacos:
server-addr: nacos:8848
discovery:
cluster-name: GZ #集群名称,这里代指中国
修改负载均衡规则,优先选择本地集群
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
根据权重负载均衡
实际部署中会出现这样的场景
- 服务器设备性能有差异,部分实例所在机器性能较好,另一些差,我们希望性能好的机器承担更多的用户请求
Nacos提供了权重来控制访问频率,权重越大则访问频率越高
在Nacos控制台端修改权重
意义:当服务器升级时,修改权重为0,升级完成后,修改权重为较小的值,测试没有问题,再慢慢升级权重
环境隔离 -namespace
Nacos中服务存储和数据存储的最外层都是一个名为namespace的东西,用来做最外层隔离
默认都是public默认空间
discovery:
namespace: 4d6ce343-9e1b-44df-a90f-2cf2b6b3d177 # dev环境
不同namespace下的服务是不可见的
nacos与Eureka的对比
Eureka与nacos拉取完之后有服务列表缓存,防止每次都去注册中心请求
服务提供者每隔一段时间会向注册中心发送一次心跳,nacos快一些,Eureka慢一些
nacos对于临时实例采用心跳检测,临时实例每隔一段时间去发送心跳,而非临时实例则是注册中心发送心跳
nacos不会去除非临时实例,仅会标记他不健康了,对于临时实例,没有心跳就直接剔除
Eureka采用的是pull,即定时拉取,而nacos采用pull加push,定时拉取和主动推送,当有服务挂了,立即推送