当前位置:首页 > 问答 > 正文

想搞懂分布式架构里负载均衡到底咋回事,这篇文章帮你理清头绪

整理自微信公众号“码农翻身”的原创文章《想搞懂分布式架构里负载均衡到底咋回事,这篇文章帮你理清头绪》,作者刘欣)

咱们先从一个小饭馆说起吧,你开了一家小饭馆,生意不错,就你一个厨师兼服务员,客人来了,点菜、炒菜、上菜全是你一个人干,刚开始客人少,还能忙得过来,后来生意越来越火,客人一多,你就手忙脚乱了,客人等得着急,抱怨声也来了,这时候你该怎么办?

最简单的办法,就是再请一个厨师和一个服务员,这就是最简单的“分布式”了,从一个人干活变成了两个人干活,但问题也跟着来了:客人点的菜,该给哪个厨师做呢?新来的服务员,是把菜单给原来的你还是给新厨师?(来源:码农翻身,类比引入)

这时候,你就需要一个“派活的人”,也就是“负载均衡器”,这个人的任务很简单,就是坐在门口,来了客人,他把菜单接过来,然后看看后厨两个厨师谁这会儿比较闲,就把菜单递给谁,他的目标就是让两个厨师都别闲着,也别让一个厨师累死另一个闲着,保证活干得最快,客人等的时间最短。(来源:码农翻身,解释负载均衡的基本作用)

把这个小饭馆的场景搬到计算机世界里,道理是一模一样的,那个忙不过来的单核服务器就是你一个人撑起的小饭馆,当访问的用户太多,一个服务器处理不过来时,我们就得增加几个服务器,组成一个“服务器集群”,而那个“派活的人”,负载均衡器”(Load Balancer,简称LB),网络请求就像来吃饭的客人,负载均衡器的作用就是把到来的网络请求,合理地分配给后面集群中的某台服务器去处理。(来源:码农翻身,将类比映射到分布式系统)

这个“派活”具体是怎么个派法呢?这里就有几种常见的策略,都很好理解:

  1. 轮询:就像发牌一样,第一个请求给服务器A,第二个给服务器B,第三个给A,第四个给B……如此循环,大家轮流干活,很公平,这是最常用也是最简单的一种方法。(来源:码农翻身,介绍轮询策略)

  2. 加权轮询:不是所有厨师手艺和体力都一样,可能老师傅(服务器性能好)炒菜快,你就能让他多干点活,加权轮询就是给性能好的服务器分配更高的“权重”,比如在轮询周期内,老师傅处理3个请求,新来的小伙计处理1个请求。(来源:码农翻身,介绍加权轮询策略)

  3. 最少连接数:负载均衡器会盯着每个服务器当前正在处理的请求数量(也就是连接数),来了新请求,就看哪台服务器当前手里的活最少、最“闲”,就把新请求交给它,这种方法能更精细地反映服务器的实时压力。(来源:码农翻身,介绍最少连接数策略)

  4. IP哈希:有时候需要“认人”,比如某个用户登录后,他的购物车信息只存在了服务器A上,如果下次他的请求被发到了服务器B,B上就没有他的购物车信息,就乱套了,IP哈希策略就是根据客户端的IP地址计算出一个值,保证来自同一个IP的请求每次都发给同一台服务器,这就能保持“会话”(Session)不丢失。(来源:码农翻身,介绍IP哈希策略及其解决会话保持的问题)

现在你知道了负载均衡器是怎么“派活”的了,那这个负载均衡器本身放在哪里呢?它可不能像小饭馆的派活员一样坐在大门口,它得在网络里有个位置。

它处在整个系统的最前端,客户端(比如我们的手机APP、浏览器)不直接连接后端的服务器,而是先连接到这个负载均衡器,由它来“代理”所有请求,再转发给后面的服务器,这种模式也常被称为“反向代理”。(来源:码农翻身,解释负载均衡器的部署位置和反向代理概念)

既然它这么重要,万一这个“派活的人”自己累趴下或者生病了,岂不是整个饭馆都瘫痪了?没错,所以高可用的系统必须考虑负载均衡器本身的单点故障问题,解决办法也很直观:给这个关键的“派活员”也配个替补!设置两个或多个负载均衡器,一主一备,平时主节点工作,备用节点闲着(或者也分担一点活,但时刻准备着),它们之间通过“心跳”机制保持联系,一旦主节点宕机,备用节点能在瞬间检测到并立刻接管所有工作,对外界来说几乎感觉不到中断,这就构成了负载均衡器的高可用集群。(来源:码农翻身,讲解负载均衡器的高可用性方案)

负载均衡器还能干点“兼职”,提升整个系统的安全性,它可以设置一些规则,像门卫一样检查进来的“客人”(请求),如果发现某个IP地址在短时间内疯狂发送请求(可能是攻击),就可以直接把它拒之门外,它还可以帮后端的服务器“挡刀”,比如终止耗时的SSL/TLS加密解密过程(即SSL卸载),让服务器能更专注于处理业务逻辑。(来源:码农翻身,介绍负载均衡器的额外功能如安全防护和SSL卸载)

在分布式架构中,负载均衡就像一个聪明的交通警察,它站在系统的入口,指挥着源源不断的网络请求流量,让它们有序、高效、合理地分配到后方多台服务器上,它解决了单台服务器性能瓶颈的问题,提升了系统的整体处理能力(扩展性)、抗故障能力(高可用性),甚至还兼顾了一部分安全职责,理解了负载均衡,你就拿到了理解大型网站如何支撑海量访问的第一把钥匙。(来源:码农翻身,总结负载均衡的核心价值)

想搞懂分布式架构里负载均衡到底咋回事,这篇文章帮你理清头绪