如何选择适合业务的负载均衡策略?

在分布式系统的高可用设计中,负载均衡非常关键,我们知道,分布式系统的特性之一就是支持快速扩展,那么集群扩展之后,服务请求如何从服务器列表中选择合适的一台呢?这就需要依赖负载均衡策略。

负载均衡在处理高并发,缓解网络压力,以及支持扩容等方面非常关键,在不同的应用场景下,可以选择不同的负载均衡,下面一起来看一下负载均衡相关的知识。

负载均衡的应用

负载均衡是指如何将网络请求派发到集群中的一个或多个节点上处理,一般来说,传统的负载均衡可以分为硬件负载均衡和软件负载均衡。

  • 硬件负载均衡,就是通过专门的硬件来实现负载均衡,比如常见的 F5 设备。

  • 软件负载均衡则是通过负载均衡软件实现,常见的就是 Nginx。

无论是硬件负载均衡还是软件负载均衡,实现原理都是一样的,在负载均衡中会记录一个可用的服务列表,负载均衡服务器会通过心跳机制来确认服务可用性,在网络请求到达后,F5 或者 Nginx 等负载均衡设备,会按照不同的策略,进行服务器的路由,这就是负载均衡的流程。

负载均衡的应用非常广,这一课时我们主要关注在分布式系统的请求调用,服务分发中的负载均衡。

常见的复杂均衡策略

一般而言,有以下几种常见的负载均衡策略。

轮询策略

轮询策略是最容易想到也是应用最广泛的负载均衡策略。轮询策略会顺序地从服务器列表中选择一个节点,请求会均匀地落在各个服务器上。轮询适合各个节点性能接近,并且没有状态的情况,但是在实际开发中,不同节点之间性能往往很难相同,这时候就可以应用另一种加权轮询策略

加权轮询

加权轮询是对轮询策略的优化,给每个节点添加不同的权重。举个简单的例子,在实际开发中通常使用数组的数据结构来实现轮询,比如现在我有 A、B、C 三个节点,就可以在数组中添加 1、2、3 的数据,分别对应三个节点。现在我进行一个加权调整,让 1、2、3 对应 A,4、5 对应 B、C,这时候继续进行轮询,不同节点的权重就有变化了。

随机策略

随机策略和轮询相似,从列表中随机的取一个。我们都学过概率论的课程,真正的随机是很难实现的,所以如果访问量不是很大,最好不要应用随机策略,可能会导致请求不均匀。

最小响应时间

这个主要是在一些对请求延时敏感的场景中,在进行路由时,会优先发送给响应时间最小的节点。

最小并发数策略

你可以对比最小响应时间,最小并发策略会记录当前时刻每个节点正在处理的事务数,在路由时选择并发最小的节点。最小并发策略可以比较好地反应服务器运行情况,适用于对系统负载较为敏感的场景。

除了这些,还有哈希策略等,另外,在第 35 课时中我们提到过一致性哈希,其实一致性哈希也是一种负载均衡策略,一致性哈希经常应用在数据服务的路由中。

负载均衡如何实现

在分布式服务调用中,根据负载均衡实现的位置不同,可以分为服务端负载均衡和客户端负载均衡。

  • 在服务器端负载均衡中,请求先发送到负载均衡服务器,然后通过负载均衡算法,在众多可用的服务器之中选择一个来处理请求。

  • 在客户端负载均衡中,不需要额外的负载均衡软件,客户端自己维护服务器地址列表,自己选择请求的地址,通过负载均衡算法将请求发送至该服务器。

相信你已经看到了,这两种负载均衡,最大的区别就是服务器列表维护的位置。

下面我们来看一下,服务端负载均衡和客户端负载均衡如何实现呢?

在分布式服务调用中,服务端负载均衡常用的组件是 Spring Cloud Eureka,如果你选择了 Dubbo 作为中间件,那么可以应用 Dubbo 内置的路由策略。

在 Spring Cloud 中开启负载均衡的方法很简单,有一个专门的注解 @LoadBalanced 注解,配置这个注解之后,客户端在发起请求的时候会选择一个服务端,向该服务端发起请求,实现负载均衡。另外一种客户端负载均衡,也有对应的实现,典型的是 Spring Cloud Ribbon。

