负载均衡使我们能够通过多个资源分配传入的网络流量,通过仅向在线资源发送请求来确保高可用性和可靠性。它提供了根据需求增加或减少资源的灵活性。
为了增加可扩展性和冗余,我们可以尝试在系统的每一层实现负载均衡:
为什么?
现代高流量网站必须为来自用户或客户端的数十万(或数百万)并发请求提供服务。为了经济高效地扩展以满足这些高容量,现代计算最佳实践通常需要添加更多服务器。
负载均衡器可以位于服务器前面,并将客户端请求路由到能够以最大速度和容量利用率的方式满足这些请求的服务器。这可能会降低一些性能,但确保没有单个服务器工作过度。如果一台服务器宕机,负载均衡器将流量重定向到其余的在线服务器。将新服务器添加到服务器组时,负载平衡器将自动开始向其发送请求。
工作量分配
这是负载均衡器提供的核心功能,有几种常见的方式:
-
基于主机:根据请求的主机名分发请求。
-
基于路径:使用整个URL来分发请求,而不仅仅是主机名。
-
基于内容:检查请求的消息内容。这允许基于参数值等内容进行分发。
层级
一般来说,负载均衡器在以下两个层级之一运行:
网络层
这是在网络传输层(也称为第4层)工作的负载均衡器。它基于网络信息(如IP地址)执行路由,无法执行基于内容的路由。这通常是可以高速运行的专用硬件设备。
应用层
这是在应用层也称为第7层运行的负载均衡器。负载均衡器可以读取请求的全部内容并执行基于内容的路由。它允许在充分了解流量的基础上管理负载。
类型
让我们看看不同类型的负载均衡器:
软件
软件负载平均衡器通常比硬件版本更易于部署。它们往往更具成本效益和灵活性,并且与软件开发环境结合使用。软件方法为我们提供了根据环境的特定需求配置负载均衡器的灵活性。灵活性的提高可能以不得不做更多的工作来设置负载均衡器为代价。与硬件版本相比,软件均衡器提供了更多的封闭式方法,让我们更自由地进行更改和升级。
软件负载平衡器被广泛使用,可以作为需要配置和管理的可安装解决方案,也可以作为托管云服务。
硬件
顾名思义,硬件负载均衡器依赖物理本地硬件来分发应用程序和网络流量。这些设备可以处理大量流量,但通常价格高昂,灵活性有限。
硬件负载均衡器包括专有固件,需要在新版本和安全补丁发布时进行维护和更新。
DNS
DNS负载均衡是在域名系统(DNS)中配置域的实践,使得对域的客户端请求分布在一组服务器机器上。
不幸的是,DNS负载均衡具有限制其可靠性和效率的固有问题。最重要的是,DNS不会检查服务器和网络中断或错误。即使服务器关闭或无法访问,它也始终为域返回相同的IP地址集。
路由算法
常用的路由算法包括:
-
轮询(Round-robin):请求轮流分发到应用程序服务器。
-
加权轮询(Weighted Round-robin):基于简单的轮询技术,管理员可以通过DNS记录分配的权重来考虑不同的服务器特性,例如计算能力和流量处理能力。
-
最少连接(Least Connections):将新请求发送到与客户端之间连接最少的服务器。每个服务器的相对计算能力被考虑为哪个服务器具有最少的连接。
-
最小响应时间(Least Response Time):将请求发送到由组合最快响应时间和最少活动连接的公式选择的服务器。
-
最小带宽(Least Bandwidth):该方法以兆每秒(Mbps)为单位测量流量,向具有最小Mbps流量的服务器发送客户端请求。
-
哈希(Hashing):根据我们定义的键分发请求,例如客户端IP地址或请求URL。
优点
负载均衡在防止停机方面也起着关键作用,负载均衡的其他优点包括:
-
可伸缩性
-
冗余
-
灵活性
-
效率
冗余负载均衡器
你一定已经猜到了,负载平衡器本身可能存在单点故障。为了解决这个问题,可以在集群模式中使用两个个或N个负载均衡器。
而且,如果存在故障检测并且活动的负载平衡器出现问题,另一个备用负载均衡器可以接管,这会增加我们系统的容错。
特点
以下是负载均衡器的一些常见特点:
-
弹性伸缩(Autoscaling):根据需求条件启动和关闭资源。
-
粘性会话(Sticky sessions):将同一用户或设备分配给同一资源的能力,以维护资源上的会话状态。
-
健康检查(Healthchecks):确定资源是否停机或性能不佳的能力,以便从负载均衡池中删除该资源。
-
持久性连接(Persistence connections):允许服务器打开与客户端例如 WebSocket 的持久性连接。
-
加密(Encryption):处理加密连接,如TLS和SSL。
-
证书(Certificates):向客户端提供证书并验证客户端证书。
-
压缩(Compression):响应的压缩。
-
缓存(Caching):应用层负载平衡器可以提供缓存响应的能力。
-
日志(Logging):请求和响应元数据的日志记录可以用作审计跟踪或分析数据的来源。
-
请求跟踪(Request tracing):为每个请求分配一个唯一的id,用于日志记录、监视和故障排除。
-
重定向(Redirects):根据请求路径等因素重定向传入请求的能力。
-
固定响应(Fixed response):返回请求的静态响应,如错误消息。
例子
以下是行业中常用的一些负载均衡解决方案: