系统设计:负载均衡器

news2026/5/11 0:18:37
原文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 被各种负载均衡器选为最常选择的服务器。重要的是不要使事情过于复杂因为更复杂的策略设计需要额外的计算资源。结论负载均衡是系统设计中的关键主题尤其是在高负载应用中。在本文中我们探讨了各种静态和动态平衡算法。这些算法在复杂性和做出最佳决策所需的计算资源之间提供了权衡。最终没有单一的平衡算法可以在所有场景中都是最佳选择。适当的选择取决于多个因素如系统配置设置、需求和传入请求的特征。资源负载均衡计算| 维基百科除非另有说明所有图像均为作者所有。

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

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

相关文章

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…

wordpress后台更新后 前端没变化的解决方法

使用siteground主机的wordpress网站,会出现更新了网站内容和修改了php模板文件、js文件、css文件、图片文件后,网站没有变化的情况。 不熟悉siteground主机的新手,遇到这个问题,就很抓狂,明明是哪都没操作错误&#x…

网络编程(Modbus进阶)

思维导图 Modbus RTU(先学一点理论) 概念 Modbus RTU 是工业自动化领域 最广泛应用的串行通信协议,由 Modicon 公司(现施耐德电气)于 1979 年推出。它以 高效率、强健性、易实现的特点成为工业控制系统的通信标准。 包…

UE5 学习系列(二)用户操作界面及介绍

这篇博客是 UE5 学习系列博客的第二篇,在第一篇的基础上展开这篇内容。博客参考的 B 站视频资料和第一篇的链接如下: 【Note】:如果你已经完成安装等操作,可以只执行第一篇博客中 2. 新建一个空白游戏项目 章节操作,重…

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周,有很多同学在写期末Java web作业时,运行tomcat出现乱码问题,经过多次解决与研究,我做了如下整理: 原因: IDEA本身编码与tomcat的编码与Windows编码不同导致,Windows 系统控制台…

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …

使用docker在3台服务器上搭建基于redis 6.x的一主两从三台均是哨兵模式

一、环境及版本说明 如果服务器已经安装了docker,则忽略此步骤,如果没有安装,则可以按照一下方式安装: 1. 在线安装(有互联网环境): 请看我这篇文章 传送阵>> 点我查看 2. 离线安装(内网环境):请看我这篇文章 传送阵>> 点我查看 说明&#xff1a;假设每台服务器已…

XML Group端口详解

在XML数据映射过程中&#xff0c;经常需要对数据进行分组聚合操作。例如&#xff0c;当处理包含多个物料明细的XML文件时&#xff0c;可能需要将相同物料号的明细归为一组&#xff0c;或对相同物料号的数量进行求和计算。传统实现方式通常需要编写脚本代码&#xff0c;增加了开…

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…

(LeetCode 每日一题) 3442. 奇偶频次间的最大差值 I (哈希、字符串)

题目&#xff1a;3442. 奇偶频次间的最大差值 I 思路 &#xff1a;哈希&#xff0c;时间复杂度0(n)。 用哈希表来记录每个字符串中字符的分布情况&#xff0c;哈希表这里用数组即可实现。 C版本&#xff1a; class Solution { public:int maxDifference(string s) {int a[26]…

【大模型RAG】拍照搜题技术架构速览:三层管道、两级检索、兜底大模型

摘要 拍照搜题系统采用“三层管道&#xff08;多模态 OCR → 语义检索 → 答案渲染&#xff09;、两级检索&#xff08;倒排 BM25 向量 HNSW&#xff09;并以大语言模型兜底”的整体框架&#xff1a; 多模态 OCR 层 将题目图片经过超分、去噪、倾斜校正后&#xff0c;分别用…

【Axure高保真原型】引导弹窗

今天和大家中分享引导弹窗的原型模板&#xff0c;载入页面后&#xff0c;会显示引导弹窗&#xff0c;适用于引导用户使用页面&#xff0c;点击完成后&#xff0c;会显示下一个引导弹窗&#xff0c;直至最后一个引导弹窗完成后进入首页。具体效果可以点击下方视频观看或打开下方…

接口测试中缓存处理策略

在接口测试中&#xff0c;缓存处理策略是一个关键环节&#xff0c;直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性&#xff0c;避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明&#xff1a; 一、缓存处理的核…

龙虎榜——20250610

上证指数放量收阴线&#xff0c;个股多数下跌&#xff0c;盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型&#xff0c;指数短线有调整的需求&#xff0c;大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的&#xff1a;御银股份、雄帝科技 驱动…

观成科技:隐蔽隧道工具Ligolo-ng加密流量分析

1.工具介绍 Ligolo-ng是一款由go编写的高效隧道工具&#xff0c;该工具基于TUN接口实现其功能&#xff0c;利用反向TCP/TLS连接建立一条隐蔽的通信信道&#xff0c;支持使用Let’s Encrypt自动生成证书。Ligolo-ng的通信隐蔽性体现在其支持多种连接方式&#xff0c;适应复杂网…

铭豹扩展坞 USB转网口 突然无法识别解决方法

当 USB 转网口扩展坞在一台笔记本上无法识别,但在其他电脑上正常工作时,问题通常出在笔记本自身或其与扩展坞的兼容性上。以下是系统化的定位思路和排查步骤,帮助你快速找到故障原因: 背景: 一个M-pard(铭豹)扩展坞的网卡突然无法识别了,扩展出来的三个USB接口正常。…

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?

编辑&#xff1a;陈萍萍的公主一点人工一点智能 未来机器人的大脑&#xff1a;如何用神经网络模拟器实现更智能的决策&#xff1f;RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战&#xff0c;在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …

华为云AI开发平台ModelArts

华为云ModelArts&#xff1a;重塑AI开发流程的“智能引擎”与“创新加速器”&#xff01; 在人工智能浪潮席卷全球的2025年&#xff0c;企业拥抱AI的意愿空前高涨&#xff0c;但技术门槛高、流程复杂、资源投入巨大的现实&#xff0c;却让许多创新构想止步于实验室。数据科学家…

深度学习在微纳光子学中的应用

深度学习在微纳光子学中的主要应用方向 深度学习与微纳光子学的结合主要集中在以下几个方向&#xff1a; 逆向设计 通过神经网络快速预测微纳结构的光学响应&#xff0c;替代传统耗时的数值模拟方法。例如设计超表面、光子晶体等结构。 特征提取与优化 从复杂的光学数据中自…