浅谈Spring Cloud Ribbon原理及其使用方法

1,概述

1.是什么

Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端负载均衡的工具。
简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer(简称LB)后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们很容易使用Ribbon实现自定义的负载均衡算法。

2.能干嘛

LB负载均衡(Load Balance)是什么

简单的说就是将用户的请求平摊的分配到多个服务上,从而达到系统的HA(高可用)。
常见的负载均衡有软件Nginx,LVS,硬件 F5等。

Ribbon本地负载均衡客户端 VS Nginx服务端负载均衡区别

Nginx是服务器负载均衡,客户端所有请求都会交给nginx,然后由nginx实现转发请求。即负载均衡是由服务端实现的。
Ribbon本地负载均衡,在调用微服务接口时候,会在注册中心上获取注册信息服务列表之后缓存到JVM本地,从而在本地实现RPC远程服务调用技术。

集中式LB

即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;

进程内LB

将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器。
Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方通过它来获取到服务提供方的地址。
实现:负载均衡+RestTemplate调用

总结:

Spring Cloud Ribbon是Spring Cloud中的一个组件,它提供了客户端负载均衡的功能,可以与服务发现组件(如Eureka)结合使用,实现服务之间的负载均衡。

原理:

1.服务注册与发现

服务提供者将自身注册到服务注册中心(如Eureka),服务消费者通过服务注册中心获取可用的服务提供者实例信息。

2.Ribbon客户端

消费者端的Ribbon客户端会从服务注册中心获取服务提供者的实例列表,并根据配置的负载均衡策略选择合适的服务实例来发送请求。

3.负载均衡策略

Ribbon支持多种负载均衡策略,包括轮询、随机、权重等,消费者可以根据需要进行配置。

4.请求重试与容错

Ribbon还支持请求重试和容错机制,当请求失败时可以进行重试或者切换到其他可用的服务实例。

使用详解:

0.架构说明:

Ribbon在工作时分成两步

  • 第一步先选择 EurekaServer ,它优先选择在同一个区域内负载较少的server.

  • 第二步再根据用户指定的策略,在从server取到的服务注册列表中选择一个地址。

总结:

Ribbon 是一个软负载均衡的客户端组件,它可以和其他所需请求的客户端结合使用,和 eureka 结合只是其中的一个实例。

1.添加依赖

首先需要在项目中添加Spring Cloud Ribbon的依赖,通常可以通过Maven或Gradle来进行添加。

<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

如果引入了spring-cloud-starter-netflix-eureka-client依赖,就不需要加spring-cloud-starter-ribbon引用,因为spring-cloud-starter-netflix-eureka-client自带了spring-cloud-starter-ribbon引用。

2.配置Ribbon客户端

在Spring Boot应用的配置文件中,可以配置Ribbon的一些属性,例如负载均衡算法、连接超时时间、重试次数等。以下是一个简单的配置示例:

my-service:
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule
    ConnectTimeout: 3000
    ReadTimeout: 60000

3.整合服务发现

如果使用服务发现组件(如Eureka),需要将Ribbon与服务发现组件整合,以便获取服务实例列表。

4.结合RestTemplate

通常情况下,Ribbon会与RestTemplate结合使用来进行服务间的通信。在使用RestTemplate时,可以通过服务名来调用其他服务,Ribbon会自动进行负载均衡。

@Autowired
private RestTemplate restTemplate;

public String callOtherService() {
    return restTemplate.getForObject("http://my-service/api/data", String.class);
}

5.自定义配置

可以根据实际需求对Ribbon进行自定义配置,包括负载均衡策略、超时设置、重试次数等。

@Configuration
public class RibbonConfig {

    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

通过上述配置,RestTemplate将会整合Ribbon的负载均衡功能,可以实现服务之间的负载均衡。同时,可以在RestTemplate中使用服务名称代替具体的URL,Ribbon会根据服务名称自动选择合适的服务实例来发送请求。

6.测试负载均衡

为了测试负载均衡效果,可以启动多个相同服务的实例,然后调用该服务,观察请求的分发情况。根据配置的负载均衡算法,请求应该会被均匀地分发到各个服务实例上。

相关推荐

  1. Spring Cloud Ribbon原理及其使用方法

    2024-03-14 05:32:08       20 阅读
  2. SpringAOP实现原理

    2024-03-14 05:32:08       20 阅读
  3. 原生安全

    2024-03-14 05:32:08       11 阅读
  4. 深度学习的学习方法

    2024-03-14 05:32:08       16 阅读
  5. [云原生基础] Docker

    2024-03-14 05:32:08       41 阅读
  6. 前端路由原理hash和history

    2024-03-14 05:32:08       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-14 05:32:08       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-14 05:32:08       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-14 05:32:08       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-14 05:32:08       20 阅读

热门阅读

  1. 在组件上使用v-model

    2024-03-14 05:32:08       18 阅读
  2. SCI 图像处理期刊

    2024-03-14 05:32:08       18 阅读
  3. Flink实时写Hudi报NumberFormatException异常

    2024-03-14 05:32:08       17 阅读
  4. 剑指offer面试题35 第一个只出现一次的字符

    2024-03-14 05:32:08       13 阅读
  5. css隐藏元素的方式有哪些?

    2024-03-14 05:32:08       24 阅读
  6. AI大语言模型GPT & R 生态环境领域数据统计分析

    2024-03-14 05:32:08       15 阅读
  7. python函数

    2024-03-14 05:32:08       17 阅读
  8. 分布式链路追踪(一)SkyWalking(2)使用

    2024-03-14 05:32:08       19 阅读
  9. springboot 接双 Kafka

    2024-03-14 05:32:08       19 阅读