美文网首页
浅谈负载均衡

浅谈负载均衡

作者: Java古德 | 来源:发表于2020-08-10 17:47 被阅读0次

    负载均衡

    1.概念

    负载均衡(Load Balance),是一种计算机技术,意思是将负载(工作任务,访问请求)进行平衡、分摊到多个操作单元(服务器,组件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。负载平衡服务通常可以由专用软件(nginx、Lvs等)和硬件(F5负载均衡器)来完成。

    2.负载均衡原理

    系统的扩展可以分为纵向(垂直)扩展和横向(水平)扩展。

    • 纵向扩展:从单机角度出发,通过增加硬件处理能力,例如CPU处理能力、内存容量、磁盘等,目的是实现服务器处理能力的提升,但缺点是不能满足大型分布式系统或者网站大流量、高并发、海量数据的问题。
    • 横向扩展:通过添加机器数量来满足大型网站服务的处理能力。例如一台机器不能满足需求,我就增加两台或者多台机器,共同承担访问压力,这就是典型的集群和负载均衡的原理,

    集群和负载均衡的架构图如下:

    • 应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
    • 负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。

    负载均衡的作用:

    • 解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);
    • 提供故障转移,实现高可用;
    • 通过添加或减少服务器数量,提供网站伸缩性(扩展性);
    • 安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)

    3.负载均衡的实现

    根据实现技术不同,可分为DNS域名解析负载均衡,HTTP重定向负载均衡,IP负载均衡,链路层负载均衡,反向代理负载均衡等。

    3.1 DNS域名解析负载均衡

    原理

    最早的负载均衡技术,在DNS服务器内配置多个记录,这些记录对应服务器构成集群,每次域名解析请求都会根据负载均衡算法计算一个不同的IP地址返回,这样就实现了负载均衡。

    优点
    • 使用简单:载均衡工作,交给DNS服务器处理,省掉了负载均衡服务器维护的麻烦
    • 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度,改善性能;
    缺点
    • 可用性差:DNS解析是多级解析,新增/修改DNS后,解析时间较长;解析过程中,用户访问网站将失败;
    • 扩展性差:DNS负载均衡的控制权在域名商那里,无法对其做更多的改善和扩展;
    适用场景

    所以,结合DNS域名解析负载均衡的原理,大型网站一般都会把DNS负载均衡作为第一级负载均衡手段,然后再在内部做第二级负载均衡。

    3.2 HTTP重定向负载均衡

    原理

    HTTP重定向负载均衡服务器是一台普通的应用服务器,其唯一的功能就是根据用户的HTTP请求以及负载均衡算法计算出一台真实的服务器地址,并将真实的服务器地址写入HTTP重定向响应中(响应状态码302)返回给浏览器,然后浏览器再自动请求真实的服务器。

    优点

    简单易实现

    缺点
    • 缺点是浏览器需要每次请求两次服务器才能拿完成一次访问,性能较差;
    • 重定向服务器自身的处理能力有可能成为瓶颈
    适用场景

    综上,此方案在实际中并不经常使用。

    3.3 IP负载均衡

    原理

    在网络层结合负载均衡算法通过修改请求目标IP地址进行负载均衡。

    用户请求数据包,到达负载均衡服务器后,负载均衡服务器在操作系统内核进程获取网络数据包,根据负载均衡算法得到一台真实服务器地址,然后将请求目的地址修改为获得的真实ip地址,整个过程不需要经过用户进程处理。真实服务器处理完成后,响应数据包回到负载均衡服务器,负载均衡服务器再将数据包源地址修改为自身的ip地址,发送给用户浏览器。

    整个流程的关键在于真实WEB服务器响应数据包如何返回给负载均衡服务器

    • 一种是负载均衡服务器在修改目的IP地址的同时修改源地址,将数据包源地址改为自身的IP,即源地址转换(SNAT)
    • 另一种方案是将负载均衡服务器同时作为真实物理服务器的网关服务器,这样所有的数据都会到达负载均衡服务器。
    优点

    IP负载均衡在内核进程完成数据分发,处理性能更好

    缺点

    由于所有请求响应的数据包都需要经过负载均衡服务器,因此负载均衡的网卡带宽成为系统的瓶颈

    3.4 数据链路层负载均衡

    原理

    数据链路层负载均衡是指在通信协议的数据链路层修改mac地址进行负载均衡。

    这种数据传输方式又称作三角传输模式,即数据在分发过程中不修改IP地址,只根据负载均衡算法修改目的地的mac地址,然后通过配置真实物理服务器集群所有机器虚拟IP和负载均衡服务器IP地址一样,从而达到依靠mac地址进行传输,这种负载均衡方式又称为直接路由方式(DR).

    在上图中,用户请求到达负载均衡服务器后,负载均衡服务器将请求数据的目的mac地址修改为真实WEB服务器的mac地址,并不修改数据包目标IP地址,因此数据可以正常到达目标WEB服务器,该服务器在处理完数据后可以不经过负载均衡服务器直接到达用户浏览器。

    优点

    使用三角传输模式的链路层负载均衡是目前大型网站所使用的最广的一种负载均衡手段。在linux平台上最好的链路层负载均衡开源产品是LVS(linux virtual server)。

    缺点

    配置可能复杂一点。

    3.5 反向代理负载均衡

    原理

    传统代理服务器位于浏览器一端,代理浏览器将HTTP请求发送到互联网上(正向代理)。而反向代理服务器则位于网站机房一侧,代理网站web服务器接收http请求。反向代理服务器也可以实现负载均衡的功能,典型的反向代理服务就是nginx。

    除此之外,代理服务器也可以配置缓存加速web请求。当用户第一次访问静态内容的时候,静态内存就被缓存在反向代理服务器上,这样当其他用户访问该静态内容时,就可以直接从反向代理服务器返回,加速web请求响应速度,减轻web服务器负载压力。

    由于反向代理服务器转发请求在HTTP协议层面,因此也叫应用层负载均衡。优点是部署简单,缺点是可能成为系统的瓶颈。

    4.负载均衡的算法

    上面介绍负载均衡技术的时候提到过,负载均衡服务器在决定将请求转发到具体哪台真实服务器时,是通过负载均衡算法来实现的。

    4.1 轮询法

    (1) 概念
    将请求按照顺序轮流的分配到服务器上,它均衡的对待每一台后端的服务器,不关心服务器的的连接数和负载情况.
    
    
    (2) 缺点
    • 轮询的策略目的在于请求的绝对均衡,但是在实际的情况下,可能服务器并不是完全一样。导致有些性能高的服务器不能完全发挥出来。
    • [待定!!!]请求到目的结点的不确定,造成其无法适用于有写的场景(缓存,数据库写),适用于数据库或应用服务层中只有读的场景
    (3) 加权轮询法

    以轮询的方式依次请求调度不同的服务器;实现时,一般为服务器带上权重;这样有两个好处:

    • 针对服务器的性能差异可分配不同的负载;
    • 当需要将某个结点剔除时,只需要将其权重设置为0即可;

    4.2 随机法

    通过系统的随机函数,根据后端服务器列表的大小来随机获取其中的一台来访问,随着调用量的增大,实际效果越来越近似于平均分配到没一台服务器.和轮询的效果类似.[请求随机分配到各个服务器。]
    
    

    4.3 最小连接数法

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

    4.4 源地址hash法

    源地址hash法的思想是获取客户端访问的ip地址,通过hash函数计算出一个hash值,用该hash值对服务器列表的大小进行取模运算,得到的值就是要访问的服务器的序号.
    
    

    4.5 最快响应算法

    负载均衡设备对内部各服务器发出一个探测请求(例如Ping),然后根据内部中各服务器对探测请求的最快响应时间来决定哪一台服务器来响应客户端的服务请求。
    
    

    4.6 总结

    5.负载均衡的分类

    负载均衡可以分为二层、三层、四层、七层负载均衡。

    5.1 二层负载均衡

    负载均衡服务器对外依然提供一个VIP(虚IP),集群中不同的机器采用相同IP地址,但机器的MAC地址不一样。当负载均衡服务器接受到请求之后,通过改写报文的目标MAC地址的方式将请求转发到目标机器实现负载均衡。

    其实二层负载均衡也就是数据链路层负载均衡

    5.2 三层负载均衡

    和二层负载均衡类似,负载均衡服务器对外依然提供一个VIP(虚IP),但集群中不同的机器采用不同的IP地址。当负载均衡服务器接受到请求之后,根据不同的负载均衡算法,通过IP将请求转发至不同的真实服务器。

    其实三层负载均衡也就是IP负载均衡

    5.3 四层负载均衡

    (1) 概念

    四层负载均衡工作在OSI模型的传输层,主要工作是转发,它在接收到客户端的报文以后主要通过修改报文中的目标地址和端口,再加上负载均衡算法,决定最终选择的真实物理服务器。

    (2) 常见的例子:

    以常见的TCP为例,负载均衡设备在接收到第一个来自客户端的SYN请求时,即通过上述方式选择一个最佳的服务器,并对报文中目标IP地址进行修改(改为后端服务器IP),直接转发给该服务器。TCP的连接建立,即三次握手是客户端和服务器直接建立的,负载均衡设备只是起到一个类似路由器的转发动作。在某些部署情况下,为保证服务器回包可以正确返回给负载均衡设备,在转发报文的同时可能还会对报文原来的源地址进行修改。

    5.4 七层负载均衡

    (1) 概念

    七层负载均衡工作在OSI模型的应用层,因为它需要解析应用层流量,所以七层负载均衡在接到客户端的流量以后,还需要一个完整的TCP/IP协议栈。它的主要特点在于:通过报文中的有意义的应用层内容以及负载均衡算法,决定最终选择的真实物理服务器。

    (2) 常见例子

    负载均衡设备在这种情况下,更类似于一个代理服务器。负载均衡和前端的客户端以及后端的服务器会分别建立TCP连接。所以从这个技术原理上来看,七层负载均衡明显的对负载均衡设备的要求更高,处理七层的能力也必然会低于四层模式的部署方式。

    相关文章

      网友评论

          本文标题:浅谈负载均衡

          本文链接:https://www.haomeiwen.com/subject/nlijdktx.html