目录
一, Nacos
1.1 Nacos的安装
1.2 服务注册到Nacos
1, 引入依赖
2, 配置Nacos地址
3, 重启
4, 进行访问
二, 服务分级存储模型
2.1 分级模型
2.2 Nacos的集群配置
1, 给user-service配置集群
2, 同集群优先的负载均衡
2.3 权重配置
国内公司一般都推崇阿里巴巴的技术,比如注册中心,SpringCloudAlibaba也推出了一个名为Nacos的注册中心
Nacos的安装包和安装指南可以在我的gitee里面进行下载:
springcloud · 徐明园/rabbitmq - 码云 - 开源中国 (gitee.com)
Nacos是SpringCloudAlibaba的组件,而SpringCloudAlibaba也遵循SpringCloud中定义的服务注册,服务发现规范,因此使用Nacos和使用Eureka对于微服务来说,并没有太大区别.
主要差异在于:
在cloud-demo父工程的pom文件中的
中引入SpringCloudAlibaba的依赖:
com.alibaba.cloud
spring-cloud-alibaba-dependencies
2.2.6.RELEASE
pom
import
然后在user-service和order-service中的pom文件中引入nacos-discovery依赖:
com.alibaba.cloud
spring-cloud-starter-alibaba-nacos-discovery
不要忘了注释掉eureka的依赖
在user-service和order-service的application.yml中添加nacos地址:
spring:
cloud:
nacos:
server-addr: localhost:8848
不要忘了注释掉eureka的地址
重启微服务后,登录nacos管理页面(用户名密码都是nacos),可以看到微服务信息:
发现依然可以访问,所以nacos用于服务注册和服务发现的功能和eureka一样
一个服务可以有多个实例,例如user-service,可以有:
假如这些实例分布于全国各地的不同机房,例如:
Nacos就将同一机房内的实例划分为一个集群,也就是说,user-service是服务,一个服务可以包含多个集群,如杭州,上海等,每个集群下可以有多个实例,形成分级模型,如图:
微服务相互访问时,应该尽可能访问同集群实例,因为本地访问速度更快,当本集群内不可用时,采访问其他集群,例如:
杭州机房内的order-service应该优先访问同机房的user-service
修改user-service的application.yml文件,添加集群配置:
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
重启两个user-service实例后,我们可以在nacos控制台看到下面结果:
此时进行访问的时候,调用的哪个集群的user-service实例都是随机的
默认的ZoneAvoidanceRule并不能实现根据同集群优先实现负载均衡,因此nacos提供了一个NacosRule的实现,可以优先从同集群中挑选实例
1. 给order-service配置集群信息
修改order-service的application.yml文件,添加集群配置
spring:
cloud:
nacos:
server-addr: localhost:8848
discovery:
cluster-name: HZ # 集群名称
2. 修改负载均衡规则
修改order-service的application.yml文件,修改负载均衡规则
userservice:
ribbon:
NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
3. 重启order-service并进行访问
访问多次之后可以发现访问全落在了端口号为8081的杭州集群的user-service实例上了.
实际部署中,会出现这样的场景:
服务器设备性能有差异,部分实例所在机器性能比较好,另一些差异,我们希望性能好的机器承担更多的用户请求,但默认情况下NacosRule是同集群内随机挑选,不会考虑机器性能的问题;因此,nacos提供了权重配置来控制访问频率,权重越大则访问频率越高.
在nacos控制台,找到user-service的实力列表,点击编辑,即可修改权重:
如果给权重修改为0,则该实例永远不会被访问