当前位置: 首页 > 原理解释

负载均衡原理图片-负载均衡原理图示

负载均衡:那些让服务器后怕的瞬间 想象一下,你在餐厅点了一桌菜,里面有大量道。
这桌菜就是你的业务流量,服务员就是那几台服务器。
要是每道菜都让一位服务员独立负责,结局是啥?有的菜让人排半天 queue,有的菜直接让服务员没空干了。
这时候,你该如何办? 这时候,负载均衡就用来讲话。它不是把菜切分给两个人随意分,而是有一套复杂的“分餐策略”和“灶台间调度”机制。 大量人一听到负载均衡就脑补成那种宏伟的架构图,全是红色的斜线和密密麻麻的节点,看着像一张打了补丁的 Excel 表。
实际上,那玩意儿是下线的。真正的负载均衡是在你下单之前,银子就已经悄悄分好了。当你点菜时,你只是站在门口,那个“下单”的按钮,背后全是成千上万个算法在疯狂地玩。 在分布式系统中,这就像是你点菜,系统内部有专门的调度员。
这个调度员看着那一堆订单,手里的“分餐勺”在不停晃动。 判断分餐勺往哪边放,是有原则的。
比方说,要是这道菜是今天刚出锅的热乎汤,系统会本能地优先分配给还没喝汤的空椅子。
要是这道菜是那种特别难吃的,比如满锅的炸丸子,系统就果断往“重灾区”的灶台间投掷,哪怕那个灶台间再忙也得给。 还有一个挺直接的例子:要是某个服务器出于突发的怪请求(比如有人输入了8888 个字符)突然卡住,它的 CPU 就像被卡死的引擎,转不动了。
这时候,调度员不会等它凉透再重新上菜,而是立马把下一道菜硬塞给它,哪怕这菜分出去后,那个灶台间还得重新清理,出于没人愿意看着别人在灶台间里吃“坏掉”的饭。 这里的例子数据你能够给个明确的数字:假设你的系统有 500 个并发用户,按刚刚那个“难吃”的模型,前 100 个用户点的大锅炸丸子,假设每个炸丸子都要占 0.5 秒的排队工夫,那么前 100 个用户总共要等 50 秒。但一旦第 101 个用户来了,系统立马把这道菜扔给了剩下的 400 个用户,哪怕这样一来,剩下的用户得重新排队,从原本的 50 秒排到 100 秒,速度反而慢了。
这就是为啥负载均衡不只是是“分”,更是“救火”和“维持平衡”。 再细想一下,负载均衡的核心逻辑实际上就几步:先分,再投,再跑,再回。 分,就是根据流量大小和规则把请求切分。有些时候,有些请求是“轻快餐”,比如好办的“点赞”按钮,系统可能直接把这个请求扔给那个最空闲的ImageViewer 线程。有些请求是“重磅特供”,比如“购买”按钮,系统可能会把它专门塞给那个后端数据库的线程,哪怕那个线程刚写完代码,CPU 跑不满,系统也得硬塞给它。 投,这是最关键的一步。当你把请求扔出去后,系统还得看,这投出去之后,会不会害得那个灶台间里的人饿死。
要是扔给的那个线程正在处理一个特别难的请求,结局这块地连个土都压不住,那还是扔吗?这时候系统就会触发降级要么熔断,直接扔给那个没难题的线程。 跑,就是请求处理完了,还得看结局。
有时候结局挺好,就持续让那个厨师炒菜,就连可能为了追求速度,直接加速。
有时候结局挺糟糕,比如数据库确实挂了,那这块地赶明儿就不种菜了,系统会立马把这块菜地标记为“弃用”。 回,就是最终一道程序。当请求处理完了,它还得记得把那个切好的菜块原样放回原处,别弄丢了。
要是处理过程中数据乱了,系统得负责把数据重新对齐。 这个过程就像是在做数学题。
比如你让 3 个学生去分 12 个苹果。
要是学生 A 特别能吃,学生 B 特别会挑剩下的烂苹果,系统可能会直接让 A 拿 4 个,B 拿剩下的 6 个(假设 B 挑了 2 个烂的),然后 C 拿剩下的 4 个。别看看起来 A 拿了忒多,B 的苹果烂了,但系统内部会记录:这个学生 A 的胃口大,这个学生 B 的挑果标准高。下次要是流量大一点,系统就会重新算一遍,把 A 分 3 个,B 分 4 个,C 分 5 个。 这就解释了为啥有时候负载均衡看起来像是在“搞破坏”。
有时候它确实就是在破坏,比如那个“难吃”的炸丸子,确实让你吃的时候感觉胃疼。但换个角度想,要是那个灶台间彻底瘫痪了,你这桌子菜就全洒了一半。
这时候,负载均衡就是那个“把烂菜换给旁边好灶台间”的机制。 并且,负载均衡不是静态的。它不是一成不变的切分规则。
比方说,要是昨天早上 10 点,哪个服务器跑得快,今天它可能就要被分配更多任务。
要是是流量洪峰,系统会自动把任务切分给那些平时没被注意到的“边缘节点”。 最终,回到最本质的难题:为啥要做这个? 出于单个的服务器就像是一台超级精密的机器,它再了得,也有性能上限。
要是你的业务流量是 100 万,你只能有一台 CPU 4000 核的大机器吗?那可能不中。你能够把流程改成“下单”->“查库存”->“扣库存”->“发快递”->“确认收货”,每个环节都放在不同的机器上。
这时候,负载均衡就是给这迷宫里的每一扇门贴个标签,告诉服务员:“这扇门后面是查货,你去那边排队;那扇门后面是发货,你去那边排队”。 要是没有负载均衡,哪怕你有一百台 Server,要是每一台都只跑一半的流量,那还不如一台 Server 跑一半流量,稳定性还差。真正的负载均衡,是让每一台 Server 都跑满自己的极限,并且把富余的流量从最慢的那台,分流到最快的那台,让整个系统像一个有机的整体,而不是几百个孤立的零件在各自为战。 记住,负载均衡不是为了“平均”,而是为了“效率”。它懂得啥时候该让你排长队,啥时候该让你快点走,它会根据数据的流向,像空气一样,把流量均匀地填进系统里,既不让某个地方堵死,也不让某个地方空转。
这才是它最朴素也最了得的本事。
相关标签:

猜你喜欢

热门阅读

  • 赖柴尔定理-赖柴尔定理
  • 迪拜哪个国家的城市?-迪拜在哪国城市
  • 李毅吧番号及出处-李毅吧番号及出处
  • 贴春联的由来简介50字-春联由来简述
  • 思乡的名言和出处-思乡名言及出处

其他分站