1、什么是Ribbon

Ribbon是Netflix发布的开源项目,其主要功能是提供客户端侧负载均衡算法。Ribbon客户端组件提供一系列列完善的配置项如连接超时,重试等。Ribbon会自动的帮助你基于某种规则(如轮询,随机等)去连接这些机器,同时,Ribbon也支持自定义的负载均衡算法

在 SpringCloud 中,Ribbon利用从Eureka中读取到的服务提供者列表信息,在调用服务节点提供的服务时,基于内置的负载均衡算法,进行请求服务。

2、Ribbon负载均衡和Nginx的负载均衡有什么不同?(常见面试题)

一般实现负载均衡,会有两个选择,客户端负载均衡和服务端的负载均衡

  • Nginx是服务器端负载均衡,负载均衡的策略算法是在服务器端实现的。

  • Ribbon是客户端负载均衡,负载均衡算法是由调用者本身维护的

3、Ribbon提供的负载均衡策略有哪些?

Ribbon内置了多种负载均衡策略,内部负责复杂均衡的顶级接口为 com.netflix.loadbalancer.IRule;

com.netflix.loadbalancer.RoundRobinRule :轮询策略
com.netflix.loadbalancer.RandomRule :随机策略 
com.netflix.loadbalancer.BestAvailableRule :最佳可用策略

4、修改默认的负载均衡策略,在index-service的application.yml配置

#配置调用product-service服务采用的负载均衡策略
#注意,此处大小写要跟接口的声明一致
PRODUCT-SERVICE:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule

5、重试机制

当集群服务有些服务出现问题时,如果刚好调用到出问题的服务器,那么会出现服务调用失败。

我们可以采用Ribbon支持的重试机制来解决问题

引入依赖:

<dependency>
      <groupId>org.springframework.retry</groupId>
      <artifactId>spring-retry</artifactId>
</dependency>

配置:

PRODUCT-SERVICE:
  ribbon:
    #NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    OkToRetryOnAllOperations: true # 是否对所有操作都进行重试
    MaxAutoRetriesNextServer: 3 # 切换实例的重试次数