什么是负载均衡?
负载均衡是在支持应用程序的资源池中平均分配网络流量的一种方法。现代应用程序必须同时处理数百万用户,并以快速、可靠的方式将正确的文本、视频、图像和其他数据返回给每个用户。为了处理如此高的流量,大多数应用程序都有许多资源服务器,它们之间包含很多重复数据。负载均衡器是位于用户与服务器组之间的设备,充当不可见的协调者,确保均等使用所有资源服务器。
一个没有负载均衡的 web 架构类似下面这样:
在这里用户是直连到 web 服务器,如果这个服务器宕机了,那么用户自然也就没办法访问了。另外,如果同时有很多用户试图访问服务器,超过了其能处理的极限,就会出现加载速度缓慢或根本无法连接的情况。
而通过在后端引入一个负载均衡器和至少一个额外的 web 服务器,可以缓解这个故障。通常情况下,所有的后端服务器会保证提供相同的内容,以便用户无论哪个服务器响应,都能收到一致的内容。
从图里可以看到,用户访问负载均衡器,再由负载均衡器将请求转发给后端服务器。在这种情况下,单点故障现在转移到负载均衡器上了。这里又可以通过引入第二个负载均衡器来缓解,但在讨论之前,我们先探讨下负载均衡器的工作方式。
负载均衡器可以处理什么样的请求?
负载均衡器的管理员能主要为下面四种主要类型的请求设置转发规则:
• HTTP
• HTTPS
• TCP
• UDP
负载均衡器如何选择要转发的后端服务器?
负载均衡器一般根据两个因素来决定要将请求转发到哪个服务器。首先,确保所选择的服务器能够对请求做出响应,然后根据预先配置的规则从健康服务器池(healthy pool)中进行选择。
因为,负载均衡器应当只选择能正常做出响应的后端服务器,因此就需要有一种判断后端服务器是否「健康」的方法。为了监视后台服务器的运行状况,运行状态检查服务会定期尝试使用转发规则定义的协议和端口去连接后端服务器。如果,服务器无法通过健康检查,就会从池中剔除,保证流量不会被转发到该服务器,直到其再次通过健康检查为止。
负载均衡有哪些优势?
负载均衡可以定向和控制应用程序服务器与其访客或客户端之间的互联网流量。因此,它可提高应用程序的可用性、可扩展性、安全性和性能。
应用程序可用性
服务器故障或维护可能会增加应用程序停机时间,使访客无法访问您的应用程序。负载均衡器可以通过以下方式提高您的系统的容错能力:自动检测服务器问题并将客户端流量重定向到可用服务器。您可以使用负载均衡来简化以下任务:
• 运行应用程序服务器维护或升级而无需使应用程序停机
• 为备份站点提供自动灾难恢复
• 执行运行状况检查并防止出现可能导致停机的问题
应用程序可扩展性
您可以使用负载均衡器在多个服务器之间智能地定向网络流量。您的应用程序可以处理数千个客户端请求,因为负载均衡会执行以下操作:
• 防止任何一台服务器出现流量瓶颈
• 预测应用程序流量,以便您可以在需要时添加或移除不同服务器
• 为您的系统增加冗余度,使您可以放心扩展
应用程序安全
负载均衡器具有多项内置的安全功能,可为您的互联网应用程序的安全保驾护航。它们是应对分布式拒绝服务攻击的有用工具,在这种攻击中,攻击者会用数百万个并发请求淹没应用程序服务器,从而导致服务器故障。负载均衡器还可以执行以下操作:
• 监控流量并阻止恶意内容
• 将攻击流量自动重定向到多个后端服务器,以最大限度减少影响
• 通过一组网络防火墙路由流量,以提高安全性
应用程序性能
负载均衡器通过增加响应时间和减少网络延迟来提高应用程序性能。它们可以执行诸如以下几项关键任务:
• 在服务器之间平均分配负载以提高应用程序性能
• 将客户端请求重定向到地理位置较近的服务器以减少延迟
• 确保物理和虚拟计算资源的可靠性和性能
负载均衡的工作原理是什么?
公司通常在多台服务器上运行其应用程序。这种服务器安排称为服务器场。用户对应用程序的请求首先转到负载均衡器。然后,负载均衡器会将每个请求路由到服务器场中最适合处理该请求的单个服务器。
负载均衡就像餐厅经理所做的工作一样。考虑一家有五名服务员的餐厅。如果允许顾客选择服务员,那么一个或两个服务员可能会超负荷工作,而其他服务员则处于闲置状态。为了避免这种情况,餐厅经理将顾客分配给最适合为他们提供服务的特定服务员。
什么是负载均衡算法?
负载均衡算法是一组规则,负载均衡器遵循这些规则来确定最适合每个不同客户端请求的服务器。负载均衡算法分为两个主要类别。
静态负载均衡
静态负载均衡算法遵循固定规则,与当前服务器状态无关。以下是静态负载均衡的示例。
循环法
服务器的 IP 地址通知客户端将请求发往何处。IP 地址是一串很难记住的长数字。为了简单起见,域名系统将网站名称映射到服务器。当您在浏览器中输入 aws.amazon.com 时,请求将首先发送到我们的名称服务器,该服务器会将我们的 IP 地址返回给您的浏览器。
在循环法中,权威性名称服务器(而不是专用硬件或软件)执行负载均衡。该名称服务器轮流或以循环方式返回服务器场中不同服务器的 IP 地址。
加权循环法
在加权循环负载均衡中,您可以根据服务器的优先级或容量为每台服务器分配不同权重。权重较高的服务器将从名称服务器接收更多的传入应用程序流量。
IP 哈希法
在 IP 哈希法中,负载均衡器将对客户端 IP 地址执行名为哈希的数学计算。它将客户端 IP 地址转换为数字,然后将该数字映射到各个服务器。
动态负载均衡
动态负载均衡算法将在分配流量之前检查服务器的当前状态。以下是动态负载均衡算法的一些示例。
最少连接法
连接是客户端与服务器之间的开放通信渠道。当客户端向服务器发送第一个请求时,客户端将进行身份验证,并在彼此之间建立活动连接。在最少连接法中,负载均衡器将检查哪些服务器的活动连接最少,并将流量发送到这些服务器。此方法假定所有连接均要求所有服务器具有相同处理能力。
加权最小连接法
加权最小连接算法假定某些服务器可以处理比其他服务器更多的活动连接。因此,您可以为每台服务器分配不同的权重或容量,负载均衡器会将新的客户端请求发送到按容量计算连接最少的服务器。
最短响应时间法
响应时间是服务器处理传入请求和发送响应所花费的总时间。最短响应时间法会将服务器响应时间与活动连接相结合,以确定最佳服务器。负载均衡器使用此算法来确保为所有用户提供更快的服务。
基于资源的方法
在基于资源的方法中,负载均衡器通过分析当前服务器负载来分配流量。称为代理的专用软件在每台服务器上运行,并计算服务器资源的使用情况,如其计算容量和内存。然后,负载均衡器将先检查代理是否有足够的可用资源,然后再将流量分配给该服务器。
最后,想要解决负载均衡器的单点故障问题,可以将第二个负载均衡器连接到第一个上,从而形成一个集群。
当主负载均衡器发生了故障,就需要将用户请求转到第二个负载均衡器。因为 DNS 更改通常会较长的时间才能生效,因此需要能灵活解决 IP 地址重新映射的方法,比如浮动 IP(floating IP)。这样域名可以保持和相同的 IP 相关联,而 IP 本身则能在服务器之间移动。
一个使用浮动 IP 的负载均衡架构示意图:
负载均衡有哪些类型?
我们可以将负载均衡分为三个主要类别,具体取决于负载均衡器为了重定向流量而检查客户端请求中的哪些内容。
应用程序负载均衡
复杂的现代应用程序拥有多个服务器场,其中包含多个专用于单个应用程序功能的服务器。应用程序负载均衡器会查看请求内容(如 HTTP 标头或 SSL 会话 ID)以重定向流量。
例如,电子商务应用程序具有产品目录、购物车和结账功能。应用程序负载均衡器会将浏览产品的请求发送给包含图像和视频但不需要保持开放连接的服务器。相比之下,它会将购物车请求发送给能够保持多个客户端连接并长时间保存购物车数据的服务器。
网络负载均衡
网络负载均衡器会检查 IP 地址和其他网络信息,以最佳方式重定向流量。它们将跟踪应用程序流量的来源,并可以将一个静态 IP 地址分配给多个服务器。网络负载均衡器使用前面介绍的静态和动态负载均衡算法来均衡服务器负载。
全局服务器负载均衡
全局服务器负载均衡可跨地理位置分散的多个服务器进行。例如,很多公司可能在不同国家/地区的多个数据中心以及全球的第三方云提供商中拥有服务器。在这种情况下,本地负载均衡器将管理某一地区或区域内的应用程序负载。这些负载均衡器会尝试将流量重定向到地理位置更接近客户端的服务器目标。只有在服务器出现故障的情况下,这些负载均衡器才会将流量重定向到客户端所在地理区域之外的服务器。
DNS 负载均衡
在 DNS 负载均衡中,您可以将域配置为跨域上的资源池路由网络请求。域可以对应于网站、邮件系统、打印服务器或可通过互联网访问的其他服务。DNS 负载均衡有助于在全球分布的资源池中保持应用程序可用性以及均衡网络流量。
负载均衡技术有哪些类型?
负载均衡器属于以下两种类型之一:硬件负载均衡器和软件负载均衡器。
硬件负载均衡器
基于硬件的负载均衡器是一种硬件设备,可以安全地处理千兆字节的流量并将其重定向到数百个不同的服务器。您可以将其存储在数据中心,并使用虚拟化创建多个可以集中管理的数字或虚拟负载均衡器。
软件负载均衡器
基于软件的负载均衡器是执行所有负载均衡功能的应用程序。您可以将它们安装在任何服务器上,也可作为完全托管的第三方服务的形式访问。
硬件负载均衡器与软件负载均衡器的比较
硬件负载均衡器需要初始投资、配置和持续维护。您也可能不会满负荷使用它们,尤其是您购买硬件负载均衡器只是为了处理高峰时段的流量高峰。如果流量突然增加到超出其当前容量,这将影响用户,直到您能购买并设置另一个负载均衡器为止。
相比之下,基于软件的负载均衡器要灵活得多。它们可以轻松地纵向扩展或缩减,并且与现代云计算环境更加兼容。随着时间推移,它们的设置、管理和使用成本也会降低。