当前位置: 首页 > article >正文

系统设计:负载均衡器

原文towardsdatascience.com/system-design-load-balancer-9a3582176f9b简介大型分布式应用每秒处理超过数千个请求。在某个时刻处理单个机器上的请求变得不再可能。这就是为什么软件工程师关心水平扩展即整个系统持续地组织在多个服务器上。在这种配置中每个服务器只处理所有请求的一部分基于其容量、性能和几个其他因素。服务器之间的请求可以以不同的方式分配。在这篇文章中我们将研究最流行的策略。顺便说一下不可能概述最佳策略每种策略都有其自身的特性应根据系统配置来选择。负载均衡器的使用负载均衡器可以出现在不同的应用层。例如大多数 Web 应用由前端、后端和数据库层组成。因此可以在不同的应用部分使用多个负载均衡器来优化请求路由在用户客户端和前端服务器之间在前端和后端服务器之间在后端服务器和数据库之间。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c4a597a5b4b86886fc7887201729c8d5.png负载均衡器可以出现在不同的架构层。尽管在不同的层上存在负载均衡器但相同的平衡策略可以应用于所有这些层。健康检查在由多个服务器组成的系统中任何服务器在任何时刻都可能过载、失去网络连接甚至崩溃。为了跟踪它们的活跃状态必须由一个独立的监控服务定期执行常规的健康检查。此服务定期向所有机器发送请求并分析它们的响应。大多数时候监控系统检查返回响应的速度以及机器当前正在处理的活跃任务或连接的数量。如果一个机器在给定的时间限制内没有提供答案那么监控服务可以启动一个触发器或程序以确保机器尽快恢复正常功能状态。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c9a66d5badf08e60dbed014a30056ef4.png健康检查示意图监控系统发送请求以检查服务器的响应时间。由于第三个服务器没有返回响应监控系统触发一个事件来重启它。所有接收到的统计数据信息都发送到负载均衡器以调整其参数。通过分析这些传入的监控统计数据负载均衡器可以调整其算法以加速平均请求处理时间。这一方面本质上与动态平衡算法在下面的章节中讨论相关这些算法始终依赖于系统中的活跃机器状态。静态与动态算法平衡算法可以分为两组静态和动态静态算法是简单的平衡策略仅依赖于系统预先定义的静态参数。最常考虑的参数是 CPU、内存限制、超时、连接限制等。尽管简单静态策略在处理机器性能特征快速变化的情况时并不稳健。因此静态算法更适合确定性场景在这种情况下系统在一段时间内接收到的请求比例相等需要相对相同数量的资源来处理。另一方面动态算法依赖于系统的当前状态。监控的统计数据会被考虑并用于定期调整任务分配。通过在实时拥有更多变量和信息动态算法可以使用高级技术在任何给定情况下产生更均匀的任务分配。然而定期的健康检查需要处理时间可能会影响系统的整体性能。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/357bb46f880617218ed7c895bf3e4a46.png静态与动态平衡算法的比较平衡策略在本节中我们将发现最流行的平衡机制及其变体。0. 随机对于每个新的请求随机方法会随机选择处理该请求的服务器。尽管算法简单但在系统服务器共享相似的性能参数且从未过载的情况下随机算法表现良好。然而在许多大型应用中服务器通常承载着大量的请求。这就是为什么应该考虑其他平衡方法。1A. 轮询轮询可以说是随机方法之后最简单的现有平衡技术。每个请求都是根据其在请求序列中的绝对位置发送到服务器的请求 1 分配给了服务器 1请求 2 分配给了服务器 2…请求 k 分配给了服务器 k。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1701b0e7a1df757948b54d92d0f404bc.png轮询示例。所有服务器按顺序处理请求。当服务器数量达到最大值时轮询算法将从第一个服务器重新开始。1B. 加权轮询轮询有一个基于性能能力如 CPU 和其他系统特性的加权变体每个服务器都被分配了一个权重。然后每个服务器接收与其权重成比例的请求数量与其他服务器相比。这种方法确保请求根据系统中每个服务器的独特处理能力均匀分布。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7c346e5d023efb5857690d4e856379e3.png加权轮询示例。在配置阶段所有服务器都被分配了一个与其性能能力例如 CPU相对应的权重。之后每个服务器都会接收到与其权重成比例的请求数量。1C. 粘性轮询在粘性轮询版本中特定客户端的第一个请求根据正常的轮询规则发送到服务器。然而如果客户端在特定时间段内或会话生命周期内再次发起请求那么请求将发送到之前相同的服务器。这确保了来自任何客户端的所有请求都由同一服务器一致处理。这种方法的优点是与同一客户端的请求相关的所有信息都只存储在单个服务器上。想象一下一个新的请求正在到来它需要从特定客户端的先前请求中获取信息。使用粘性轮询可以从单个服务器快速访问所需数据如果从多个服务器检索相同数据这将快得多。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/e705109b56546849f0711f6b890f6a9d.png粘性轮询示例。每个客户端的会话都被映射到特定的服务器并且所有请求都发送到该服务器。2A. 最少连接最少连接是一种动态方法其中当前请求被发送到当前处理最少活跃连接或请求的服务器。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/8d8819c0ce0bbd24a3754b8222d7e9df.png最少连接示例。具有最少活跃连接的服务器接收当前请求。2B. 加权最少连接最少连接数的加权版本的工作方式与原始版本相同只是每个服务器都与一个权重相关联。为了决定哪个服务器应该处理当前请求将每个服务器的活跃连接数除以其权重然后处理请求的服务器是结果值最低的服务器。3. 最小响应时间与考虑具有最少活跃连接数的服务器不同这种平衡算法选择在过去一定时间内平均响应时间最低的服务器。有时这种方法与最少活跃连接数结合使用如果只有一个服务器具有最少的连接数那么它将处理当前请求如果有多个服务器的连接数相同那么将选择其中响应时间最低的服务器来处理请求。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/515281fbaf2fcfd4411426ad9b90679a.png最少连接数与最小响应时间组合的示例。具有最少连接数的服务器接收当前请求。如果相等则选择响应时间最低的服务器。4A. IP 哈希负载均衡器有时会根据各种客户端属性做出决策以确保所有之前的请求和数据都只存储在一个服务器上。这个局部性方面允许在系统中快速访问本地用户数据而无需向其他服务器发送额外的请求来检索数据。实现这一目标的一种方法是将客户端 IP 地址纳入哈希函数该函数将给定的 IP 地址与一个可用的服务器关联起来。理想情况下选定的哈希函数必须将所有传入请求均匀地分布在所有服务器上。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/27075d4255fd851fe26c1b721c2548db.pngIP 哈希的示例。请求根据客户端 IP 地址计算出的哈希值路由到服务器。实际上IP 哈希的局部性方面与一致性哈希很好地协同工作这****保证了用户的数据在任何时刻都可靠地存储在一个地方即使在服务器关闭的情况下。系统设计一致性哈希4B. URL 哈希URL 哈希与 IP 哈希类似只是请求的 URL 被哈希而不是 IP 地址。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/668c05a50cee093dd8aeb0934e011b66.pngURL 哈希示例。请求根据执行请求的域名计算出的哈希值路由到服务器。当我们希望在单个服务器上存储特定类别或领域的信息且与请求客户端无关时这种方法很有用。例如如果一个系统经常汇总所有用户收到的支付信息那么定义一组所有可能的支付请求并将它们始终哈希到单个服务器上将是高效的。5. 组合通过利用所有先前方法的信息可以结合它们以推导出针对每个系统独特需求的新方法。例如可以实施一种投票策略其中将n个独立平衡策略的决策汇总。最频繁出现的决策被选为最终答案以确定哪个服务器应该处理当前请求。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/ac699568f3c8296831f0363d73ff8330.png投票策略示例。服务器 4 被各种负载均衡器选为最常选择的服务器。重要的是不要使事情过于复杂因为更复杂的策略设计需要额外的计算资源。结论负载均衡是系统设计中的关键主题尤其是在高负载应用中。在本文中我们探讨了各种静态和动态平衡算法。这些算法在复杂性和做出最佳决策所需的计算资源之间提供了权衡。最终没有单一的平衡算法可以在所有场景中都是最佳选择。适当的选择取决于多个因素如系统配置设置、需求和传入请求的特征。资源负载均衡计算| 维基百科除非另有说明所有图像均为作者所有。

