Ribbon详解(作用原理及使用实例)

Ribbon详解(作用原理及使用实例)-mikechen

Ribbon定义

Ribbon是Spring Cloud Netiflix组件中一个基于HTTP和TCP的客户端负载均衡工具,它基于Netflix Ribbon实现。

 

Ribbon作用

Ribbon主要作用是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。

Ribbon详解(作用原理及使用实例)-mikechen

当多个服务提供者时,Ribbon 可以根据负载均衡的算法,比如:如简单轮询、随机连接等,自动地选择需要调用的服务地址。

 

Ribbon使用

知道了Ribbon的作用后,我们通过一个简单的示例来学习下Ribbon的使用。

1.引入Ribbon依赖

在 Spring Cloud工程中引用Ribbon非常简单,只需要在pom.xml中添加以下依赖。

如下所示:

  1. <dependency>
  2. <groupId>org.springframework.cloud</groupId>
  3. <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
  4. </dependency>

 

2.增加启动类

  1. @SpringBootApplication
  2. @EnableEurekaClient
  3. public class RibbonDemoApplication {
  4.  
  5. public static void main(String[] args) {
  6. SpringApplication.run(RibbonDemoApplication.class, args);
  7. }
  8.  
  9. @Bean
  10. @LoadBalanced
  11. RestTemplate restTemplate(){
  12. return new RestTemplate();
  13. }
  14. }

Ribbon客户端本身作为一个Eureka客户端存在,因此需要@EnableEurekaClient注解,并且向注册中心注册服务。

Ribbon通过RestTemplate类调用远程服务器,因此我们还需要注入RestTemplate类。

  1. @LoadBalanced

只有增加@LoadBalanced注解,Ribbon才会启用负载均衡。

 

3.配置文件

  1. server.port=8090
  2.  
  3. # 当前应用名称
  4. spring.application.name=ribbon-client
  5. # eureka注册中心地址
  6. eureka.client.serviceUrl.defaultZone=http://127.0.0.1:8761/eureka/

作为一个Eureka客户端,我们仍然需要如下的配置信息,以保证注册服务到注册中心服务器上。

 

4.创建Rest请求示例

我们打算对外暴露一个接口,接收来自浏览器的请求,然后将这些请求以负载均衡的方式发送给真正的服务端。

  1. @RestController
  2. public class RibbonTestController {
  3. private static String EUREKA_URL = "http://eureka-client/getHello";
  4.  
  5. @Autowired
  6. private RestTemplate restTemplate;
  7.  
  8. @GetMapping("/getRibbonHello")
  9. public String getRibbonHello(HttpServletRequest request){
  10. String result = restTemplate.getForObject(EUREKA_URL, String.class);
  11. System.out.println(result);
  12. return result;
  13. }
  14.  
  15. }

如此我们就准备好了一个最简单的Ribbon使用案例。

 

Ribbon负载均衡原理

首先我们要明确负载均衡分为:集中式负载均衡和进程内负载均衡。

1.服务端的负载均衡

例如,硬件的有:F5,软件的有典型代表:Nginx,都是先发送请求,然后在服务器端再进行负载均衡算法分配。

 

2.客户端的负载均衡

负载均衡逻辑集成到消费方客户端,消费方从服务注册中心获知那些地址可用,然后自己再从这些地址中选择一个合适的服务器。

例如spring cloud中的Ribbon,客户端会有一个服务器地址列表,在发送请求前通过负载均衡算法选择一个服务器,然后进行访问,在客户端就进行负载均衡算法分配。

如下图所示:

Ribbon详解(作用原理及使用实例)-mikechen

总共有七种负载均衡策略可供选择,可以根据自己的业务场景进行选择:

  1. 轮询RoundRobinRule:这也是Ribbon默认的策略
  2. 随机RandomRule;
  3. 响应时间权重ResponseTimeWeightedRule:为每个服务设置权重,响应时间越短,权重越大;
  4. 最少并发数策略BestAvailableRule;
  5. 重试策略RetryRule;
  6. 可用性敏感策略AvailabilityFilteringRule;
  7. 区域性敏感策略ZoneAvoidanceRule;
评论交流
    说说你的看法
欢迎您,新朋友,感谢参与互动!