负载均衡概述| 青训营笔记

262 阅读5分钟

这是我参与「第五届青训营 」笔记创作活动的第4天

负载均衡

什么是负载均衡?

负载平衡是在两台或多台计算机之间分配计算工作负载的做法。

在 Internet 上,负载均衡通常用于在多个服务器之间分配网络流量。这减少了每台服务器的压力并提高了服务器的效率,从而提高了性能并减少了延迟。负载平衡对于大多数 Internet 应用程序的正常运行至关重要。

image.png

(无负载均衡时微服务架构的运行状态)

image.png

(有负载均衡时微服务架构的运行状态)

举个例子:

一个大型超市设有6条收银队列,出于某种原因,其中的五条队列都没有开放对外服务了。如果在非节假日和周末的情况下,来购物的顾客量不大,那么剩余的一条队列能够基本的满足顾客的消费需求(不会花过长的时间在收银的环节排队)。但是一旦到了人流量很大的情况下,很显然一条队伍并不能满足正常的服务,即顾客会等得不耐烦。

同理在网络应用程序中也是如此,如果在请求量大的情况下,如果所有请求都发向了服务集群中的某一个或者某一些节点,这时用户的体验将会大打折扣,进而导致用户放弃使用这个应用程序。

负载均衡是如何工作的?

负载平衡由称为负载平衡器的工具或应用程序处理。

负载均衡器可以是基于硬件的,也可以是基于软件的。硬件负载均衡器需要安装专用的负载均衡设备;基于软件的负载平衡器可以在服务器、虚拟机或云中运行。内容分发网络 (CDN)通常包括负载平衡功能。

当来自用户的请求到达时,负载平衡器将请求分配给给定的服务器,并且对每个请求重复此过程。负载平衡器根据多种不同的算法确定哪个服务器应处理每个请求。这些算法分为两大类:静态和动态

静态负载平衡算法

静态负载平衡算法在不考虑系统当前状态的情况下分配工作负载。静态负载平衡器不会知道哪些服务器运行缓慢以及哪些服务器未被充分使用。相反,它根据预先确定的计划分配工作负载。静态负载平衡可以快速设置,但会导致效率低下。

回到上面的超市例子,如果我们再安排一名员工负责排队的指引:第n名顾客引向第一条队列,第n+1名顾客引向第二条队列,第n+2名顾客引向第三条队列...以此类推。在这种情况下,如果每一条队列的收银员的服务速度都是正常且快速的,即不会出现某一条队列收银速度变慢,那么所有的队列都能够维持相对的长度平衡。但如果某一条队列出现了收银时的特殊状况导致收银速度变慢,而负责指引排队的员工没有注意或者考虑到这一点,那么将导致某一条队列的长度突增,即打破负载均衡。

循环DNS(round robin DNS)客户端随机负载平衡是静态负载平衡的两种常见形式。

动态负载平衡算法

动态负载平衡算法会考虑每台服务器的当前可用性、工作负载和健康状况。他们可以将流量从负担过重或性能不佳的服务器转移到未充分利用的服务器,从而保持分布均匀且高效。但是,动态负载均衡更难配置。许多不同的因素会影响服务器的可用性:每台服务器的健康状况和总体容量、正在分配的任务的大小等等。

还是同个例子,如果负责指引顾客排队的员工采用了一种更加动态的方法:通过观察队列的前进速度、队列的长度以及每个顾客购买的商品数量进行指引,这样就能避免出现某一条队伍的长度突增。很显然,这对该员工的工作量是很大的增加。

有几种类型的动态负载平衡算法,包括最少连接、加权最少连接、基于资源和基于地理位置的负载平衡

负载均衡用在什么地方?

如上所述,负载平衡通常与 Web 应用程序一起使用。基于软件和基于云的负载平衡器有助于在托管应用程序的服务器之间平均分配 Internet 流量。一些云负载平衡产品可以在分布在世界各地的服务器之间平衡互联网流量负载,这一过程称为全球服务器负载平衡 (GSLB)。

负载平衡也常用于大型本地化网络,例如数据中心或大型办公大楼内的网络。传统上,这需要使用硬件设备,例如应用程序交付控制器 (ADC) 或专用负载平衡设备。基于软件的负载平衡器也用于此目的。