负载均衡原理及算法

14 篇文章 0 订阅
8 篇文章 0 订阅

背景

面对大量用户访问、高并发请求,单机网站可以从软硬件两个方面寻求解决方法:

  1. 硬件方面:可以使用高性能的服务器、大型数据库,存储设备,高性能Web服务器;
  2. 软件方面:采用高效率的编程语言(比如Go,Erlang,Scala)等。

但是,当单机容量达到极限时,我们需要考虑业务拆分和分布式部署,来解决大型网站访问量大,并发量高,海量数据的问题。即需要从架构方面寻求解决方案。

概述

  • 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
  • 负载均衡(Load Balance),意思是将负载(如前端的访问请求)进行平衡、(通过负载均衡算法)分摊到多个操作单元(服务器,中间件)上进行执行。是解决高性能,单点故障(高可用),扩展性(水平伸缩)的终极解决方案。可以理解为,负载均衡是高可用和高并发共同使用的一种技术。

负载均衡的作用:

1、增加吞吐量,解决并发压力(高性能);

2、提供故障转移(高可用);

3、通过添加或减少服务器数量,提供网站伸缩性(扩展性);

4、安全防护(负载均衡设备上做一些过滤,黑白名单等处理)。

原理

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

纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。

典型负载均衡架构如下:
在这里插入图片描述

分类

按照软硬件分类

硬件负载均衡

采用硬件的方式实现负载均衡,一般是单独的负载均衡服务器,价格昂贵,常用的有:F5、A10、Citrix Netscaler。

优点:

  1. 硬件负载均衡稳定性更强,双机或集群的效果更佳,可以应对高并发、高吞吐的网络环境中。
  2. 在策略配置方面,可以实现深度的健康检查方法,而不是简单的ping或tcp的方式,而是可以针对业务层进行健康检查,整体的策略调度更灵活、配置更方便,在七层负载方面更具优势。

缺点:

  1. 价格昂贵;
  2. 扩展能力差,无法进行扩展和定制;
  3. 调试和维护比较麻烦,需要专业人员。

选择:

  1. 核心系统必须使用硬件负载均衡设备;
  2. 测试系统和一般系统可以使用软件负载均衡设备。

软件负载均衡

硬件负载均衡价格昂贵,在实际应用中远不如软件负载均衡普遍。常用的软件负载均衡软件有Nginx、LVS、HaProxy、ats、perlbal、pound等。

Nginx/LVS/HAProxy是目前使用最广泛的三种负载均衡软件。
对比:

  • LVS:是基于四层的转发(只能做端口转发,不能做基于URL、目录的转发)
  • HAproxy:是基于四层和七层的转发,是专业的代理服务器
  • Nginx:是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

选择:

  1. HAproxy和Nginx可做七层转发,URL和目录转发都可以;
  2. 中小型企业推荐使用HAproxy(配置简单);
  3. 在很大并发量的时候选择LVS。

按照地理结构分类

本地负载均衡

本地负载均衡针对本地范围的服务器群做负载均衡

全局负载均衡

全局负载均衡针对不同地理位置、不同网络结构的服务器群做负载均衡

全局负载均衡具备的特点:

  1. 提高服务器响应速度,解决网络拥塞问题,达到高质量的网络访问效果。
  2. 能够远距离为用户提供完全的透明服务,真正实现与地理位置无关性
  3. 能够避免各种单点失效,既包括数据中心、服务器等的单点失效,也包括专线故障引起的单点失效。

按照实现技术

DNS负载均衡

最早的负载均衡技术,利用域名解析实现负载均衡,在DNS服务器,配置多个A记录,这些A记录对应的服务器构成集群。大型网站总是部分使用DNS解析,作为第一级负载均衡。

优点:

  1. 使用简单:负载均衡工作交给DNS服务器处理,不需要专门的服务器维护;
  2. 提高性能:可以支持基于地址的域名解析,解析成距离用户最近的服务器地址,可以加快访问速度。

缺点:

  1. 可用性差:新增/修改DNS后,解析时间较长;

  2. 扩展性低:DNS负载均衡的控制权在域名商,扩展性有限。

实践建议:将DNS作为第一级负载均衡。

IP负载均衡

IP负载均衡,在网络层通过修改请求目标地址进行负载均衡。
在这里插入图片描述
优点:

  1. 在内核进程完成数据分发,比在应用层分发性能更好。

缺点:

  1. 所有请求响应都需要经过负载均衡服务器,集群最大吞吐量受限于负载均衡服务器网卡带宽。

