负载均衡

简单来说,负载均衡就是给服务器集群分配任务,从而缓解服务器的压力。
这是一个没有负载均衡的服务器架构,如果服务器出现故障,用户就无法访问服务器,或者有多个用户同时访问服务器,超出了服务器的负载能力,就会导致服务器崩溃。
负载均衡_第1张图片
为了解决上面出现的问题,专门提出了负载均衡的概念。在后端开发时,就需要引入一个负载均衡器和至少一个web服务器。当用户请求时,用户首先访问的是负载均衡器,负载均衡器接收到请求后,再将请求转发给后端的服务器。用户的访问被分流了,所有的请求不再是聚集到一个节点上,而是被分担在了各个合适的节点上,这样即使存在单点故障,也仅仅只会影响到一部分用户,况且我们还可以使用其他手段做故障转移。(这里考虑到负载均衡器出现问题,就需要引入第二个负载均衡器)
负载均衡_第2张图片
引入负载均衡的好处:

  • 增加吞吐量,增强网络的处理能力
  • 提供故障转移,实现高可用
  • 通过增加或者减少服务器实物数量,实现网站的扩展和伸缩
  • 安全防护
    根据实现技术不同,可以分为DNS负载均衡,IP负载均衡,P负载均衡,链路层负载均衡等。
    DNS负载均衡
    在DNS负载均衡技术中,DNS服务器为同一个主机名配多个IP地址,在应答DNS查询时,DNS服务器将会以DNS记录中文件主机记录的IP地址按顺序返回不同的解析结果,将客户端引导到不同的主机上,使不同的客户端访问不同的服务器,从而实现负载均衡。
    优点:通过域名解析,解析到离用户最近的服务器,提高访问速度。
    缺点:(1)为了时DNS服务器能够与其他服务器实现交互,都会把DNS的刷新时间设置的较小,当DNS流量过大就会导致网络阻塞的问题;(2)DNS负载均衡采用的是简单的轮循负载算法,不能区分服务器的差异,不能反映服务器的当前运行状态,不能做到为性能较好的服务器多分配请求,甚至会出现客户请求集中在某一台服务器上的情况。
    负载均衡_第3张图片
    IP负载均衡
    在网络层通过修改请求目标地址进行负载均衡。
    用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为,获得的真实ip地址,不需要经过用户进程处理。真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器,再将数据包源地址修改为自身的ip地址,发送给用户浏览器。
    IP负载均衡,真实物理服务器返回给负载均衡服务器,存在两种方式:(1)负载均衡服务器在修改目的ip地址的同时修改源地址。将数据包源地址设为自身盘,即源地址转换(snat)。(2)将负载均衡服务器同时作为真实物理服务器集群的网关服务器。
    负载均衡_第4张图片
    HTTP负载均衡
    当http代理(比如浏览器)向web服务器请求某个URL后,web服务器可以通过http响应头信息中的Location标记来返回一个新的URL。这意味着HTTP代理需要继续请求这个新的URL,完成自动跳转。
    性能缺陷:
    1、吞吐率限制
    主站点服务器的吞吐率平均分配到了被转移的服务器。现假设使用RR(Round Robin)调度策略,子服务器的最大吞吐率为1000reqs/s,那么主服务器的吞吐率要达到3000reqs/s才能完全发挥三台子服务器的作用,那么如果有100台子服务器,那么主服务器的吞吐率可想而知得有大?相反,如果主服务的最大吞吐率为6000reqs/s,那么平均分配到子服务器的吞吐率为2000reqs/s,而现子服务器的最大吞吐率为1000reqs/s,因此就得增加子服务器的数量,增加到6个才能满足。
    2、重定向访问深度不同
    有的重定向一个静态页面,有的重定向相比复杂的动态页面,那么实际服务器的负载差异是不可预料的,而主站服务器却一无所知。因此整站使用重定向方法做负载均衡不太好。
    我们需要权衡转移请求的开销和处理实际请求的开销,前者相对于后者越小,那么重定向的意义就越大,例如下载。你可以去很多镜像下载网站试下,会发现基本下载都使用了Location做了重定向。

链路层负载均衡
在通信协议的数据链路层修改mac地址,进行负载均衡。
数据分发时,不修改ip地址,指修改目标mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。
实际处理服务器ip和数据请求目的ip一致,不需要经过负载均衡服务器进行地址转换,可将响应数据包直接返回给用户浏览器,避免负载均衡服务器网卡带宽成为瓶颈。也称为直接路由模式(DR模式)。
负载均衡_第5张图片
实现负载均衡的算法有以下几种:
1、轮询法

将请求按顺序轮流地分配到后端服务器上,它均衡地对待后端的每一台服务器,而不关心服务器实际的连接数和当前的系统负载。

2、随机法

通过系统的随机算法,根据后端服务器的列表大小值来随机选取其中的一台服务器进行访问。由概率统计理论可以得知,随着客户端调用服务端的次数增多,
其实际效果越来越接近于平均分配调用量到后端的每一台服务器,也就是轮询的结果。

3、源地址哈希法

源地址哈希的思想是根据获取客户端的IP地址,通过哈希函数计算得到的一个数值,用该数值对服务器列表的大小进行取模运算,得到的结果便是客服端要访问服务器的序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。

4、加权轮询法

不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。

5、加权随机法

与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。

6、最小连接数法

最小连接数算法比较灵活和智能,由于后端服务器的配置不尽相同,对于请求的处理有快有慢,它是根据后端服务器当前的连接情况,动态地选取其中当前
积压连接数最少的一台服务器来处理当前的请求,尽可能地提高后端服务的利用效率,将负责合理地分流到每一台服务器。

你可能感兴趣的:(计算机网络)