【微服务-Ribbon】什么是负载均衡?微服务中负载均衡有哪些策略呢?

news2024/11/26 12:46:18

前面几篇文章,我们了解了一下Nacos的单机部署、集群部署以及微服务接入Nacos的步骤。从本篇开始,我们来看一下微服务第二个通用组件-负载均衡(Ribbon)。

1、Ribbon负载均衡器

负载均衡顾名思义,是指通过软件或者硬件措施。将来自客户端的请求按照某种策略分配到集群的每一个节点上,保证提供服务的这些节点 CPU、内存等设备负载情况大致在一条水平线,避免由于某个节点负载过高产生宕机,再将这些处理压力传递到其他节点上产生系统性崩溃。

例如:我们有个微服务是做数据推送的,一共部署了3个节点,如果没有负载均衡策略来分摊推送请求,那么就会逮住一台服务器拼命推送,如果请求量巨大,把第一台服务器搞宕机了,那么海量的请求就会去第二台服务器,把第二台服务器也整宕机了,请求继续去嚯嚯第三台服务器,第三台也毫无疑问的就义了。那么我们数据推送功能就彻底废了。。。数据推送下游服务就没事儿可干了,但业务也就中断了,P1级别的事故就此产生。。。大概就这么个道理。

微服务宕机示意图

由此可见,微服务间的负载均衡在海量请求时,发挥的作用还是非常大的。那么负载均衡在实现方式上分类,可以分为服务端负载均衡客户端负载均衡

(1)服务端负载均衡

服务端负载均衡,就是指在架构中搭建专门的负载均衡器,由负载均衡器持有后端服务节点的信息,客户端发送来的请求会由负载均衡器分发给后端服务的某个节点,进而实现服务的负载均衡。目前常用的负载均衡软硬件有:F5、Nginx、Haproxy。

(2)客户端负载均衡

客户端负载均衡,是指在架构中不再部署额外的负载均衡器,在每个服务消费者内部持有客户端负载均衡器,由内置的负载均衡策略决定向哪个服务提供者发起请求。

说到这,我们的主角登场了,Netfilx Ribbon 是 Netflix 公司开源的一个负载均衡组件,是属于客户端负载均衡器。目前Ribbon 已被 Spring Cloud 官方技术生态整合,运行时以 SDK 形式内嵌到每一个微服务实例中,为微服务间通信提供负载均衡与高可用支持。

例如:我们有个订单服务在查询订单时需要附带对应商品详情,这就意味着订单服务依赖于商品服务,两者必然产生服务间通信,执行过程如下图所示:

1、订单服务与商品服务实例在启动时会向Nacos注册信息。

2、订单服务向商品服务发起查询前,Ribbon会向Nacos查询商品服务的可用实例列表。

3、Ribbon根据设置的负载均衡策略从商品服务列表中选择一个实例。

4、订单服务根据Ribbon选择的实例发起请求,完成RESTful通信。

负载均衡的作用大概说完了,那么我们上面一直有提到一个叫负载策略的东西,它到底是啥呢? 具体有哪些策略呢? 我们接着看!

2、负载均衡策略

Ribbon中内置有以下几种策略:

(1)RoundRobinRule(轮询)

这是Ribbon的默认策略。默认超过10次获取到的服务(server)都不可用,会返回一个空的server。

(2)RandomRule(随机)

如果随机到的server为null或不可用,会不停的循环选取。

(3)RetryRule(重试)

⼀定时限内循环重试。默认继承 RoundRobinRule,也⽀持自定义注⼊,RetryRule 会在每次选取之后,对选取的 server 进⾏判断,是否为 null,是否 alive,并且在 500ms 内会不停地选取判断。而 RoundRobinRule 失效的策略是超过 10 次,RandomRule 没有失效时间的概念,只要 serverList 没都挂。

(4)BestAvailableRule(最小连接数)

Ribbon通过遍历 serverList,选取出可⽤的且连接数最小的⼀个 server。那么会调用 RoundRobinRule 重新选取。

(5)AvailabilityFilteringRule(可用过滤)

