一、负载均衡流程
order-service发起请求http://userservice/user/1,Ribbon获取并根据其服务ID(userservice)去注册中心拉取服务列表(实例1:localhost:8080,实例2:localhost:8081)。Ribbon获取到服务列表后再去转化,调用真正的服务。
深挖Ribbon的内部运行机制。
- 请求发送到Ribbon,会被一个负载均衡拦截器所拦截。获取服务名后向下传递。
- 服务名经过注册中心查询后,将服务列表返回给DynamicServerListLoadBalancer,然后根据IRlue的具体实现,执行不同的负载均衡策略。选择服务列表的某个服务后,进行url修改,最终请求真正的服务地址。
二、负载均衡策略及如何修改负载均衡策略
-
负载均衡策略:
-
策略修改:
(1)配置类中配置新的IRlue类。(配置灵活,但修改需重新打包发布)
@Bean
public IRule randomRule(){
//更改为随机选择
return new RandomRule();
}
(2)配置文件中添加新的规则。(直观、方便,无需重新打包发布,但是无法做全局配置)
userserver: #指定服务名
ribbon:
NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #指定负载均衡规则
三、饥饿加载的开启
Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间长,而饥饿加载会在项目启动时创建,降低第一次访问的耗时。
ribbon:
eager-load:
clients: userserver #指定服务进行饥饿加载
enabled: true #开启饥饿加载