目录

目前主流的负载方案分为以下两种:

一、Ribbon是什么?

二、Ribbon的主要功能

 三、Ribbon负载均衡策略

 四、实现

4.1、pom.xml

 4.2、写个配置类,注入RestTemplate,并加注解@LoadBalanced,表示拦截所有RestTemplate发出的请求。

 4.3、Ribbon会自动根据指定的算法来实现负载均衡。


目前主流的负载方案分为以下两种:

  • 集中式负载均衡,在消费者和服务提供者中间使用独立的代理方式进行负载,有硬件的(比如 交换机,F5),也有软件的(比如 Nginx)。
  • 客户端根据自己的请求情况做负载均衡,Ribbon 就属于客户端自己做负载均衡。

一、Ribbon是什么?

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。

二、Ribbon的主要功能

主要功能是提供客户端(服务消费者)的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列的完善的配置,如超时,重试等。通过Load Balancer(简称LB)获取到服务提供的所有机器实例,Ribbon会自动基于某种规则、算法去调用这些服务。Ribbon默认提供 很多种负载均衡算法(负载均衡策略),例如轮询、随机 等等。

  • Load Balancer(简称LB):简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。

ribbon怎么实现负载均衡_负载均衡

 三、Ribbon负载均衡策略

负载均衡接口:com.netflix.loadbalancer.IRule

ribbon怎么实现负载均衡_负载均衡_02

  •  这里只说两个负载均衡策略:轮询策略、随机策略。
  • 轮询策略com.netflix.loadbalancer.RoundRobinRule:该策略实现按照线性轮询的方式依次选择实例的功能。具体实现如下,在循环中增加了一个count计数变量,该变量会在每次轮询之后累加并求余服务总数。

ribbon怎么实现负载均衡_ribbon_03

ribbon怎么实现负载均衡_ribbon_04

 

  • 随机策略com.netflix.loadbalancer.RandomRule:该策略实现了从服务清单中随机选择一个服务实例的功能。

ribbon怎么实现负载均衡_ribbon_05

  •  如果上面看着费劲,那来个简单的:
  • 随机策略:

ribbon怎么实现负载均衡_ribbon_06

  • 轮询策略:  

ribbon怎么实现负载均衡_客户端_07

 四、实现

  • 使用技术:Ribbon + RestTemplate。

4.1、pom.xml

  • nacos里面已经集成了ribbon的依赖,我们这里直接用的nacos的依赖,所以不用在引入ribbon依赖。

ribbon怎么实现负载均衡_ribbon_08

 4.2、写个配置类,注入RestTemplate,并加注解@LoadBalanced,表示拦截所有RestTemplate发出的请求。

ribbon怎么实现负载均衡_ribbon怎么实现负载均衡_09

 4.3、Ribbon会自动根据指定的算法来实现负载均衡。