SpringCloud组件之Ribbon

本文涉及的产品
传统型负载均衡 CLB,每月750个小时 15LCU
应用型负载均衡 ALB,每月750个小时 15LCU
网络型负载均衡 NLB,每月750个小时 15LCU
简介: SpringCloud组件之Ribbon

Spring Cloud Ribbon 是一个基于 Http 和 TCP 的客服端负载均衡工具,它是基于 Netflix Ribbon 实现的。客户端负载均衡即是当浏览器向后台发出请求的时候,客户端会向 Eureka Server 读取注册到服务器的可用服务信息列表,根据设定的负载均衡策略(没有设置即用默认的),选择向哪台服务器发送请求

本文将介绍Ribbon的工作原理以及如何在项目中使用

一、Ribbon简介

1、Ribbon工作原理

ribbon实现的关键点是为ribbon定制的RestTemplate,ribbon利用了RestTemplate的拦截器机制,在拦截器中实现ribbon的负载均衡。负载均衡的基本实现就是利用applicationName从服务注册中心获取可用的服务地址列表,然后通过一定算法负载,决定使用哪一个服务地址来进行http调用
info

2、Ribbon的常用负载策略

  • RandomRule:随机选取负载均衡策略。

随机选择状态为UP的Server

  • RoundRobinRule:简单轮询负载均衡,默认选择

以轮询的方式依次将请求调度不同的服务器,即每次调度执行i = (i + 1) mod n,并选出第i台服务器

  • WeightedResponseTimeRule:加权响应时间负载均衡

根据响应时间分配一个weight,响应时间越长,weight越小,被选中的可能性越低

  • ZoneAvoidanceRule:区域感知轮询负载均衡

复合判断server所在区域的性能和server的可用性选择server

二、搭建Eureka服务

由于有专门一章介绍Eureka,对Eureka不熟悉的可以前往阅读这篇文章:SpringCloud组件之Eureka,这里不在讲解如何搭建啦。

三、搭建web服务,用于ribbon调用

1、导入依赖

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
AI 代码解读

2、配置文件

  • bootstrap.yml
spring:
  profiles:
    active: demo1
AI 代码解读
  • application-demo1.yml
server:
  port: 8090
spring:
  application:
    name: demo
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
AI 代码解读
  • application-demo2.yml
server:
  port: 8091
spring:
  application:
    name: demo
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
AI 代码解读

由于要测试负载,因此创建两个配置文件,bootstrap为引导文件,较application先执行

3、启动类

/**
 * @author Gjing
 */
@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {
    public static void main(String[] args) {
        SpringApplication.run(DemoApplication.class, args);
    }
}
AI 代码解读

4、提供接口

/**
 * @author Gjing
 **/
@RestController
public class TestController {

    @GetMapping("/test-ribbon")
    public String testRibbon() {
        System.out.println("有新的请求");
        return "success";
    }

}
AI 代码解读

分别启动两个不同的端口服务

四、搭建发起Ribbon调用的服务

1、导入依赖

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
AI 代码解读

2、配置文件

server:
  port: 8084
spring:
  application:
    name: ribbon-demo
eureka:
  client:
    service-url:
      defaultZone: http://localhost:8761/eureka/
AI 代码解读

3、启动类

/**
 * @author Gjing
 */
@SpringBootApplication
@EnableEurekaClient
public class RibbonApplication {
    public static void main(String[] args) {
        SpringApplication.run(RibbonApplication.class, args);
    }
}
AI 代码解读

4、配置类

向容器中注入 restTemplate,同时通过 @LoadBalanced 开启 restTemplate 负载均衡功能

/**
 * @author Gjing
 **/
@Configuration
public class RibbonConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}
AI 代码解读

5、接口调用

/**
 * @author Gjing
 **/
@RestController
public class TestRibbonController {

    @Resource
    private RestTemplate restTemplate;

    @PostMapping("/test")
    public String test() {
        return restTemplate.getForObject("http://demo/test-ribbon", String.class);
    }
}
AI 代码解读

启动后测试,会发现轮询调用我们之前启动的两个不同端口的服务

  • 服务1
    1
  • 服务2
    2

6、负载策略很多,本文举例随机策略来实现负载

修改配置类,增加策略规则

/**
 * @author Gjing
 **/
@Configuration
public class RibbonConfig {
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

    // 配置随机策略
    @Bean
    public IRule ribbonRandomRule() {
        return new RandomRule();
    }
}
AI 代码解读

接下来启动就是随机向某个服务发起请求了,以下是两个服务的响应情况

  • 服务1
    3
  • 服务2
    4

好了,本文到此就结束啦,如果发现有误,可以评论留言哦,希望大家可以关注我哦,我会经常分享技术文章,本文Demo地址:SpringCloud-Demo

相关实践学习
SLB负载均衡实践
本场景通过使用阿里云负载均衡 SLB 以及对负载均衡 SLB 后端服务器 ECS 的权重进行修改,快速解决服务器响应速度慢的问题
负载均衡入门与产品使用指南
负载均衡(Server Load Balancer)是对多台云服务器进行流量分发的负载均衡服务,可以通过流量分发扩展应用系统对外的服务能力,通过消除单点故障提升应用系统的可用性。 本课程主要介绍负载均衡的相关技术以及阿里云负载均衡产品的使用方法。
相关文章
5 大 SpringCloud 核心组件详解,8 张图彻底弄懂
本文图文详解 Spring Cloud 的五大核心组件,帮助深入理解和掌握微服务架构。关注【mikechen的互联网架构】,10年+BAT架构经验倾囊相授。
5 大 SpringCloud 核心组件详解,8 张图彻底弄懂
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + RabbitMQ应用程序部署到Pivotal Cloud Foundry (PCF)
53 6
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot + MySQL应用程序部署到Pivotal Cloud Foundry (PCF)
88 5
|
3月前
|
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
如何将Spring Boot应用程序部署到Pivotal Cloud Foundry (PCF)
65 5
SpringCloud之Ribbon使用
通过以上步骤,就可以在Spring Cloud项目中有效地使用Ribbon来实现服务调用的负载均衡,提高系统的可靠性和性能。在实际应用中,根据具体的业务场景和需求选择合适的负载均衡策略,并进行相应的配置和优化,以确保系统的稳定运行。
215 15
除了 Ribbon,Spring Cloud 中还有哪些负载均衡组件?
这些负载均衡组件各有特点,在不同的场景和需求下,可以根据项目的具体情况选择合适的负载均衡组件来实现高效、稳定的服务调用。
272 5
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
文章标题为“OpenFeign的Ribbon负载均衡详解”,是继OpenFeign十大可扩展组件讨论之后,深入探讨了Ribbon如何为OpenFeign提供负载均衡能力的详解。
OpenFeign最核心组件LoadBalancerFeignClient详解(集成Ribbon负载均衡能力)
SpringCloud之Ribbon使用
通过 Ribbon,可以非常便捷的在微服务架构中实现请求负载均衡,提升系统的高可用性和伸缩性。在实际使用中,需要根据实际场景选择合适的负载均衡策略,并对其进行适当配置,以达到更佳的负载均衡效果。
266 13
深入了解Spring Cloud Alibaba Dubbo
在现代分布式系统开发中,构建高性能、可伸缩性和弹性的微服务架构变得越来越重要。Spring Cloud Alibaba Dubbo(简称Dubbo)是一个开源的分布式服务框架,可以帮助开发者构建强大的微服务架构,具备负载均衡、服务治理、远程调用等强大功能。本文将深入介绍Spring Cloud Alibaba Dubbo,帮助你理解它的核心概念、工作原理以及如何在你的项目中使用它。
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等