Ribbon 实际上是一个实现了 HTTP 的网络客户端,内置负载均衡工具、支持多种容错等。

我们上面提到的几种策略,在 Ribbon 中都有提供,包括 RoundRobinRule 轮询策略、RandomRule 随机策略、BestAvailableRule 最大可用策略、WeightedResponseTimeRule 带有加权的轮询策略等。

如果你的应用需要比较复杂的负载均衡场景,推荐应用 Ribbon,本课时的目的是讲解负载均衡被实现的原理,你可以到 Ribbon 的官方仓库,去了解相关的应用。

总结

以上内容我和大家一起讨论了负载均衡的应用场景、常见负载均衡策略,以及服务端和客户端负载均衡实现组件。

现在我们来思考一个问题,为什么说分布式高可用设计中,负载均衡很关键呢?我们都知道,在分布式场景下,特别是微服务拆分后,不同业务系统之间是解耦的,负载均衡策略,也就是描述了各个应用之间如何联系。

我们用订单场景来举例子,下单时依赖商品服务,假设我们选择的是轮询策略,当某台商品服务器出现网络故障、服务超时,此时下单就会受影响,如果改为最小可用时间策略,订单服务就会自动进行故障转移,不去请求超时的节点,实现高可用。

在你的工作中,应用过哪些负载均衡策略呢,又是如何进行配置的,欢迎留言进行分享~

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

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

相关文章

免 费 搭 建 小程序商城,打造多商家入驻的b2b2c、o2o、直播带货商城

在数字化时代,电商行业正经历着前所未有的变革。鸿鹄云商的saas云平台以其独特的架构和先进的理念,为电商行业带来了全新的商业模式和营销策略。该平台涉及多个平台端,包括平台管理、商家端、买家平台、微服务平台等,涵盖了pc端、…

项目执行常用的ChatGPT通用提示词模板

项目启动与准备:如何确保项目按计划启动,并为项目执行做好充分准备? 任务分配与执行:如何合理分配任务,确保项目团队成员明确各自的责任和目标? 进度监控与调整:如何实时监控项目进度&#xf…

Python 数据分析 Matplotlib篇 plt.rcParams 字典(第5讲)

Python 数据分析 Matplotlib篇 plt.rcParams字典(第5讲)         🍹博主 侯小啾 感谢您的支持与信赖。☀️ 🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ🌹꧔ꦿ�…

17.仿简道云公式函数实战-数学函数-ABS

1. ABS函数 ABS 函数可用于返回数字的绝对值 2. 函数用法 ABS(number) 3. 函数示例 如,ABS(-12)和ABS(12)的返回结果均为 12。 4. 代码实战 首先我们在function包下创建math包,在math包下创建AbsFunction类,代码如下: pac…

Python是什么?

Python是一种高级编程语言,具有简单易学、代码可读性强、开发效率高等特点。它采用解释型执行方式,可以跨平台运行,并且拥有丰富的第三方库和框架支持,被广泛应用于Web开发、数据分析、人工智能等领域。 文章目录 一、Python的历…

定位 CPU 高负载 Java 线程

常用命令 # 按照 CPU 使用率排序输出进程信息 ps -eo pid,ppid,%cpu,%mem,cmd --sort-%cpu# 监控对应 pid 进程下的所有线程按照 CPU 排序 top -Hp "$pid" -o %CPU # jstack 输出 JVM 堆栈信息 jstack $pid演示事例 查看高负载 Java 进程获取到对应 pid $ ps -eo …

免费福利马上截止!深圳的户外小伙伴别错过!COSP2024体育展来了

COSP2024户外博览会 展会时间:2024年3月14-16日 展会地址:深圳福田会展中心 户外运动爱好者不可错过! COSP2024户外博览会不仅可以逛展 看各种露营装备、户外器材 还有各种沙龙、峰会活动 就在明年开年,阳春三月天&#xf…

【办公技巧】ppt如何加密只能看不能修改?

大家是否想要给PPT文件设置加密,让ppt文件变为只能查看不能修改的状态?今天给大家分享给PPT文件设置带有密码的只读模式(修改权限)。 方法如下: PPT文件之后,将PPT文件进行另存为操作,但是在选…

【反射1】——Java基础(韩顺平讲解)

一个需求,引出反射 | 完整的反射使用流程: 在不修改源码的情况下,来控制程序,也符合设计模式中的opc原则(开闭原则:不修改源码,扩容功能) 1、创建配置文件:re.properties classfullpathcom.r…

SATA和M.2接口的异同点

SATA和M.2接口是连接存储设备的两种常见接口,它们在物理尺寸、传输速度、线缆和接头以及适用设备类型等方面有着显著的异同点。 物理尺寸 SATA接口通常用于2.5英寸硬盘、3.5英寸硬盘等传统机械硬盘以及SSD,而M.2接口则是一种较为新型的接口标准&#xff…

装饰 Web3 项目的用户交互界面(Web3项目二实战之四)

用户交互界面是Web3项目必不可少的,毕竟,Web3项目最终是面向用户的,所以,Web3项目总得需要一个优美的UI界面,已达到用户在视觉上精彩盛宴。 诚然,一个Web3项目若到了用户交互界面,大体上,这个Web3项目也将告一段落了。 没错,Web3第二个项目,也将终结于本篇,顺势拉开…

线下终端门店调研包含哪些内容

品牌渠道一般分为线上和线下,线上的价格、促销信息、店铺优惠机制等都可以通过登录查看,但是线下门店的数据则需要进店巡查,否则无法得到真实的店铺销售数据,当然也有品牌是靠线下的业务团队报备机制获得这些信息,但是…

前端常用的Vscode插件

前端常用的Vscode插件🔖 文章目录 前端常用的Vscode插件🔖1. Chinese (Simplified) (简体中文) Language Pack for Visual Studio Code -- Vscode中文插件2. Code Runner -- 快速运⾏调试代码3. Live Server -- 实时重新加载本地开发服务器4. Image prev…

uni-app之HelloWorld实现

锋哥原创的uni-app视频教程: 2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中..._哔哩哔哩_bilibili2023版uniapp从入门到上天视频教程(Java后端无废话版),火爆更新中...共计23条视频,包括:第1讲 uni…

JAVA版的鸿鹄云商B2B2C:多商家入驻直播商城系统特性解析 商城免 费搭建

鸿鹄云商 b2b2c产品概述 【b2b2c平台】,以传统电商行业为基石,鸿鹄云商支持“商家入驻平台自营”多运营模式,积极打造“全新市场,全新 模式”企业级b2b2c电商平台,致力干助力各行/互联网创业腾飞并获取更多的收益。从消…

Swift 检测 iCloud状态

Show me the code: func isICloudContainerAvailable() -> Bool {if let _ FileManager.default.ubiquityIdentityToken {return true} else {return false} }推荐一下刚上线的 App 熊猫小账本,里面有用到这篇博客讲的内容 熊猫小账本 一个简洁的记账 App&…

006.HCIA 路由

1、设备管理 用户视图 <xxxx> 系统视图 [xxxx] 接口视图 [xxxx-G] 协议视图 a. 视图切换 用户视图 -> 系统视图 系统视图 -> 接口视图 当前视图 -> 上一层视图 当前视图 -> 用户视图 system-view interface g0/0/0 quit Ctrl Z b. 系统视图命令…

人工智能:预测房价模型的构建与应用

摘要&#xff1a; 人工智能&#xff08;Artificial Intelligence&#xff0c;AI&#xff09;是一种模拟人类智能思维的技术。“预测房价”是AI在房地产领域的重要应用之一。本文将介绍如何使用Python构建一个预测房价的人工智能模型&#xff0c;并对其进行说明和应用。 引言 人…

JavaOOP篇----第十六篇

系列文章目录 文章目录 系列文章目录前言一、a=a+b与a+=b有什么区别吗?二、final、finalize()、finally三、JDBC操作的步骤四、在使用jdbc的时候,如何防止出现sql注入的问题。前言 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击…

tinymce自定义工具栏

tinymce自定义工具栏 话不多说直接上代码&#xff0c;此处添加 imgs 的工具为例 initTinymce() {const _this thisreturn {language_url: https://cdn.jsdelivr.net/npm/tinymce-i18n20.12.25/langs5/zh_CN.js,language: zh_CN,body_class: panel-body ,object_resizing: fal…