负载均衡及其常见实现方式

一、什么是负载均衡

当一台服务器的单位时间内的访问量越大时,服务器压力就越大。为了避免服务器崩溃,让用户有更好的体验,我们通过负载均衡的方式来分担服务器压力。

我们可以建立很多很多服务器,组成一个服务器集群,当用户访问网站时,先访问一个中间服务器,在让这个中间服务器在服务器集群中选择一个压力较小的服务器,然后将该访问请求引入该服务器。如此以来,用户的每次访问,都会保证服务器集群中的每个服务器压力趋于平衡,分担了服务器压力,避免了服务器崩溃的情况。

二、负载均衡的策略机制

实现负载均衡需要考虑其分配的算法,任何一种实现方法都离不开下面几种算法:

  1. 轮询(默认)
  2. 权重轮询(权重越高,进入的几率越大)
  3. IP-Hash
  4. Fair
  5. URL-Hash

1.轮询(默认)

请求依次轮流往每个应用服务器上进行分配,分配策略比较简单。

缺点:不均匀,可能会出现,某些服务器接受的请求较重,负载压力重,有些负荷小,不可控。另外服务器之间需要进行session同步。

2.权重轮询(权重越高,进入的几率越大)

优点:可以根据情况进行调整。可控,仍然需要进行session同步。

3.IP-Hash

优点:无需进行session同步,固定IP会固定访问一台服务器。

缺点:恶意攻击,会造成某台服务器压垮。提供的服务不同,面向的地区不同,IP可能会出现集中,造成不均匀,不可控。

4.Fair

这种相当于自适应,会根据服务器处理请求的速度进行负载均衡分配。处理请求最早结束的,拿到下一个请求。看上去是不是很好。但是一般都不使用,说是考虑到网络不稳定因素。还有待研究。这种也需要进行session同步。

5.URL-Hash

这种是根据URL进行hash,这样某些请求永远打某台服务器。利于利用服务器的缓存,但是可能由于URL的哈希值分布不均匀,以及业务侧重造成某些服务器压力大,某些负荷低。这种也需要进行session同步。

三、实现负载均衡的几种方式

实现负载均衡有多种方式:

  1. 软件负载均衡:比如常见的Nginx、LVS。
  2. 硬件负载均衡;买相应硬件。
  3. DNS负载均衡:通过DNS域名解析的方式,使多个服务器IP对应一个域名。

除了硬件外,下面是几种常见的方式,除了DNS域名解析是DNS实现的,其他均是软件负载均衡:

  1. HTTP重定向
  2. DNS域名解析
  3. 反向代理(Nginx)
  4. IP负载均衡
  5. 链路层的负载均衡(LVS)

1. HTTP重定向

HTTP重定向服务器就是一个普通的服务器,当用户访问时,其会根据一定的算法得到服务器集群的一个真实服务器的IP地址,将其放在HTTP响应头中,响应状态码为(302),当用户浏览器接收到这个响应时,会将得到的真实服务器的IP地址提出并重新访问。如上图所示,当用户访问域名时通过DNS解析得到114.100.20.200,然后访问114.100.20.200,也就是HTTP重定向服务器,响应重定向至114.100.20.203,用户浏览器再重新访问。

在这里插入图片描述
缺点:

  1. 这种方式需要用户浏览器访问两次,性能较差
  2. HTTP重定向服务器会的处理能力会成为负载均衡的瓶颈
  3. HTTP重定向返回302,可能会使搜索引擎判定为SEO作弊,降低搜索排名

2.DNS域名解析

我们有很多个服务器IP,但是可以只用一个域名。当我们通过域名访问网站时,需要通过DNS服务器得到服务器的IP地址,我们可以在DNS服务器上设置一定的算法,每次得到不同的IP地址来进行访问从而实现负载均衡。