可用过滤策略,扩展了轮询策略,会先通过默认的轮询选取⼀个 server,再去判断该 server 是否超时可用、当前连接数是否超限,都成功再返回。

(6)ZoneAvoidanceRule(区域权衡)

区域权衡策略。扩展了轮询策略,除了过滤超时和链接数过多的 server,还会过滤掉不符合要求的 zone 区域⾥⾯的所有节点,始终保证在⼀个区域/机房内的服务实例进行轮询。

3、如何在微服务中更改负载均衡策略

要更改微服务通信时采用的负载均衡策略也很简单,在 application.yml 中采用下面格式书写即可。

provider-service: #服务提供者的微服务id

  ribbon:

    NFLoadBalancerRuleClassName: com.netflix.loadbalancer.RandomRule #设置对应的负载均衡类

具体的负载均衡类可以在 com.netflix.loadbalancer 包下找到:

Ribbon介绍到这里就结束了,下一篇我们来看一下如何使用Ribbon和RestTemplate实现服务间的高可用。欢迎继续关注。

欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

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

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

相关文章

javaWeb智能医疗管理系统

简介 在当今快节奏的生活中,智能医疗系统的崛起为医疗行业带来了一场革命性的变革。基于JavaWeb技术开发的智能医疗管理系统,不仅为医疗机构提供了高效、精准的管理工具,也为患者提供了更便捷、更个性化的医疗服务。本文将介绍一个基于SSM&a…

LInux shell编程之基础语法

目录 1、shell概述 1.1、查看Linux 提供的 Shell 解析器 1.2、bash 和 sh 的关系 1.3、查看系统(centos)默认使用的解释器 2、脚本的基础使用 2.1、脚本的格式 2.2、脚本的执行方式 方式一:采用 bash / sh 脚本的相对路径或绝对路径…

【LeetCode刷题记录】160. 相交链表

160 相交链表 给你两个单链表的头节点 headA 和 headB ,请你找出并返回两个单链表相交的起始节点。如果两个链表不存在相交节点,返回 null 。 图示两个链表在节点 c1 开始相交: 题目数据 保证 整个链式结构中不存在环。 注意,函…

沂水六景记 ——齐源堂主王志强撰文

沂水六景记 ——齐源堂主王志强 明清时期,非常流行“八景”。所谓“八景”,就是在本地众多的风景名胜之中,选定八个最有代表性的美景,分别取上悦耳动听的名字,然后分别题诗。这种给风景选美的做法,是文人…

ASP.NET基于TCP协议的简单即时通信软件的设计与实现

摘 要 即时通信(Instant Message),由于其具有实时性、跨平台性、成本低、效率高等优点而受到广泛的使用。设计并实现一个能够处理多用户进行实时、安全的即时通信系统具有较强的现实意义。即时通信的底层通信是通过SOCKET套接字接口实现的。当前的主流UNIX系统和微…

2W,3KVDC隔离 定电压输入,稳压单、双路输出DC-DC模块电源——TPI-2W 系列

TPI-2W系列产品是专门针对PCB上需要与输入电源隔离的电源应用场合而设计的。该产品适用于:1)输入电源的电压变化≤5%;2)输入输出之间要求隔离电压≥3000VDC;3)对输出电压稳定和输出纹波噪声要求高.

linux 安装openjdk-1.8

安装命令 yum install java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64查看安装路径 find / -name java 默认的安装路径 /usr/lib/jvm 查看到jre 以及java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64 配置环境变量 vim /etc/profile 添加的内容 export JAVA_HOME/usr/li…

网络工程师----第三天

HDLC帧格式及控制手段: ipv4到ipv6的过渡技术: 1、双栈技术:主机或路由器同时装有IPV4 和 IPV6两个协议栈,因此,主机既能和IPV4通信,也能和IPv6网络通信。IPv6和IPv4是功能相近的网络层协议,两者…

爱普生计时设备AUTOMOTIVE RA8900CE DTCXO RTC

