【Spring Cloud】Ribbon 中的几种负载均衡策略

news2024/11/24 19:41:13

文章目录

  • 前言
  • 一、Ribbon 介绍
  • 二、负载均衡设置
  • 三、7种负载均衡策略
    • 3.1.轮询策略
    • 3.2.权重策略
    • 3.3.随机策略
    • 3.4.最小连接数策略
    • 3.5.重试策略
    • 3.6.可用性敏感策略
    • 3.7.区域敏感策略

前言

负载均衡通常有两种实现手段,一种是服务端负载均衡器,另一种是客户端负载均衡器,而我们今天的主角 Ribbon 就属于后者——客户端负载均衡器。

服务端负载均衡器的问题是,它提供了更强的流量控制权,但无法满足不同的消费者希望使用不同负载均衡策略的需求,而使用不同负载均衡策略的场景确实是存在的,所以客户端负载均衡就提供了这种灵活性。 然而客户端负载均衡也有其缺点,如果配置不当,可能会导致服务提供者出现热点,或者压根就拿不到任何服务的情况,所以我们本文就来了解一下这 7 种内置负载均衡策略的具体规则。

一、Ribbon 介绍

Ribbon 是 Spring Cloud 技术栈中非常重要的基础框架,它为 Spring Cloud 提供了负载均衡的能力,比如 Fegin 和 OpenFegin 都是基于 Ribbon 实现的,就连 Nacos 中的负载均衡也使用了 Ribbon 框架。

Ribbon 框架的强大之处在于,它不仅内置了 7 种负载均衡策略,同时还支持用户自定义负载均衡策略,所以其开放性和便利性也是它得以流行的主要原因。

服务端负载均衡器和客户端负载均衡器的区别如下图所示:

在这里插入图片描述

客户端负载均衡器的实现原理是通过注册中心,如 Nacos,将可用的服务列表拉取到本地(客户端),再通过客户端负载均衡器(设置的负载均衡策略)获取到某个服务器的具体 ip 和端口,然后再通过 Http 框架请求服务并得到结果,其执行流程如下图所示:
在这里插入图片描述

二、负载均衡设置

以 Nacos 中的 Ribbon 负载均衡设置为例,在配置文件 application.yml 中设置如下配置即可:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡策略

因为 Nacos 中已经内置了 Ribbon,所以在实际项目开发中无需再添加 Ribbon 依赖了,这一点我们在 Nacos 的依赖树中就可以看到,如下图所示:

在这里插入图片描述

Ribbon 默认的负载均衡策略是轮询模式,我们配置 3 个服务提供者的执行结果如下图所示:
在这里插入图片描述

然后,我们再将 Ribbon 负载均衡策略设置为随机模式,配置内容如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置随机负载均衡

重启客户端,执行结果如下图所示:
在这里插入图片描述

三、7种负载均衡策略

3.1.轮询策略

轮询策略:RoundRobinRule,按照一定的顺序依次调用服务实例。比如一共有 3 个服务,第一次调用服务 1,第二次调用服务 2,第三次调用服务3,依次类推。
此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RoundRobinRule #设置负载均衡

3.2.权重策略

权重策略:WeightedResponseTimeRule,根据每个服务提供者的响应时间分配一个权重,响应时间越长,权重越小,被选中的可能性也就越低。
它的实现原理是,刚开始使用轮询策略并开启一个计时器,每一段时间收集一次所有服务提供者的平均响应时间,然后再给每个服务提供者附上一个权重,权重越高被选中的概率也越大。
此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.WeightedResponseTimeRule

3.3.随机策略

随机策略:RandomRule,从服务提供者的列表中随机选择一个服务实例。
此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡

3.4.最小连接数策略

最小连接数策略:BestAvailableRule,也叫最小并发数策略,它是遍历服务提供者列表,选取连接数最小的⼀个服务实例。如果有相同的最小连接数,那么会调用轮询策略进行选取。
此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.BestAvailableRule #设置负载均衡

3.5.重试策略

