高并发负载均衡

Posted EileenChang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了高并发负载均衡相关的知识,希望对你有一定的参考价值。


1 负载均衡模型推导

1.1 高并发问题的出现

  试想有一个Tomcat服务器,同时有上万请求到达,这台服务器承受不住这么大的压力,导致服务卡顿等情况。
在这里插入图片描述

1.2 负载均衡的思路

  对于上述高并发的情况,最容易想到的解决方法是,用多个Tomcat同时对外提供相同的服务,分散压力。毕竟,没有什么是一个Tomcat解决不了的,如果有,那就两个。
在这里插入图片描述

1.3 负载均衡服务器诞生

  但是,客户端是通过一个域名(或者IP地址)访问服务。在一个网络中,IP是唯一的,那么这个域名或IP分配给哪台Tomcat服务器呢?这时候我们又想到了一个办法,在客户端和服务器之间加一个负载均衡服务器,这个服务器可以将收到的请求转发给后面的Tomcat服务器。
在这里插入图片描述

1.4 负载均衡服务器的特性

  对于客户端来说,后面的Tomcat是不可见的,只有一个负载均衡服务器提供服务。但是,问题又出现了,和之前一样,这个负载均衡服务器也是单个服务,一样会面临高并发的问题。所以这个负载均衡服务器相对于其后面的Tomcat,需要具备足够快的特性,可以快速地将收到的请求分发给后面的Tomcat服务器,因为只有这样才能承受住大量的并发请求。
  那么,这个负载均衡服务器如何才能做到足够快呢?首先,在通信的角度来看,Tomcat服务器之所以慢,是因为其工作在应用层,当其为客户端提供服务时,需要经过经过七个层面,在传输控制层还需要建立TCP连接,其三次握手和四次挥手也需要一定的时间。所以从这个角度出发,可以让这个负载均衡服务器只转发数据包,而不需要和客户端建立TCP连接,也就省了握手的过程,故称之为四层负载均衡服务器。

2 LVS

  基于以上理论,LVS诞生了。LVS是Linux Virtual Server的简称,也就是Linux虚拟服务器,是一个由章文嵩发起的自由软件项目,现在LVS已经是Linux标准内核的一部分。LVS有三种工作模式,分别为NAT模式、DR模式和TUN模式。

2.1 网络地址转换(NAT)

  网络地址转换的原理,是目标地址转换,LVS接收到请求后,将目标地址改为某一台真实服务器的地址,并将请求发出去。LVS收到响应包时,将源地址改为LVS的地址即VIP,并将数据发送给客户端。
在这里插入图片描述
  这种模式要求真实服务器的网关要指向LVS。这种模式请求和响应都是走同一条线路,由于通信的不对称性,网络带宽会成为系统瓶颈。并且请求和响应都要经过LVS,其中地址转换操纵对LVS服务器的要求也更高。

2.2 直接路由(DR)

  为了解决上述瓶颈的问题,我们希望真实服务器的响应包无需交由LVS服务器转发回客户端,而是由真实服务器直接发送给客户端,所以有了DR模式。其原理是通过为请求报文重新封装一个MAC首部进行转发,源MAC是DIP所在的接口的MAC,目标MAC是某挑选出的RS的RIP所在接口的MAC地址;源IP/PORT,以及目标IP/PORT均保持不变。
在这里插入图片描述
  这种模式解决了带宽瓶颈和LVS瓶颈的问题,但是要求真实服务器和LVS服务器必须在同一机房中。

2.3 隧道模式(TUN)

  为了解决上述真实服务器和LVS服务器不能跨地域的问题,有了隧道模式。其原理是在原有的IP报文外再次封装多一层IP首部,内部IP首部(源地址为CIP,目标IIP为VIP),外层IP首部(源地址为DIP,目标IP为RIP)。
在这里插入图片描述

2.4 LVS负载均衡策略

  LVS有十种负载均衡策略:

  • RR(Round Robin):轮询调度。
  • WRR(Weight Round Robin):加权轮询(以权重之间的比例实现在各主机之间进行调度)。
  • SH(source hashing):源地址散列。
  • DH(Destination hashing):目标地址散列。
  • LC(Least-Connection):最少连接。
  • WLC(Weighted Least-Connection Scheduling):加权最少连接。
  • SED(Shortest Expected Delay):最短期望延迟。
  • NQ(never queue):永不排队,改进的SED。
  • LBLC(Locality-Based Least Connection):基于局部性的最少连接。
  • LBLCR(Locality-Based Least Connections withReplication):带复制的基于局部性最少链接。

3 nginx

  除了四层负载均衡服务器,还有工作于应用层的负载均衡解决方案。Nginx就是一个基于反向代理的应用层负载均衡服务器,由于其工作于应用层,能承受的并发量远小于四层负载均衡服务器。所以大型的服务架构中,先用LVS顶住流量分发到Nginx,再用Nginx做接入层将请求分发到后面的Tomcat服务器。
在这里插入图片描述

以上是关于高并发负载均衡的主要内容,如果未能解决你的问题,请参考以下文章

高并发负载均衡

初识千万级高并发负载均衡软件HaProxy

千万级高并发负载均衡软件HAproxy

云上负载均衡,轻松面对高并发

大数据高并发---负载均衡

大数据高并发---负载均衡