【Ribbon负载均衡调用】—— 每天一点小知识

这篇具有很好参考价值的文章主要介绍了【Ribbon负载均衡调用】—— 每天一点小知识。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

【Ribbon负载均衡调用】—— 每天一点小知识,每天一点小知识,ribbon,负载均衡,spring cloud

                                                                              💧 R i b b o n 负载均衡调用 \color{#FF1493}{Ribbon负载均衡调用} Ribbon负载均衡调用💧          


🌷 仰望天空,妳我亦是行人.✨
🦄 个人主页——微风撞见云的博客🎐
🐳 《数据结构与算法》专栏的文章图文并茂🦕生动形象🦖简单易学!欢迎大家来踩踩~🌺
💧 《Java学习笔记》专栏的文章是本人在Java学习中总结的一些知识点~ 💐
🥣 《每天一点小知识》专栏的文章可以丰富你的知识库,滴水成河~ 🌊
🪁 希望本文能够给读者带来一定的帮助~🌸文章粗浅,敬请批评指正!🐥



🐳Ribbon负载均衡调用

在现代分布式系统中,负载均衡是非常重要的组件,它可以确保服务的高可用性和性能优化。Ribbon是Netflix开源的负载均衡器,它在Spring Cloud中被广泛应用,为微服务架构中的服务消费者提供了负载均衡的功能。本博客将介绍Ribbon的概述、使用RestTemplate进行Ribbon负载均衡演示、Ribbon核心组件IRule的讲解和使用,以及Ribbon负载均衡算法,带领读者逐步完成内容,并通过代码示例来加深理解。

【Ribbon负载均衡调用】—— 每天一点小知识,每天一点小知识,ribbon,负载均衡,spring cloud


1. Ribbon概述

💧Ribbon是Netflix开源的负载均衡器,它是一个基于HTTP和TCP的客户端负载均衡器,可用于在多个服务提供者之间进行负载均衡。Ribbon的主要目标是提供客户端的负载均衡和容错能力,通过在服务消费者端实现负载均衡,可以有效地将请求分发到不同的服务实例上,从而提高系统的可用性和性能。

💧Ribbon在Spring Cloud中被广泛应用,结合其他组件如Eureka等,可以为微服务架构中的服务消费者提供高效可靠的负载均衡支持。下面,我们将通过一个简单的示例来演示如何使用RestTemplate实现Ribbon负载均衡。

2. Ribbon负载均衡演示(使用RestTemplate)

💧首先,我们需要创建一个Spring Boot项目,并添加相关依赖:

<!-- pom.xml -->
<dependencies>
    <!-- 其他依赖 -->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
    </dependency>
</dependencies>

💧假设我们有一个提供"Hello World"服务的服务提供者,它有多个实例运行,并注册到Eureka服务器上。现在,我们将创建一个服务消费者,并使用Ribbon来调用这个服务的多个实例。

💧application.properties中配置Eureka服务器和Ribbon的相关信息:

# application.properties
eureka.client.service-url.defaultZone=http://localhost:8761/eureka

💧接下来,我们创建一个服务消费者,并在其中使用RestTemplate进行Ribbon负载均衡调用:

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.client.RestTemplate;

@Configuration
public class RibbonConfig {

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

@RestController
public class HelloController {

    @Autowired
    private RestTemplate restTemplate;

    @GetMapping("/hello")
    public String sayHello() {
        // 使用服务名替代具体的URL,RestTemplate会自动处理负载均衡
        ResponseEntity<String> response = restTemplate.getForEntity("http://hello-service/hello", String.class);
        return response.getBody();
    }
}

💧在上面的代码中,我们通过@LoadBalanced注解创建了一个具有负载均衡能力的RestTemplate。在调用服务提供者时,我们使用服务名(“hello-service”)来代替具体的URL,Ribbon会自动帮助我们选择一个可用的实例进行调用。这样,我们就完成了Ribbon负载均衡的演示。

3. Ribbon核心组件IRule讲解和使用

💧在Ribbon中,IRule是负载均衡的核心组件,它定义了负载均衡的策略。Ribbon提供了多种内置的IRule实现,同时也支持自定义实现。

💧Ribbon内置的一些常用IRule实现包括:

  • RoundRobinRule:轮询策略,默认的负载均衡策略,按顺序依次选择服务实例。
  • RandomRule:随机策略,随机选择一个可用的服务实例。
  • WeightedResponseTimeRule:根据实例的响应时间来分配权重,响应时间越短的实例被选中的概率越大。

💧我们可以通过配置修改IRule的默认实现。在application.properties中添加以下配置:

# application.properties
ribbon.NFLoadBalancerRuleClassName=com.netflix.loadbalancer.RandomRule

💧上述配置将使用RandomRule替代默认的轮询策略。

💧除了使用内置的IRule实现,我们还可以自定义IRule,以满足特定的负载均衡需求。自定义IRule需要实现com.netflix.loadbalancer.IRule接口,并使用@Configuration注解将其声明为配置类。

4. Ribbon负载均衡算法

💧Ribbon在负载均衡时采用了多种算法来选择服务实例。前面提到了一些常用的内置IRule实现,它们对应了不同的负载均衡算法。以下是一些常见的负载均衡算法:

  • 轮询(Round Robin):依次按顺序选择服务实例,逐个进行调度,循环往复。
  • 随机(Random):随机选择一个可用的服务实例。
  • 加权轮询(Weighted Round Robin):根据权重来进行轮询选择,权重越高的实例被选中的概率越大。
  • 加权随机(Weighted Random):根据权重来进行随机选择,权重越高的实例被选中的概率越大。
  • 最少连接数(Least Connections):选择当前连接数最少的实例,以达到请求分发的负载均衡效果,适用于处理连接耗时较长的场景。
  • 响应时间加权(Weighted Response Time):根据实例的响应时间来分配权重,响应时间越短的实例被选中的概率越大,适用于处理响应速度较快的服务。

💧选择合适的负载均衡算法取决于实际业务场景和系统需求。Ribbon提供了多种内置算法,同时也支持自定义算法来满足特定的负载均衡需求。

💧为了演示Ribbon负载均衡算法的效果,我们将使用加权随机算法。我们需要自定义一个IRule,并在配置中指定使用这个自定义的规则。

💧创建一个自定义的IRule实现:

import com.netflix.client.config.IClientConfig;
import com.netflix.loadbalancer.BaseLoadBalancer;
import com.netflix.loadbalancer.ILoadBalancer;
import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.Server;

import java.util.List;
import java.util.Random;

public class WeightedRandomRule implements IRule {

    private ILoadBalancer lb;

    @Override
    public void initWithNiwsConfig(IClientConfig iClientConfig) {
        // 初始化操作,此处不需要做任何处理
    }

    @Override
    public Server choose(Object o) {
        List<Server> servers = lb.getAllServers();
        if (servers.isEmpty()) {
            return null;
        }

        // 计算总的权重值
        int totalWeight = servers.stream().mapToInt(this::getWeight).sum();

        // 生成随机数并根据权重进行选择
        int randomWeight = new Random().nextInt(totalWeight);
        int currentWeight = 0;
        for (Server server : servers) {
            currentWeight += getWeight(server);
            if (currentWeight > randomWeight) {
                return server;
            }
        }

        // 如果未选择到服务实例,返回null
        return null;
    }

    private int getWeight(Server server) {
        // 这里可以根据实际情况从服务器的元数据中获取权重值
        return 1; // 假设所有服务实例的权重均为1
    }

    @Override
    public ILoadBalancer getLoadBalancer() {
        return lb;
    }

    @Override
    public void setLoadBalancer(ILoadBalancer iLoadBalancer) {
        this.lb = iLoadBalancer;
    }
}

💧接下来,在配置类中使用这个自定义的规则:

@Configuration
public class RibbonConfig {

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

    @Bean
    public IRule ribbonRule() {
        return new WeightedRandomRule();
    }
}

💧在上述代码中,我们自定义了一个WeightedRandomRule,它实现了加权随机算法。在配置类中,我们将这个规则定义为一个Bean,这样Ribbon就会使用我们自定义的算法来进行负载均衡。


注意:上述示例代码为简化的演示版本,并未包含完整的异常处理和配置细节。在实际项目中,需要根据具体情况进行进一步完善。

【Ribbon负载均衡调用】—— 每天一点小知识,每天一点小知识,ribbon,负载均衡,spring cloud


🐳结语

🐬初学一门技术时,总有些许的疑惑,别怕,它们是我们学习路上的点点繁星,帮助我们不断成长。

🐟积少成多,滴水成河。文章粗浅,希望对大家有帮助!文章来源地址https://www.toymoban.com/news/detail-608290.html

到了这里,关于【Ribbon负载均衡调用】—— 每天一点小知识的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • springcloud Ribbon负载均衡服务调用

    地址:https://github.com/13thm/study_springcloud/tree/main/days6_Ribbon Spring Cloud Ribbon是基于Netflix Ribbon实现的一套客户端 负载均衡的工具。 简单的说,Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法和服务调用。Ribbon客户端组件提供一系列完善的配置项如连接超时

    2024年01月20日
    浏览(48)
  • Spring Cloud Ribbon:负载均衡

    1. 介绍 Spring Cloud Ribbon 1.1 什么是 Spring Cloud Ribbon Spring Cloud Ribbon是Netflix开源的负载均衡器,它为分布式服务提供了客户端负载均衡的功能。Ribbon可以根据一系列的负载均衡算法和配置策略,将客户端的请求动态分发到多个服务实例上,以实现高可用性和性能优化。 1.2 负载均

    2024年02月19日
    浏览(43)
  • Spring Clould 负载均衡 - Ribbon

     视频地址:微服务(SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式)  具体实现时通过@LoaBalanced注解实现,表示RestTemplate要被Ribbon拦截处理 orderservice调用user时候,会先发送请求到Ribbon,Ribbon会到Eureka查询注册的user服务,查询到后再通过 Ribbon负载均衡选择调用具体的服务。  具体

    2024年02月12日
    浏览(35)
  • 【Spring Cloud 四】Ribbon负载均衡

    【Spring Cloud一】微服务基本知识 【Spring Cloud 三】Eureka服务注册与服务发现 目前公司项目使用的注册中心主要是Spring Cloud Alibaba的Nacos做的注册中心和配置中心。并且Nacos使用了Ribbon作为默认的负载均衡器。但是相当于将Ribbon的负载均衡给透明化了,日常开发明面上是看不到

    2024年02月14日
    浏览(50)
  • 【SpringCloud】Eureka基于Ribbon负载均衡的调用链路流程分析

    微服务间相互调用的基础上,服务间的调用更多是以调用某多实例服务下的某个实例的形式。而这就需要用到负载均衡技术。对于开发者而言,只要通过@LoadBalance注解就开启了负载均衡。如此简单的操作底层究竟是什么样的,我想你也很想知道。 在《SpringCloud集成Eureka并实现

    2024年02月05日
    浏览(36)
  • Spring Cloud - Ribbon 负载均衡原理、负载策略、懒加载

    目录 ​编辑 一、Ribbon 负载均衡原理 1.1、前言 1.2、负载均衡的工作流程 二、负载均衡策略 2.1、策略原理 2.2、负载均衡自定义方式 三、Ribbon 加载方式 ps:案例是上一章所讲的 “根据订单id查询订单的同时,把订单所属的用户信息一起返回”  。 上一章我们讲到 order-servi

    2024年02月09日
    浏览(37)
  • 1.3 eureka+ribbon,完成服务注册与调用,负载均衡源码追踪

    本篇继先前发布的1.2 eureka注册中心,完成服务注册的内容 。 目录 环境搭建 采用eureka+ribbon的方式,对多个user服务发送请求,并实现负载均衡 负载均衡原理 负载均衡源码追踪 负载均衡策略 如何选择负载均衡策略? 饥饿加载 复制(补充) 给order模块和user模块建立独立的数

    2024年02月14日
    浏览(45)
  • nacos注册中心+Ribbon负载均衡+完成openfeign的调用(超详细步骤)

    目录 1.注册中心 1.1.nacos注册中心 1.2. 微服务注册和拉取注册中心的内容 2.3.修改订单微服务的代码 3.负载均衡组件 3.1.什么是负载均衡 3.2.什么是Ribbon 3.3.Ribbon 的主要作用 3.4.Ribbon提供的负载均衡策略 4.openfeign完成服务调用 4.1.什么是OpenFeign 4.2.完成openfeign的调用  继  微服务

    2024年02月16日
    浏览(36)
  • 【Spring Cloud】Ribbon 中的几种负载均衡策略

    负载均衡通常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。 服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使

    2024年02月15日
    浏览(60)
  • Spring Cloud 实战 | 解密负载均衡Ribbon底层原理,包含实战源码

    专栏集锦,大佬们可以收藏以备不时之需 Spring Cloud实战专栏:https://blog.csdn.net/superdangbo/category_9270827.html Python 实战专栏:https://blog.csdn.net/superdangbo/category_9271194.html Logback 详解专栏:https://blog.csdn.net/superdangbo/category_9271502.html tensorflow专栏:https://blog.csdn.net/superdangbo/category_869

    2024年02月08日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包