主要特点出场已校准带有DTCXO的RTC,并且内部集成晶体单元高精度: 3.4 ppm 40 to 85 C(9 s/月.)时钟输出:1 Hz.1024 Hz.32.768 kHzI 2 C Interface: Fast mode (400 kHz)The l2C-Bus is a trademark ofNXP Semiconductors供电电压: 2.5-5.5 V(main),1.6-5.5 V(备份电…

SQL优化——统计信息

文章目录 1、统计信息1.1、表的统计信息1.2、列的统计信息1.3、索引的统计信息 2、统计信息重要参数设置3、检查统计信息是否过期4、扩展统计信息5、动态采样6、定制统计信息收集策略 只有大表才会产生性能问题,那么怎么才能让优化器知道某个表多大呢?这…

果园系统养殖游戏喂养偷菜种植浇水养成小程序

装扮 通过购买装扮场景切换不同的农场风格 土地升级 通过特定的材料对土地和房屋进行升级 日志 记录道具的使用数量及金币农作物的收入情况 幸运转盘 可用金币进行抽奖 宝箱开启 获得宝箱后可以通过金币开启 每日签到 每日签到获得奖励 系统公告 可以第一时间知道游戏的更新和…

Linux进阶--文本处理grep、sed、awk命令

目录 一、grep (1)用文件查找 二、正则表达式 三、sed命令 四、awk命令 grep、sed、awk可以称作linux里的三驾马车 一、grep grep:一种强大的文本搜索工具,它能使用正则表达式匹配模式搜 索文本,并把匹配的行打…

智能电视/盒子长文字输入困难?手把手教您解决这个难题!(电视盒子跨屏输入/打字,亲测有效!)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 解决方案 📒📝 方法一📝 方法二🎈 获取方式 🎈⚓️ 相关链接 ⚓️📖 介绍 📖 在使用智能电视/电视盒子的时候,会遇到这样一个场景:需要输入一个很长的网址,或者是想要粘贴一段很长的文字。如何使用遥控器要完成…

【C语言】qsort()函数排序及其模拟实现,万物皆可排!

🔥博客主页🔥:【 坊钰_CSDN博客 】 欢迎各位点赞👍评论✍收藏⭐ 目录 1. 函数介绍 2. qsort举例排列整型变量 3. qsort举例排列结构型变量 3.1 按名字排序 3.1.1 srtcmp函数 3.2 按年龄排序 4. qsort函数模拟实现(采用冒泡的…

python怎么连接oracle

一:弄清版本,最重要!!! 首先安装配置时,必须把握一个点,就是版本一致!包括:系统版本,python版本,oracle客户端的版本,cx_Oracle的版本…

工作流 jbpm概述

文章目录 1 工作流概述2 jBPM概述3 jBPM开发环境搭建及其配置3.1 准备工作3.2 搭建jBPM开发环境3.3 加入jar包 总结 1 工作流概述 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使…

STM32 CAN过滤器细节

STM32 CAN过滤器细节 简介 每组筛选器包含2个32位的寄存器,分别为CAN_FxR1和CAN_FxR2,它们用来存储要筛选的ID或掩码 四种模式 模式说明32位掩码模式CAN_FxR1存储ID, CAN_FxR2存储哪个位必须要与CAN_FxR1中的ID一致 , 2个寄存器…

Linux网络配置和操作命令

网络配置命令 Linux系统中最常用的网络配置命令包括 ifconfig route 其中 ifconfig 用来查看和配置网络接口 通常是网卡 信息 包括网络接口设备的 IP 地址 掩码等 route 用来管理 Linux系统内核中的路由表 它最大的用途就是用来设定静态的路由表项 通常是在系统用 ifconfig 配…

内置管线升级到SBP,如何复用之前打包的AssetBundle

1)内置管线升级到SBP,如何复用之前打包的AssetBundle 2)安卓真机,在Unity 2021.3.31版本下Buffer数据异常 3)URP里CullResults.CreateSharedRendererScene下面的消耗 4)移动端是否支持曲面细分着色 这是第3…

Element——组件

element官网 https://element.eleme.cn/#/zh-CN/component/layout vscode格式化快捷键&#xff1a;shiftaltf table表格 <template><el-table:data"tableData"style"width: 100%"><el-table-columnprop"date"label"日期…