乐趣区

关于即时通讯:im即时通讯开发浅析分布式架构下的负载均衡技术

对于“负载平衡”的解释,百度词条里:负载平衡,英文叫 Load Balance,意思就是将申请或者数据摊派到多个操作单元上进行执行,共同完成工作工作。

负载平衡(Load Balance)建设在现有网络结构之上,它提供了一种便宜无效通明的办法扩大网络设备和服务器的带宽、减少吞吐量、增强网络数据处理能力、进步网络的灵活性和可用性。

负载平衡有两方面的含意:

1)首先,大量的并发拜访或数据流量分担到多台节点设施上别离解决,缩小用户期待响应的工夫;

2)其次,单个重负载的运算分担到多台节点设施上做并行处理,每个节点设施解决完结后,将后果汇总,返回给用户,零碎解决能力失去大幅度提高。

简略来说就是:

1)其一是将大量的并发解决转发给后端多个节点解决,缩小工作响应工夫;

2)其二是将单个沉重的工作转发给后端多个节点解决,解决完再返回给负载平衡核心,再返回给用户。

目前负载平衡技术大多数是用于进步诸如在 Web 服务器、FTP 服务器和其它要害工作服务器上的 Internet 服务器程序的可用性和可伸缩性。

总之,它的目标就通过调度集群,达到最佳化资源应用,最大化吞吐率,最小化响应工夫,防止单点过载的问题。

依据 OSI 模型可将负载平衡分为:

1)二层负载平衡(个别是用虚构 mac 地址形式,内部对虚构 MAC 地址申请,负载平衡接管后调配后端理论的 MAC 地址响应);

2)三层负载平衡(个别采纳虚构 IP 地址形式,内部对虚构的 ip 地址申请,负载平衡接管后调配后端理论的 IP 地址响应);

3)四层负载平衡(在三次负载平衡的根底上,用 ip+port 接管申请,再转发到对应的机器);

4)七层负载平衡(依据虚构的 url 或是 IP,主机名接管申请,再转向相应的解决服务器)。

这其中,最常见的是四层和七层负载平衡,也是本文接下来介绍的重点。

当客户端发动申请,会通过层层的封装,发给服务器,服务器收到申请后通过层层的解析,获取到对应的内容。

二层负载平衡

二层负债平衡是基于数据链路层的负债平衡,即让负债平衡服务器和业务服务器绑定同一个虚构 IP(即 VIP),客户端间接通过这个 VIP 进行申请。

那么如何辨别雷同 IP 下的不同机器呢?没错,通过 MAC 物理地址,每台机器的 MAC 物理地址都不一样,当负载平衡服务器接管到申请之后,通过改写 HTTP 报文中以太网首部的 MAC 地址,依照某种算法将申请转发到指标机器上,实现负载平衡。

这种形式负载形式尽管管制粒度比拟粗,然而长处是负载平衡服务器的压力会比拟小,负载平衡服务器只负责申请的进入,不负责申请的响应(响应是有后端业务服务器间接响应给客户端),吞吐量会比拟高。

三层负载平衡

三层负载平衡是基于网络层的负载平衡,艰深的说就是依照不同机器不同 IP 地址进行转发申请到不同的机器上。

这种形式尽管比二层负载多了一层,但从管制的颗粒度上看,并没有比二层负载平衡更有劣势,并且,因为申请的进出都要通过负载平衡服务器,会对其造成比拟大的压力,性能也比二层负载平衡要差。

四层负载平衡

四层的负载平衡就是基于 IP+ 端口的负载平衡:在三层负载平衡的根底上,通过公布三层的 IP 地址(VIP),而后加四层的端口号,来决定哪些流量须要做负载平衡,对须要解决的流量进行 NAT 解决,转发至后盾服务器,并记录下这个 TCP 或者 UDP 的流量是由哪台服务器解决的,后续这个连贯的所有流量都同样转发到同一台服务器解决。

对应的负载均衡器称为四层交换机(L4 switch),次要剖析 IP 层及 TCP/UDP 层,实现四层负载平衡。

此种负载均衡器不了解利用协定(如 HTTP/FTP/MySQL 等等),常见例子有:LVS,F5。

七层负载平衡

七层的负载平衡就是基于虚构的 URL 或主机 IP 的负载平衡:在四层负载平衡的根底上(没有四层是相对不可能有七层的),再思考应用层的特色,比方同一个 Web 服务器的负载平衡,除了依据 VIP 加 80 端口分别是否须要解决的流量,还可依据七层的 URL、浏览器类别、语言来决定是否要进行负载平衡。即时通讯聊天软件开发能够找蔚可云开发。

