一、什么是负载均衡?
早期的互联网应用,由于用户流量比较小,业务逻辑也比较简单,往往一个单服务器就能满足负载需求。随着现在互联网的流量越来越大,稍微好一点的系统,访问量就非常大了,并且系统功能也越来越复杂,那么单台服务器就算将性能优化得再好,也不能支撑这么大用户量的访问压力了,这个时候就需要使用多台机器,设计高性能的集群来应对。那么,多台服务器是如何去均衡流量、如何组成高性能的集群的呢?此时就需要请出 「负载均衡器」 入场了。
负载均衡(Load Balancer)是指把用户访问的流量,通过「负载均衡器」,根据某种转发的策略,均匀的分发到后端多台服务器上,后端的服务器可以独立的响应和处理请求,从而实现分散负载的效果。负载均衡技术提高了系统的服务能力,增强了应用的可用性。
负载均衡是在支持应用程序的资源池中平均分配网络流量的一种方法。现代应用程序必须同时处理数百万用户,并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。为了处理如此高的流量,大多数应用程序都有许多资源服务器,它们之间包含很多重复数据。负载均衡器是位于用户与服务器组之间的设备,充当不可见的协调者,确保均等使用所有资源服务器。
二、负载均衡原理
公司通常在多台服务器上运行其应用程序。这种服务器安排称为服务器场。用户对应用程序的请求首先转到负载均衡器。然后,负载均衡器会将每个请求路由到服务器场中最适合处理该请求的单个服务器。
负载均衡就像餐厅经理所做的工作一样。考虑一家有五名服务员的餐厅。如果允许顾客选择服务员,那么一个或两个服务员可能会超负荷工作,而其他服务员则处于闲置状态。为了避免这种情况,餐厅经理将顾客分配给最适合为他们提供服务的特定服务员。
系统的扩展可分为纵向(垂直)扩展和横向(水平)扩展。纵向扩展,是从单机的角度通过增加硬件处理能力,比如CPU处理能力,内存容量,磁盘等方面,实现服务器处理能力的提升,不能满足大型分布式系统(网站),大流量,高并发,海量数据的问题。因此需要采用横向扩展的方式,通过添加机器来满足大型网站服务的处理能力。比如:一台机器不能满足,则增加两台或者多台机器,共同承担访问压力。这就是典型的集群和负载均衡架构。
应用集群:将同一应用部署到多台机器上,组成处理集群,接收负载均衡设备分发的请求,进行处理,并返回相应数据。
负载均衡设备:将用户访问的请求,根据负载均衡算法,分发到集群中的一台处理服务器。(一种把网络请求分散到一个服务器集群中的可用服务器上去的设备)
如下图:
负载均衡的作用:
1.解决并发压力,提高应用处理性能(增加吞吐量,加强网络处理能力);
2.提供故障转移,实现高可用;
3.通过添加或减少服务器数量,提供网站伸缩性(扩展性);
4.安全防护;(负载均衡设备上做一些过滤,黑白名单等处理)
三、负载均衡有哪些优势?
负载均衡可以定向和控制应用程序服务器与其访客或客户端之间的互联网流量。因此,它可提高应用程序的可用性、可扩展性、安全性和性能。
1、应用程序可用性
服务器故障或维护可能会增加应用程序停机时间,使访客无法访问您的应用程序。负载均衡器可以通过以下方式提高您的系统的容错能力:自动检测服务器问题并将客户端流量重定向到可用服务器。您可以使用负载均衡来简化以下任务:
- 运行应用程序服务器维护或升级而无需使应用程序停机
- 为备份站点提供自动灾难恢复
- 执行运行状况检查并防止出现可能导致停机的问题
2、应用程序可扩展性
您可以使用负载均衡器在多个服务器之间智能地定向网络流量。您的应用程序可以处理数千个客户端请求,因为负载均衡会执行以下操作:
- 防止任何一台服务器出现流量瓶颈
- 预测应用程序流量,以便您可以在需要时添加或移除不同服务器
- 为您的系统增加冗余度,使您可以放心扩展
3、应用程序安全
负载均衡器具有多项内置的安全功能,可为您的互联网应用程序的安全保驾护航。它们是应对分布式拒绝服务攻击的有用工具,在这种攻击中,攻击者会用数百万个并发请求淹没应用程序服务器,从而导致服务器故障。负载均衡器还可以执行以下操作:
- 监控流量并阻止恶意内容
- 将攻击流量自动重定向到多个后端服务器,以最大限度减少影响
- 通过一组网络防火墙路由流量,以提高安全性
4、应用程序性能
负载均衡器通过增加响应时间和减少网络延迟来提高应用程序性能。它们可以执行诸如以下几项关键任务:
- 在服务器之间平均分配负载以提高应用程序性能
- 将客户端请求重定向到地理位置较近的服务器以减少延迟
- 确保物理和虚拟计算资源的可靠性和性能
四、什么是负载均衡算法?
负载均衡算法是一组规则,负载均衡器遵循这些规则来确定最适合每个不同客户端请求的服务器。负载均衡算法分为两个主要类别。
1、静态负载均衡
静态负载均衡算法遵循固定规则,与当前服务器状态无关。以下是静态负载均衡的示例。
循环法
服务器的 IP 地址通知客户端将请求发往何处。IP 地址是一串很难记住的长数字。为了简单起见,域名系统将网站名称映射到服务器。当您在浏览器中输入 aws.amazon.com 时,请求将首先发送到我们的名称服务器,该服务器会将我们的 IP 地址返回给您的浏览器。
在循环法中,权威性名称服务器(而不是专用硬件或软件)执行负载均衡。该名称服务器轮流或以循环方式返回服务器场中不同服务器的 IP 地址。
加权循环法
在加权循环负载均衡中,您可以根据服务器的优先级或容量为每台服务器分配不同权重。权重较高的服务器将从名称服务器接收更多的传入应用程序流量。
IP 哈希法
在 IP 哈希法中,负载均衡器将对客户端 IP 地址执行名为哈希的数学计算。它将客户端 IP 地址转换为数字,然后将该数字映射到各个服务器。
随机算法
Random随机,按权重设置随机概率。在一个截面上碰撞的概率高,但调用量越大分布越均匀,而且按概率使用权重后也比较均匀,有利于动态调整提供者权重。
2、动态负载均衡
动态负载均衡算法将在分配流量之前检查服务器的当前状态。以下是动态负载均衡算法的一些示例。
最少连接法
连接是客户端与服务器之间的开放通信渠道。当客户端向服务器发送第一个请求时,客户端将进行身份验证,并在彼此之间建立活动连接。在最少连接法中,负载均衡器将检查哪些服务器的活动连接最少,并将流量发送到这些服务器。此方法假定所有连接均要求所有服务器具有相同处理能力。
加权最小连接法
加权最小连接算法假定某些服务器可以处理比其他服务器更多的活动连接。因此,您可以为每台服务器分配不同的权重或容量,负载均衡器会将新的客户端请求发送到按容量计算连接最少的服务器。
最短响应时间法
响应时间是服务器处理传入请求和发送响应所花费的总时间。最短响应时间法会将服务器响应时间与活动连接相结合,以确定最佳服务器。负载均衡器使用此算法来确保为所有用户提供更快的服务。
基于资源的方法
在基于资源的方法中,负载均衡器通过分析当前服务器负载来分配流量。称为代理的专用软件在每台服务器上运行,并计算服务器资源的使用情况,如其计算容量和内存。然后,负载均衡器将先检查代理是否有足够的可用资源,然后再将流量分配给该服务器。
常用「负载均衡」策略优缺点和适用场景
五、四层负载均衡
所谓四层就是基于IP+端口的负载均衡,通过报文中的目标地址和端口,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。四层负载均衡工作在OSI模型的传输层,由于在传输层,只有TCP/UDP协议,这两种协议中除了包含源IP、目标IP以外,还包含源端口号及目的端口号。
六、七层负载均衡
所谓七层负载均衡,也称为“内容交换”,也就是主要通过报文中的真正有意义的应用层内容,再加上负载均衡设备设置的服务器选择方式,决定最终选择的内部服务器。七层负载均衡工作在OSI模型的应用层,应用层协议较多,常用http、radius、dns等。七层负载就可以基于这些协议来负载。这些应用层协议中会包含很多有意义的内容。比如同一个Web服务器的负载均衡,除了根据IP加端口进行负载外,还可根据七层的URL、浏览器类别、语言来决定是否要进行负载均衡。
七、4层和7层代理负载的区别
代理原理:
4层 :用的是NAT技术。NAT英文全称是“Network Address Translation”,中文意思是“网络地址转换”,请求进来的时候,nginx修改数据包里面的目标和源IP和端口,然后把数据包发向目标服务器,服务器处理完成后,nginx再做一次修改,返回给请求的客户端。
7层 :代理:需要读取并解析http请求内容,然后根据具体内容(url,参数,cookie,请求头)然后转发到相应的服务器,转发的过程是:建立和目标机器的连接,然后转发请求,收到响应数据在转发给请求客户端
优缺点对比:
1、理论上4层要比7层快,因为7层代理需要解析数据包的具体内容,需要消耗额外的cpu。但nginx具体强大的网络并发处理能力, 对于一些慢连接,nginx可以先将网络请求数据缓冲完了一次性转发给上游server,这样对于上游网络并发处理能力弱的服务器(比如tomcat),这样对tomcat来说就是慢连接变成快连接(nginx到tomcat基本上都是可靠内网),从而节省网络数据缓冲时间,提供并发性能。
2、由于4层代理用的是NAT,所以nginx不知道请求的具体内容,所以nginx啥也干不了。 用7层代理,可以根据请求内容(url,参数,cookie,请求头)做很多事情;
例如:
动态代理:不同的url转发到不同服务器。
风控:屏蔽外网IP请求某些敏感url;根据参数屏蔽某些刷单用户。
审计:在nginx层记录请求日志。
由于现在机器cpu性能都很好,4层代理并没有明显的性能优势,而7层代理在业务层面优势明显,所以一般直接选择7层代理
八、负载均衡有哪些类型?
我们可以将负载均衡分为三个主要类别,具体取决于负载均衡器为了重定向流量而检查客户端请求中的哪些内容。
1、应用程序负载均衡
复杂的现代应用程序拥有多个服务器场,其中包含多个专用于单个应用程序功能的服务器。应用程序负载均衡器会查看请求内容(如 HTTP 标头或 SSL 会话 ID)以重定向流量。
例如,电子商务应用程序具有产品目录、购物车和结账功能。应用程序负载均衡器会将浏览产品的请求发送给包含图像和视频但不需要保持开放连接的服务器。相比之下,它会将购物车请求发送给能够保持多个客户端连接并长时间保存购物车数据的服务器。
2、网络负载均衡
网络负载均衡器会检查 IP 地址和其他网络信息,以最佳方式重定向流量。它们将跟踪应用程序流量的来源,并可以将一个静态 IP 地址分配给多个服务器。网络负载均衡器使用前面介绍的静态和动态负载均衡算法来均衡服务器负载。
3、全局服务器负载均衡
全局服务器负载均衡可跨地理位置分散的多个服务器进行。例如,很多公司可能在不同国家/地区的多个数据中心以及全球的第三方云提供商中拥有服务器。在这种情况下,本地负载均衡器将管理某一地区或区域内的应用程序负载。这些负载均衡器会尝试将流量重定向到地理位置更接近客户端的服务器目标。只有在服务器出现故障的情况下,这些负载均衡器才会将流量重定向到客户端所在地理区域之外的服务器。
4、DNS 负载均衡
在 DNS 负载均衡中,您可以将域配置为跨域上的资源池路由网络请求。域可以对应于网站、邮件系统、打印服务器或可通过互联网访问的其他服务。DNS 负载均衡有助于在全球分布的资源池中保持应用程序可用性以及均衡网络流量。
九、负载均衡技术有哪些类型?
负载均衡器属于以下两种类型之一:硬件负载均衡器和软件负载均衡器。
1、硬件负载均衡器
基于硬件的负载均衡器是一种硬件设备,可以安全地处理千兆字节的流量并将其重定向到数百个不同的服务器。您可以将其存储在数据中心,并使用虚拟化创建多个可以集中管理的数字或虚拟负载均衡器。
2、软件负载均衡器
基于软件的负载均衡器是执行所有负载均衡功能的应用程序。您可以将它们安装在任何服务器上,也可作为完全托管的第三方服务的形式访问。
3、硬件负载均衡器与软件负载均衡器的比较
硬件负载均衡器需要初始投资、配置和持续维护。您也可能不会满负荷使用它们,尤其是您购买硬件负载均衡器只是为了处理高峰时段的流量高峰。如果流量突然增加到超出其当前容量,这将影响用户,直到您能购买并设置另一个负载均衡器为止。
相比之下,基于软件的负载均衡器要灵活得多。它们可以轻松地纵向扩展或缩减,并且与现代云计算环境更加兼容。随着时间推移,它们的设置、管理和使用成本也会降低。