链路层负载均衡

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

数据分发时,不修改ip地址,指修改目标mac地址,配置真实物理服务器集群所有机器虚拟ip和负载均衡服务器ip地址一致,达到不修改数据包的源地址和目标地址,进行数据分发的目的。

优点:性能好。

缺点:配置复杂。

实践建议:直接路由(DR)模式最常用。

混合型负载均衡

由于多个服务器群内硬件设备、规模、提供服务等差异,可以考虑给每个服务器群采用最合适的负载均衡方式,然后又在这多个服务器群间再一次负载均衡或群集起来以一个整体向外界提供服务,从而达到最佳的性能,将这种方式称之为混合型负载均衡。

按照OSI层次

二层负载均衡(数据链路层)

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

三层负载均衡(网络层)

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

四层负载均衡(传输层)

四层负载均衡服务器在接受到客户端请求后,通过修改数据包的地址信息(IP+端口号)将流量转发到应用服务器。

七层负载均衡(应用层)

七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用HTTP、DNS 等。七层负载就可以基于这些协议来负载。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。

部署方式

路由模式

路由模式的部署方式,服务器的网关必须设置成负载均衡机的LAN口地址,且与WAN口分署不同的逻辑网络。因此所有返回的流量也都经过负载均衡。这种方式对网络的改动小,能均衡任何下行流量。

桥接模式

桥接模式配置简单,不改变现有网络。负载均衡的WAN口和LAN口分别连接上行设备和下行服务器。LAN口不需要配置IP(WAN口与LAN口是桥连接),所有的服务器与负载均衡均在同一逻辑网络中。
由于这种安装方式容错性差,网络架构缺乏弹性,对广播风暴及其他生成树协议循环相关联的错误敏感,因此一般不推荐这种安装架构。

服务直接返回模式

这种安装方式负载均衡的LAN口不使用,WAN口与服务器在同一个网络中,互联网的客户端访问负载均衡的虚IP(VIP),虚IP对应负载均衡机的WAN口,负载均衡根据策略将流量分发到服务器上,服务器直接响应客户端的请求。因此对于客户端而言,响应他的IP不是负载均衡机的虚IP(VIP),而是服务器自身的IP地址。也就是说返回的流量是不经过负载均衡的。因此这种方式适用大流量高带宽要求的服务。

常用算法

轮询

轮询为负载均衡中较为基础也较为简单的算法,它不需要配置额外参数。假设配置文件中共有 M 台服务器,该算法遍历服务器节点列表,并按节点次序每轮选择一台服务器处理请求。当所有节点均被调用过一次后,该算法将从第一个节点开始重新一轮遍历。

特点
由于该算法中每个请求按时间顺序逐一分配到不同的服务器处理,因此适用于服务器性能相近的集群情况,其中每个服务器承载相同的负载。但对于服务器性能不同的集群而言,该算法容易引发资源分配不合理等问题。

优点:服务器请求数目相同;实现简单、高效;易水平扩展。

缺点:服务器压力不一样,不适合服务器配置不同的情况;请求到目的结点的不确定,造成其无法适用于有写操作的场景。

应用场景:数据库或应用服务层中只有读的场景。

加权轮询

为了避免普通轮询带来的弊端,加权轮询应运而生。在加权轮询中,每个服务器会有各自的 weight。一般情况下,weight 的值越大意味着该服务器的性能越好,可以承载更多的请求。该算法中,客户端的请求按权值比例分配,当一个请求到达时,优先为其分配权值最大的服务器。

特点
加权轮询可以应用于服务器性能不等的集群中,使资源分配更加合理化。

其核心思想是,遍历各服务器节点,并计算节点权值,计算规则为 current_weight 与其对应的 effective_weight 之和,每轮遍历中选出权值最大的节点作为最优服务器节点。其中 effective_weight 会在算法的执行过程中随资源情况和响应情况而改变。

IP哈希

ip_hash 依据发出请求的客户端 IP 的 hash 值来分配服务器,该算法可以保证同 IP 发出的请求映射到同一服务器,或者具有相同 hash 值的不同 IP 映射到同一服务器。

特点:
该算法在一定程度上解决了集群部署环境下 Session 不共享的问题。

比率(Ratio)

给每个服务器分配一个加权值为比例,根椐这个比例,把用户的请求分配到每个服务器。

优先权(Priority)