举个例子,如果你的 Web 服务器分成两组,一组是中文语言的,一组是英文语言的,那么七层负载平衡就能够当用户来拜访你的域名时,主动分别用户语言,而后抉择对应的语言服务器组进行负载平衡解决。

对应的负载均衡器称为七层交换机(L7 switch),除了反对四层负载平衡以外,还有剖析应用层的信息,如 HTTP 协定 URI 或 Cookie 信息,实现七层负载平衡。此种负载均衡器能了解利用协定,常见例子有:haproxy,MySQL Proxy。

所谓四层负载平衡,也就是次要通过报文中的指标地址和端口,再加上负载平衡设施设置的服务器抉择形式,决定最终抉择的外部服务器。

以常见的 TCP 为例,负载平衡设施在接管到第一个来自客户端的 SYN 申请时,即通过上述形式抉择一个最佳的服务器,并对报文中指标 IP 地址进行批改(改为后端服务器 IP),间接转发给该服务器。TCP 的连贯建设,即三次握手是客户端和服务器间接建设的,负载平衡设施只是起到一个相似路由器的转发动作。在某些部署状况下,为保障服务器回包能够正确返回给负载平衡设施,在转发报文的同时可能还会对报文原来的源地址进行批改。

所谓七层负载平衡,也称为“内容替换”,也就是次要通过报文中的真正有意义的应用层内容,再加上负载平衡设施设置的服务器抉择形式,决定最终抉择的外部服务器。

以常见的 TCP 为例,负载平衡设施如果要依据真正的应用层内容再抉择服务器,只能先代理最终的服务器和客户端建设连贯 (三次握手) 后,才可能承受到客户端发送的真正应用层内容的报文,而后再依据该报文中的特定字段,再加上负载平衡设施设置的服务器抉择形式,决定最终抉择的外部服务器。负载平衡设施在这种状况下,更相似于一个代理服务器。负载平衡和前端的客户端以及后端的服务器会别离建设 TCP 连贯。所以从这个技术原理上来看,七层负载平衡显著的对负载平衡设施的要求更高,解决七层的能力也必然会低于四层模式的部署形式。

七层利用须要思考的问题:

1)是否真的必要:七层利用确实能够进步流量智能化,同时必不可免的带来设施配置简单,负载平衡压力增高以及故障排查上的复杂性等问题。在设计零碎时须要思考四层七层同时利用的混淆状况。

2)是否真的能够进步安全性:例如 SYN Flood 攻打,七层模式确实将这些流量从服务器屏蔽,但负载平衡设施自身要有弱小的抗 DDoS 能力,否则即便服务器失常而作为中枢调度的负载平衡设施故障也会导致整个利用的解体。

3)是否有足够的灵便度:七层利用的劣势是能够让整个利用的流量智能化,然而负载平衡设施须要提供欠缺的七层性能,满足客户依据不同状况的基于利用的调度。最简略的一个考核就是是否取代后盾 Nginx 或者 Apache 等服务器上的调度性能。可能提供一个七层利用开发接口的负载平衡设施,能够让客户依据需要任意设定性能,才真正有可能提供弱小的灵活性和智能性。

总体比照

四层负载平衡和七层负载平衡技术的总体比照:

1)智能性:七层负载平衡因为具备 OIS 七层的所有性能,所以在解决用户需要上能更加灵便,从实践上讲,七层模型能对用户的所有跟服务端的申请进行批改。例如对文件 header 增加信息,依据不同的文件类型进行分类转发。四层模型仅反对基于网络层的需要转发,不能批改用户申请的内容。

2)安全性:七层负载平衡因为具备 OSI 模型的全副性能,能更容易抵挡来自网络的攻打;四层模型从原理上讲,会间接将用户的申请转发给后端节点,无奈间接抵挡网络攻击。

3)复杂度:四层模型个别比较简单的架构,容易治理,容易定位问题;七层模型架构比较复杂,通常也须要思考联合四层模型的混用状况,呈现问题定位比较复杂。

4)效率比:四层模型基于更底层的设置,通常效率更高,但利用范畴无限;七层模型须要更多的资源损耗,在实践上讲比四层模型有更强的性能,当初的实现更多是基于 http 利用。

退出移动版