相关文章:

系统设计:负载均衡器

原文:towardsdatascience.com/system-design-load-balancer-9a3582176f9b 简介 大型分布式应用每秒处理超过数千个请求。在某个时刻,处理单个机器上的请求变得不再可能。这就是为什么软件工程师关心水平扩展,即整个系统持续地组织在多个服务…...

系统设计:一致性哈希

原文:towardsdatascience.com/system-design-consistent-hashing-43ddf48d2d32 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/25fd590876caa1d6c711fa521ea11f98.png 简介 我们生活在一个每天都会大量生成数据的世界上。在…...

系统设计:布隆过滤器

原文:towardsdatascience.com/system-design-bloom-filter-a2e19dcd4810 https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/350b777cef6f9090c441e88a64b5066c.png 简介 哈希表是最广为人知和使用的几种数据结构之一。通过明智…...

Ro_一键获取E盾验证后台

链接:https://pan.quark.cn/s/a876e818b593软件来源网络,安全性自测。需要自己查找辅助IP...

Flutter 路由导航完全指南

Flutter 路由导航完全指南 引言 路由导航是任何移动应用的核心功能之一。Flutter 提供了强大而灵活的路由系统,支持多种导航方式。本文将深入探讨 Flutter 路由导航的各种技巧和最佳实践。 基础导航 Navigator.push Navigator.push(context,MaterialPageRoute(…...

Flutter 性能优化完全指南

Flutter 性能优化完全指南 引言 性能优化是移动应用开发中至关重要的一环。Flutter 虽然天生具有较好的性能表现,但在复杂应用中仍需要开发者进行针对性优化。本文将深入探讨 Flutter 性能优化的各种技巧和最佳实践。 性能问题定位 使用 DevTools // 在 pubspec.yam…...

CSS 渐变高级技巧完全指南

CSS 渐变高级技巧完全指南 引言 CSS 渐变是现代 Web 设计中不可或缺的视觉效果,它可以创建平滑的颜色过渡,为网页增添丰富的视觉层次。本文将深入探讨 CSS 渐变的各种类型和高级技巧。 基础语法回顾 线性渐变 .linear-gradient {background: linear-grad…...

Flutter 状态管理架构设计完全指南

Flutter 状态管理架构设计完全指南 引言 状态管理是 Flutter 应用开发的核心问题之一。一个好的状态管理架构能够使代码更加清晰、可维护和可测试。本文将深入探讨 Flutter 状态管理的各种架构模式和最佳实践。 状态管理概述 Flutter 中的状态可以分为以下几类: 局部…...

从《飞机大战》项目倒推环境搭建:手把手教你为Python 3.8+配置Pygame开发环境(Windows版)

从《飞机大战》项目倒推环境搭建:手把手教你为Python 3.8配置Pygame开发环境(Windows版) 当你决定用Python开发一个《飞机大战》游戏时,第一步不是急着写代码,而是搭建一个能跑起来的环境。这就像盖房子前要先打地基—…...

如何永久保存微信聊天记录:一个开源工具的全方位解决方案

如何永久保存微信聊天记录:一个开源工具的全方位解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/We…...

B样条曲线入门:从‘节点向量’这个硬骨头啃起,理解平滑背后的数学

B样条曲线入门:从‘节点向量’这个硬骨头啃起,理解平滑背后的数学 当你第一次看到B样条曲线时,可能会被那些复杂的数学公式和术语吓到。但别担心,我们今天要聊的"节点向量"(Knot Vector)概念&…...

别再只用XGBoost了!LightGBM实战:用直方图算法和Leaf-wise策略,5分钟搞定海量数据建模

LightGBM实战:5个关键技巧让海量数据建模效率提升10倍 当你的数据集从GB级别跃升到TB级别时,XGBoost的训练时间可能从几小时延长到几天。上周我们团队处理一个包含3亿条用户行为记录的数据集时,原本需要8小时的XGBoost训练,切换到…...

手把手教你用GD32F407和LWIP实现一个简易网络调试助手(UDP/TCP双模)

基于GD32F407与LWIP的智能网络调试工具开发实战 在嵌入式设备网络化需求日益增长的今天,如何快速构建一个稳定可靠的网络通信调试工具成为许多工程师面临的挑战。GD32F407作为国产MCU的优秀代表,搭配轻量级TCP/IP协议栈LWIP,能够为各类工业控…...

终极兼容方案:让老旧游戏手柄在现代游戏中重获新生

终极兼容方案:让老旧游戏手柄在现代游戏中重获新生 【免费下载链接】XOutput DirectInput to XInput wrapper 项目地址: https://gitcode.com/gh_mirrors/xo/XOutput 还在为那些功能完好却被现代游戏抛弃的经典游戏手柄感到惋惜吗?我们深知那种无…...

如何快速部署Windows系统:MediaCreationTool.bat终极实战指南

如何快速部署Windows系统:MediaCreationTool.bat终极实战指南 【免费下载链接】MediaCreationTool.bat Universal MCT wrapper script for all Windows 10/11 versions from 1507 to 21H2! 项目地址: https://gitcode.com/gh_mirrors/me/MediaCreationTool.bat …...

告别乱码困扰:GBKtoUTF-8编码转换工具全方位指南

告别乱码困扰:GBKtoUTF-8编码转换工具全方位指南 【免费下载链接】GBKtoUTF-8 To transcode text files from GBK to UTF-8 项目地址: https://gitcode.com/gh_mirrors/gb/GBKtoUTF-8 你是否曾遇到过这样的场景?从旧系统导出的文档在Mac上打开变成…...

OpenHarmony.Avalonia 归档事件对中国自主软件生态的影响--信任的坍塌与生态的异化

026年5月8日,中国开源技术社区发生了一起具有里程碑意义的争议性事件:由开发者“布布”(Bubu)主导的 OpenHarmony-NET/OpenHarmony.Avalonia 项目正式宣告停止更新并进入归档状态。这一决定不仅标志着一个由民间力量驱动的底层基础…...

超实用!电机、仪表盘、流动条…一个专为工控量身打造的 WinForm 控件库

前言在.NET 开发中,WinForm 虽然早已不是"新潮"的代名词,却依然活跃在大量工业控制、设备配套和企业内部系统中。原因很简单:稳定、轻量、部署简单,尤其适合对图形性能要求不高但对兼容性和可靠性要求极高的场景。然而&…...

【仅限大会注册用户获取】大模型版本血缘图谱自动生成工具链(含开源PoC),奇点智能大会现场演示后即刻下线

更多请点击: https://intelliparadigm.com 第一章:大模型版本管理策略:奇点智能大会 在2024年奇点智能大会上,大模型版本管理被确立为AI工程化落地的核心基础设施。与传统软件版本控制不同,大模型版本需同时追踪代码、…...

Windows平台Android开发环境自动化部署:ADB与Fastboot驱动智能安装工具技术解析

Windows平台Android开发环境自动化部署:ADB与Fastboot驱动智能安装工具技术解析 【免费下载链接】Latest-adb-fastboot-installer-for-windows A Simple Android Driver installer tool for windows (Always installs the latest version) 项目地址: https://gitc…...

罗技PUBG压枪宏技术深度解析:硬件级输入控制的演进与挑战

罗技PUBG压枪宏技术深度解析:硬件级输入控制的演进与挑战 【免费下载链接】logitech-pubg PUBG no recoil script for Logitech gaming mouse / 绝地求生 罗技 鼠标宏 项目地址: https://gitcode.com/gh_mirrors/lo/logitech-pubg 在FPS游戏竞技生态中&#…...

如何用nmrpflash拯救你的Netgear路由器:终极免费救援指南

如何用nmrpflash拯救你的Netgear路由器:终极免费救援指南 【免费下载链接】nmrpflash Netgear Unbrick Utility 项目地址: https://gitcode.com/gh_mirrors/nmr/nmrpflash 你的Netgear路由器突然变成"砖头"了吗?固件升级失败、系统崩溃…...

PIDtoolbox完全指南:3步掌握无人机黑盒日志分析的终极免费工具

PIDtoolbox完全指南:3步掌握无人机黑盒日志分析的终极免费工具 【免费下载链接】PIDtoolbox PIDtoolbox is a set of graphical tools for analyzing blackbox log data 项目地址: https://gitcode.com/gh_mirrors/pi/PIDtoolbox 你是否曾面对无人机的飞行日…...

魔珐星云:打造企业BI数据讲解智能体,让数据自己会说话

目录 摘要 1. 引言:当BI数据遇上具身智能 1.1 传统BI的痛点 1.2 具身智能的破局之道 1.3 项目价值 2. 魔珐星云:具身智能的表达层基础设施 2.1 产品定位与技术架构 2.2 核心能力对比 2.3 应用场景 3. DeepSeek-V3.2:数据洞察的AI大…...

纯电商用车再生制动能量回收模糊控制策略【附代码】

✨ 本团队擅长数据搜集与处理、建模仿真、程序设计、仿真代码、EI、SCI写作与指导,毕业论文、期刊论文经验交流。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流,点击《获取方式》 (1)基于自适应扩展卡尔曼滤波的SOC精确估计与能量管理…...

如何用MAA助手彻底解放双手:明日方舟智能自动化工具终极指南

如何用MAA助手彻底解放双手:明日方舟智能自动化工具终极指南 【免费下载链接】MaaAssistantArknights 《明日方舟》小助手,全日常一键长草!| A one-click tool for the daily tasks of Arknights, supporting all clients. 项目地址: https…...

为什么向量空间必须是“无限”的?

为什么向量空间必须是“无限”的? 为什么说运算结果总是在 V 中? 向量空间的定义本质上就是划定了一个“无论你怎么加、怎么乘,都逃不出这个圈子”的集合。那么为什么还分V,U 子集呢,这样讲来,不就是一个向量空间包括一切的意思吗? 当数学家说“地板是一个向量空间(子…...

基于储能系统参与电网一次调频的下垂控制仿真示例

目录 手把手教你学Simulink——基于储能系统参与电网一次调频的下垂控制仿真示例 一、 引言:当“新能源浪潮”遇见“频率崩塌”——储能如何化身电网的“速效救心丸”? 二、 问题本质:一次调频的“核心挑战”与“协同逻辑” 1. 核心挑战 …...

AI浪潮下光纤需求爆发,康宁如何从玻璃厂变身光纤之王?

AI光纤需求爆发,英伟达加速布局根据CRU,AI数据中心的光纤需求一年增长75.9%,供需缺口从6%撕开到15%,光纤价格更是在数月间涨超3倍。产能跟不上了,这就是为什么英伟达要投资康宁并加速光纤产能扩张。两个月前&#xff0…...

GetQzonehistory:3分钟免费备份QQ空间所有历史说说

GetQzonehistory:3分钟免费备份QQ空间所有历史说说 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 还在担心QQ空间里那些承载青春记忆的说说会随着时间流逝而消失吗&#xf…...