给所有服务器分组,给每个组定义优先权。当最高优先级中所有服务器出现故障,将请求送给次优先级的服务器组。这种方式,实际为用户提供一种热备份的方式。

最少连接

将请求分配到连接数最少的服务器(目前处理请求最少的服务器)。

优点:根据服务器当前的请求处理情况,动态分配;

缺点:算法实现相对复杂,需要监控服务器请求连接数;

最快模式(Fastest)

传递连接给那些响应最快的服务器。

观察模式(Observed)

连接数目和响应时间这两项的最佳平衡为依据为新的请求选择服务器。

预测模式(Predictive)

利用收集到的服务器当前的性能指标,进行预测分析,选择一台服务器在下一个时间片内,其性能将达到最佳的服务器相应用户的请求。

动态性能分配(Dynamic Ratio-APM)

根据收集到的应用程序和应用服务器的各项性能参数,动态调整流量分配。

动态服务器补充(Dynamic Server Act)

当主服务器群中因故障导致数量减少时,动态地将备份服务器补充至主服务器群。

服务质量(QoS)

按不同的优先级对数据流进行分配。

服务类型(ToS)

按不同的服务类型(在 Type of Field 中标识)负载均衡对数据流进行分配。

规则模式

针对不同的数据流设置导向规则,用户可自行设置。

网络分层负载均衡架构

互联网领域对于负载均衡的架构是随着网站规模提升不断演进的,大致分为如下几个阶段:

第一阶段:利用Nginx或HAProxy进行单点的负载均衡,该阶段服务器刚从单机向集群转变,需要在七层做转发。

第二阶段:随着网络规模扩大,Nginx单点瓶颈突出,这时使用LVS或者商用Array就是首要选择,Nginx此时就作为LVS或者Array的节点来使用,具体LVS或Array的是选择是根据公司规模和预算来选择。

第三阶段:这时网络服务已经成为主流产品,此时随着公司知名度也进一步扩展,相关人才的能力以及数量也随之提升,这时无论从开发适合自身产品的定制,以及降低成本来讲开源的LVS,已经成为首选,这时LVS会成为主流。

常见互联网分布式架构可分为用户层、反向代理层、Web站点层、业务服务层、数据存储层。互联网分层架构:
在这里插入图片描述
每层之间交互都有相应的负载均衡方案:

  • 客户端层->反向代理层:DNS轮询。
  • 反向代理层->Web站点层:Ngnix(均衡策略:请求轮询/最少连接路由/IP哈希)。
  • Web站点层->业务服务层:连接池。
  • 业务服务层->数据存储层:数据分片,读写分离。

拓:四层负载均衡和七层负载均衡的区别

1. 从技术实现原理上

所谓四层负载均衡就是使用IP加端口的方式进行路由转发;七层负载均衡一般是基于请求URL地址的方式进行代理转发。同理,还有基于MAC地址信息(虚拟MAC地址到真实MAC地址)进行转发的二层负载均衡和基于IP地址(虚拟IP到真实IP)的三层负载均衡。

四层负载均衡具体实现方式为:通过报文中的IP地址和端口,再加上负载均衡设备所采用的负载均衡算法,最终确定选择后端哪台下游服务器。以TCP为例,客户端向负载均衡发送SYN请求建立第一次连接,通过配置的负载均衡算法选择一台后端服务器,并且将报文中的IP地址信息修改为后台服务器的IP地址信息,因此TCP三次握手连接是与后端服务器直接建立起来的。

七层服务均衡在应用层选择服务器,只能先与负载均衡设备进行TCP连接,然后负载均衡设备再与后端服务器建立另外一条TCP连接通道。因此,七层设备在网络性能损耗会更多一些。

2. 从安全视角上

四层负载均衡与服务器直接建立起TCP连接,很容易遭受SYN Flood攻击。SYN Flood是一种广为人知的DDoS(分布式拒绝服务攻击)的方式之一,这是一种利用TCP协议缺陷,发送大量伪造的TCP连接请求,从而使得被攻击方资源耗尽的攻击方式。从技术实现原理上可以看出,四层负载均衡很容易将垃圾流量转发至后台服务器,而七层设备则可以过滤这些恶意并清洗这些流量,但要求设备本身具备很强的抗DDOS流量的能力。

3. 常见四层和七层负载均衡设备

四层: F5、LVS等
七层: nginx、apache等

参考链接

百度百科
负载均衡常用算法介绍
负载均衡算法及方案
四层负载均衡和七层负载均衡区别在哪里?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

KeaLoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值