重试策略:RetryRule,按照轮询策略来获取服务,如果获取的服务实例为 null 或已经失效,则在指定的时间之内不断地进行重试来获取服务,如果超过指定时间依然没获取到服务实例则返回 null。
此策略的配置设置如下:

ribbon:
  ConnectTimeout: 2000 # 请求连接的超时时间
  ReadTimeout: 5000 # 请求处理的超时时间
springcloud-nacos-provider: # nacos 中的服务 id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置负载均衡

3.6.可用性敏感策略

可用敏感性策略:AvailabilityFilteringRule,先过滤掉非健康的服务实例,然后再选择连接数较小的服务实例。
此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.AvailabilityFilteringRule

3.7.区域敏感策略

区域敏感策略:ZoneAvoidanceRule,根据服务所在区域(zone)的性能和服务的可用性来选择服务实例,在没有区域的环境下,该策略和轮询策略类似。
此策略的配置设置如下:

springcloud-nacos-provider: # nacos中的服务id
  ribbon:
    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.ZoneAvoidanceRule

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/796008.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Python中怎么处理字符编码问题

什么是字符编码 字符编码是一种将字符或文本表示为数字序列的方式,以便计算机能够理解和处理它们。由于计算机是基于二进制的,只能处理数字,因此需要将字符转换为对应的数字表示。 在字符编码中,每个字符都有一个唯一的编码值与…

中国古代掌握至高权力的8个女人

在封建社会,基本都是男尊女卑,女人想掌握权力比男人难太多了;但是数千年的历史积累沉淀,总也有几个不甘于现状的女人,一步步逐渐掌握国家的权力,但是能做到登基称帝的,仅有一人。 TOP、1 武则天…

Vue 本地应用-计数器

逻辑是在点击按钮的时候执行&#xff0c;那么要为按钮绑定点击事件&#xff0c;整体语法如下&#xff1a; <!DOCTYPE html> <html> <head><meta charset"UTF-8"><title>首页</title><link href"" type"text/c…

【雕爷学编程】Arduino动手做(95)---GY9960手势传感器模块5

37款传感器与执行器的提法&#xff0c;在网络上广泛流传&#xff0c;其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块&#xff0c;依照实践出真知&#xff08;一定要动手做&#xff09;的理念&#xff0c;以学习和交流为目的&am…

年出货2亿台,只赚“辛苦钱”!又一家代工巨头押宝汽车电子

7月20日&#xff0c;作为国内ODM龙头之一的华勤技术正式启动招股&#xff0c;拟在上交所主板上市。此前&#xff0c;因技术先进性、科创属性不足等问题&#xff0c;该公司终止科创板IPO。 华勤技术成立于2005年&#xff0c;几年后赶上了全球智能手机的黄金时代&#xff0c;招股…

Moonbeam操作指南:使用区块链索引

索引是指组织数据库以快速查找特定数据。在区块链的背景下&#xff0c;如何储存数据至关重要 — — 通过重要状态变化期间发生的事件。 例如&#xff0c;假设您正在构建一个DApp&#xff0c;其中列出了特定NFT集合的全部所有者。您可以仔细查看该NFT系列销售中发出的所有转让事…

ubuntu安装pycharm No JRE found错误

参考资料&#xff1a; 《UBUNTU14.04 PYCHARM安装及NO JDK FOUND解决方法》 问题&#xff1a; 解决办法&#xff1a; 1.去java官网&#xff0c;下载相应的jdk文件&#xff1a; 2.下载完成后在 jdk-8u151-linux-x64.tar.gz 的运行以下命令&#xff1a; sudo mkdir /usr/lib/jv…

平台化设计产品存在的问题

产品&#xff1a;在将业务抽象成产品或组件时&#xff0c;需要考虑多个因素&#xff0c;包括闭环条款、持久性、可重用性等。只有当业务具备这些关键特征时&#xff0c;才能适合抽象成产品。否则&#xff0c;应该考虑将其作为组件的形式存在&#xff0c;或者使用规则引擎来可视…

谈谈你对Synchronized关键字的理解及使用

