目录
4. Ribbon负载均衡
4.1 负载均衡流程
4.2 负载均衡策略
4.3 Ribbon饥饿加载
5. Nacos注册中心
5.1 服务注册到nacos
5.2 nacos服务分级存储模型
5.3 根据权重负载均衡
5.4 环境隔离--namespace
4. Ribbon负载均衡
4.1 负载均衡流程
4.2 负载均衡策略
默认实现是轮流循环策略,是ZoneAvoidanceRule
修改负载均衡规则 :
-
代码方式,在order-service启动类中添加(作用于全局,即order微服务访问任何微服务都遵循该策略),修改为随机策略 :
@Beanpublic IRule randomRule(){return new RandomRule();}
-
配置文件方式 ,只针对某个服务(指定服务名,如下面的userservice), 在配置文件中 :
userservice:ribbon:NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则
4.3 Ribbon饥饿加载
Ribbon默认是懒加载,只有在第一次访问时才去创建LoadBalanceClient,请求时间会很长,
饥饿加载会在项目启动时就创建,降低第一次访问耗时
饥饿加载的配置
在order-service 配置文件中 :
ribbon:eager-load:enable: true # 开启饥饿加载clients: -userservice # 指定饥饿加载的服务名称 可以是一个集合-xxxservice-xxxxservice
5. Nacos注册中心
启动nacos命令 :
管理员身份运行cmd到nacos安装的bin目录下
startup.cmd -m standalone
访问页面 :
http://192.168.142.1:8848/nacos/index.html
5.1 服务注册到nacos
引入依赖 在父工程中加入 :
<!--nacos的管理依赖--><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>
在user-service中引入nacos服务发现依赖
<!--nacos客户端依赖包--><dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId></dependency>
修改user-service的yml配置文件 order-service同理 把user-service服务发现到nacos
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_user?useSSL=falseusername: rootpassword: 888888driver-class-name: com.mysql.jdbc.Driverapplication:name: userservice # user服务的服务名称cloud:nacos:server-addr: localhost:8848 # nacos服务地址
5.2 nacos服务分级存储模型
user-serviced的配置文件添加
cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: HZ # 集群名称 HZ代指杭州
开多端口方法 :
修改选项中点击添加VM选项,弹出提示框中添加 -Dserver.port=要开的新端口
结果演示 :
在order-service中加入同样配置,测试order在调用userservice是否优先选择本地集群,把order-service放在HZ,user-service两个分支一个在HZ,一个在SH
order-service的yml文件中同样配置
cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: HZ # 集群名称 HZ代指杭州
在order-service的yml配置文件中修改对userservice的负载均衡规则 :
userservice:ribbon:NFLoadBalancerRuleClassName: com.alibaba.cloud.nacos.ribbon.NacosRule # 负载均衡规则
测试结果 : 在杭州集群的order-service只调用了在杭州集群的user-service而未调用在上海集群的user-service
NacosRule负载均衡规则 :
-
优先选择本地集群
-
本地集群找不到提供者,才去其他集群寻找
-
确定了可用实例列表后,再采用随机均衡负载挑选实例
5.3 根据权重负载均衡
通过修改权重控制访问频率,权重越大访问频率越高
5.4 环境隔离--namespace
在页面新建命名空间
修改order-service的yml文件,新增namespace指定命名空间的id
spring:datasource:url: jdbc:mysql://localhost:3306/cloud_order?useSSL=falseusername: rootpassword: 888888driver-class-name: com.mysql.jdbc.Driverapplication:name: orderservice # order服务名称cloud:nacos:server-addr: localhost:8848 # nacos服务地址discovery:cluster-name: HZ # 集群名称 HZ代指杭州namespace: 9d2976a6-9560-46b7-a680-260801971b01 # 命名空间的id
修改结果 :