当用户访问www.apusapp.com时,这个域名对应了多个IP地址,通过DNS服务器解析会得到一个IP地址(可以看到,得到的这个IP地址,是服务器集群中一个服务器的IP地址),用户访问这个IP地址来达到真实的服务。
在这里插入图片描述
优点:

  1. 将负载均衡的工作丢给了DNS服务器去做,省去了网站管理人员的维护工作,简单易用,成本低,而且方便灵活。
  2. 服务器可以放在任何的地方。
  3. 同时,DNS服务还可以做基于地理位置的解析,可以让一个距离最近的服务器的IP地址放回,提高性能

缺点:

  1. .DNS服务是有多级的,每一级都有可能缓存着DNS的对应关系,所以有可能当某一台真实服务器下线之后,修改了DNS服务器的记录,但在生效之前还有一段时间,在这段期间,其IP地址已经不可用了,通过域名进行访问时还是会访问到这个IP地址,就会访问失败。
  2. DNS服务器和真实服务器是完全分开的,所以DNS的负载均衡不能监测到真是服务器当前的运行状态,其负载均衡的效果不是很好。

事实上,大型网站都将DNS负载均衡作为第一级的负载均衡手段,在服务器内部再进行第二级的负载均衡,也就是说,我们通过DNS得到的IP地址并不是真实服务器的IP地址,而是内部负载均衡服务器的IP地址。

3. 反向代理(Nginx)
为什么叫反向代理:代理与反向代理:VPN服务就是我们常用的一种代理(正向代理),用户将请教交给代理服务器,代理服务器访问网站获取数据,之后代理服务器再将数据返还给用户。在这个过程中,应用服务器并不知道用户的存在。只知道代理浏览器的访问。
反向代理是指在服务器端的代理,代理服务器接收用户的请求,再转发给真实服务器,之后再返回给代理服务器再给用户,在这个过程中,用户并不知道真实服务器的存在。

反向代理服务器管理了一组服务器,当用户访问时,代理服务器根据负载均衡算法将请求转发到真实服务器,真实服务器也通过反向代理服务器返还数据。内部服务器不对外部提供服务,所以不需要外部IP,而反向代理服务器需要两个网卡,一个IP用于外部用户访问使用,另外一个用于内部使用。

在这里插入图片描述

优点:反向代理服务器位于应用层,负载均衡方案和反向代理服务器集成在了一起,部署简单。

缺点: 反向代理服务器处理所有用户的请求和响应,其性能可能成为服务器集群的瓶颈

注意:有名Nginx就是反向代理服务

4.IP负载均衡

优点:IP负载均衡在内核进程完成数据分发,较反向代理均衡有更好的处理性能。

缺点:负载均衡的网卡带宽成为系统的瓶颈。

5.链路层的负载均衡(LVS)

MAC地址:mac地址是与网卡相关,其编号只与网卡生产厂商和流水号有关,基本上可以作为每台电脑的“身份证”。以太网中数据帧之间是通过MAC寻址来到达对应的计算机网卡或者路由的

在这里插入图片描述
链路层的负载均衡通过修改帧数据包中的MAC地址来达到转发的目的。这种方法,所有的真实服务器和负载均衡服务器都有相同的IP地址,不用修改IP数据包的目的地址和源地址,只通过修改MAC地址就可以达到效果,因为请求的IP地址和实际处理的真实服务器的IP地址一致,所以不需要回到负载均衡服务器进行地址交换,可以将响应直接发会给用户浏览器,避免了负载均衡服务器成为传输瓶颈的可能。

优点:避免负载均衡服务器网卡带宽成为瓶颈,是目前大型网站所使用的最广的一种负载均衡手段。

Linux中的LVS(Linux Virtual Server)就是链路层负载均衡的开源产品

四、使用套路

DNS负载均衡是地理级别的,硬件负载均衡对应的是集群级别的,软件负载均衡对应的是机器级别的。
在这里插入图片描述

原文链接:https://blog.csdn.net/bpb_cx/article/details/82771168
原文链接:https://www.jianshu.com/p/c48af7936329
原文链接:https://blog.csdn.net/JACKO_CHAN/article/details/81060273

发布了67 篇原创文章 · 获赞 32 · 访问量 6万+

猜你喜欢

转载自blog.csdn.net/weixin_43751710/article/details/104807125