synchronized关键字最主要的三种使用方式的总结 修饰实例方法&#xff0c;作用于当前对象实例加锁&#xff0c;进入同步代码前要获得当前对象实例的锁修饰静态方法&#xff0c;作用于当前类对象加锁&#xff0c;进入同步代码前要获得当前类对象的锁 。也就是给当前类加锁&…

13 硬链接和软链接

13.1 硬链接和软链接的区别 硬链接&#xff1a;A---B&#xff0c;假设B是A的硬链接&#xff0c;那么只要存在一个&#xff0c;无论删除哪一个&#xff0c;文件都能访问得到。 软链接&#xff1a;类似于快捷方式&#xff0c;删除源文件&#xff0c;快捷方式就访问不了。 13.2 创…

流星特效案例代码

实际效果&#xff0c;代码下载即可使用 流星图片 <!-- 描述: 流星特效 作者: Jack GUO 日期: 20230727 --> <template> <div class"wrap-container sn-container"> <div class"pd-main-left"> <div class"yun-container&…

计算机组成原理问答6

总线 总线是一组能为多个部件分时共享的公共数据信息传送线路。 基本概念 特性:机械特性(尺寸、形状)、电气特性(传输方向、电平有效范围)、功能特性(数据、地址、控制信号)、时间特性(信号和时序的关系) 分类: 按数据传输格式:串行(一个比特一个比特的传输)…

30.文字自动出现

文字自动出现 html部分 <h1 id"text"></h1><div><label for"speed">速度</label><input type"number" name"speed" id"speed" min"1" max"10" value"1" …

力扣热门100题之字母异位词分组【中等】

题目描述 给你一个字符串数组&#xff0c;请你将 字母异位词 组合在一起。可以按任意顺序返回结果列表。 字母异位词 是由重新排列源单词的所有字母得到的一个新单词。 示例 1: 输入: strs [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”] 输出: [[“bat”],[“na…

TimescaleDB压缩功能

注&#xff1a;本文翻译自https://legacy-docs.timescale.com/v1.7/using-timescaledb/compression 从1.5版本开始&#xff0c;TimescaleDB支持本地压缩数据的能力。此功能不需要使用任何特定的文件系统或外部软件&#xff0c;并且正如您将看到的&#xff0c;用户可以很容易地…

RDIFramework.NET 快速开发框架 WebEasyUI版本 V6.0发布

1、RDIFramework.NET EasyUI快速开发框架介绍 RDIFramework.NET&#xff0c;基于.NET的快速信息化系统开发、整合框架&#xff0c;为企业或个人快速开发系统提供了强大的支持&#xff0c;开发人员不需要开发系统的基础功能和公共模块&#xff0c;框架自身提供了强大的函数库和…

文心一言大数据模型-文心千帆大模型平台

官网&#xff1a; 文心千帆大模型平台 (baidu.com) 文心千帆大模型 (baidu.com) 模型优势 1、模型效果优&#xff1a;所需标注数据少&#xff0c;在各场景上的效果处于业界领先水平 2、生成能力强&#xff1a;拥有丰富的AI内容生成&#xff08;AIGC&#xff09;能力 3、应用…

【框架篇】Spring Boot 日志

Spring Boot 日志 一&#xff0c;日志用途 尽管一个项目在没有日志记录的情况下可能能够正常运行&#xff0c;但是日志记录对于我们来说却是至关重要的&#xff0c;它存在以下功能&#xff1a; 1&#xff0c;故障排查和调试&#xff1a;当项目出现异常或者故障时&#xff0c;…

14.python设计模式【模板方法模式】

内容&#xff1a;定义一个操作中的算法的骨架&#xff0c;而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法某特定步骤。 角色&#xff1a; 抽象类&#xff08;AbstractClass&#xff09;&#xff1a;定义抽象的原子操作&#xff08;钩子…

甘特图 Dhtmlx Gantt

介绍 在一些任务计划、日程进度等场景中我们会使用到甘特图&#xff0c;Dhtmlx Gantt 对于甘特图的实现支持很友好&#xff0c;文档API介绍全面&#xff0c;虽然增强版的收费&#xff0c;但免费版的足以够用。 官网&#xff1a;https://docs.dhtmlx.com/gantt/ 安装dhtml gannt…