介绍

这都是Ribbon的负载均衡做到的 针对问题一,通过跟断点得知,Ribbon是通过几种不同的负载均衡算法实现的这一个机制(比如轮询算法针对问题二,Ribbon会根据服务名称去Eureka注册中心拉取服务,如下两个图所示:

Untitled

负载均衡策略

Untitled

RoundRobin —— 意为轮询,操作系统也有类似的概念(CPU时间片轮转)

Untitled

配置实现

可以使用如下代码配置对某个服务的负载均衡策略(在 application.yml里配置)

比如OrderSerive调用userservice采用随机规则,就需要在OrderSerive的yml的配置文件中配置

# 给某个微服务配置负载均衡规则,这里是userservice服务为例
userservice:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule # 负载均衡规则

OrderSerive启动类时注入一个规则,访问其他所有Service都是这个规则

@Bean
public IRule randomRule() {
    return new RandomRule();
}

Ribbon开启饥饿加载

Ribbon默认是采用懒加载,即第一次访问时才会去创建LoadBalanceClient,请求时间会很长。