目录
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微服务访问任何微服务都遵循该策略),修改为随机策略 :
@Bean public 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=false username: root password: 888888 driver-class-name: com.mysql.jdbc.Driver application: 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=false username: root password: 888888 driver-class-name: com.mysql.jdbc.Driver application: name: orderservice # order服务名称 cloud: nacos: server-addr: localhost:8848 # nacos服务地址 discovery: cluster-name: HZ # 集群名称 HZ代指杭州 namespace: 9d2976a6-9560-46b7-a680-260801971b01 # 命名空间的id
修改结果 :