常用负载均衡详解

1 介绍

在互联网场景下,负载均衡(Load Balance)是分布式系统架构设计中必须考虑的一个环节,它通常是指将负载流量(工作任务、访问请求)平衡、分摊到多个操作单元(服务器、组件)上去执行的过程。
目的在于提供负载配比,解决性能、单点故障(高可用)和扩展性(水平伸缩)等问题。
 

image


以上图为例,随着互联网的兴盛,类似淘宝、京东等网站的访问量逐年提升。原先的单台服务或者单集群模式已经远不能满足需求了,这时候就需要横向扩展多台服务或者多个集群来分摊压力,达到提升系统吞吐的能力,这就是著名的分治理论。
但服务器增加了,他们之间的流量负载也必须有一个组件来管控,这就是负载均衡的作用。负载均衡提供了多种算法策略来满足不同的业务负载需求,下面我们详细来讲解下。

2 几种常见的负载均衡策略

2.1 轮询(Round Robin)

RR轮询,即Round Robin。按照请求的顺序轮流分配到不同的服务器,循环往复。这种策略适用于服务器性能相近的情况,可以平均分配负载。但如果某个服务器性能较差或者偶发故障,会影响整个系统的性能和稳定性。
如下图所示:

image

  • 分别有5条请求过来
  • 按照顺序轮流分配,web-server1 分配到 1、4,web-server2 分配到 2、5,web-server3 分配到 3。

2.2 按照权重轮询(Weighted Round Robin)

即加权轮询,给不同的服务器分配不同的权重,根据权重比例来决定分配请求的数量。这种策略适用于后端服务器性能不均的情况,可以根据实际情况灵活调整。使得性能更好的服务器能够处理更多的请求,从而提高整个系统的处理效率。
如下图所示:

image

  • 分别有5条请求过来
  • web-server1 因为权重为60%,分配到 1、2、3
  • web-server2 权重为20%,分配到 4
  • web-server3 权重为20%,分配到 5

2.3 IP 哈希(IP Hash)

根据客户端的IP地址计算哈希值,将请求分配给特定的服务器,保证相同IP的客户端请求始终发送到同一台服务器。这种策略适用于需要保持客户端会话一致性的场景,例如需要维护用户session的Web应用。
如下图所示:

image

  • IP为192.168.0.99的流量hash计算对应web-service1,所以将1、4流量分配到第1台服务器
  • IP为192.168.0.96、192.168.0.98的流量hash计算对应web-service3,所以将2、3流量分配到第1台服务器

需要注意的是,虽然IP哈希算法可以确保来自同一IP地址的请求被发送到同一台服务器,这在一些需要保持会话一致性的场景中很有用,但它也可能导致负载不均衡。例如,如果某个IP地址发送了大量的请求,那么处理这些请求的服务器可能会过载,而其他服务器可能处于空闲状态。因此,在使用IP哈希算法时,需要仔细考虑其适用性和潜在的风险。需要对极端情况进行评估,笔者就曾经踩过坑。

2.4 最少连接(Least Connections)

将请求分配给当前连接数最少的服务器,以实现负载均衡。这种策略适用于处理长连接请求的场景,如WebSocket、FTP服务。通过记录每台服务器当前正在处理的连接数,将新请求分配给连接数最少的服务器,可以有效避免某些服务器过载导致性能下降的情况。
如下图所示:

image

  • web-service1、web-service2、web-service3的连接数分别是11、15、2,所以 web-service3 相对空闲
  • 1、2、3请求到来的时候,web-service3持续空闲,而web-service1、web-service2持续hold住连接,所以请求分配给web-service3
  • 该算法对服务器性能差异较大的情况有较好的适应性,请求优先发送到连接数较少的服务器,有助于避免某些服务器过载,提升性能。
  • 缺少点就是需要实时监测连接数,并且每个流量来的时候都要判断下再分发,在流量繁忙时增加了服务器开销,影响性能。

2.5 最短响应时间(Least Response Time)

短响应时间(Least Response Time)算法在负载均衡领域中被广泛应用。这种策略适用于对响应时间有严格要求的应用场景。通过实时监测每台服务器的响应时间,将请求分配给响应时间最短的服务器,可以确保用户获得最快的响应,提升用户体验。
如下图所示:
 

image


同样,这种算法也有自己的优缺点:

优点

1、提高用户体验:通过选择响应时间最短的服务器来处理请求,可以显著减少用户的等待时间,提高整体的用户体验。
2、动态负载均衡:该算法能够实时地根据服务器的响应时间来调整负载分配,确保每台服务器都能根据其实际性能来处理相应数量的请求。
3、处理高峰期流量:在流量高峰期,最短响应时间算法可以确保请求被迅速处理,避免系统拥堵和延迟。

缺点

1、计算开销:为了确定每台服务器的响应时间,系统需要不断地进行监测和计算,这可能会增加额外的系统开销。
2、瞬时波动:由于该算法主要依赖于实时的响应时间,因此可能会受到瞬时波动的影响。例如,如果某台服务器在某一时刻由于某种原因(如临时的高负载)响应时间变长,它可能会被暂时排除在负载均衡之外,即使其实际性能可能仍然优于其他服务器。
3、可能忽略其他性能指标:最短响应时间算法主要关注响应时间,可能忽略了其他重要的性能指标,如服务器的处理能力、内存占用等。在某些情况下,这可能导致负载分配不够均衡。

3 总结

本文介绍了常见的几种负载均衡策略,此外,还有一些其他策略,如:

  • DNS负载均衡,适用于全球范围内的负载均衡,可以根据用户的地理位置将请求分发到最近的服务器,提高访问速度。
  • 数据层负载均衡,需要考虑“数据与请求均衡的平衡”,最常见的方式就是按照分库分表进行分片hash负载

在选择负载均衡策略时,需要根据实际应用场景、服务器性能、网络状况等因素进行综合考虑,以达到最佳的负载均衡效果。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Cloud中常用负载均衡组件有Ribbon和OpenFegin。在Spring Cloud H版及之前的版本中,主要使用的是Ribbon和OpenFegin作为负载均衡的方案。然而,在Spring Cloud 2020版本之后,官方宣布剔除了除了eureka-server和eureka-client以外的所有Netflix组件,并推荐使用Spring Cloud Loadbalancer替代。尽管如此,Ribbon和OpenFegin仍然是目前主流的负载均衡解决方案。因此,在介绍负载均衡组件时,通常会涉及到Ribbon和OpenFegin。 Ribbon作为负载均衡器在分布式网络中扮演着非常重要的角色。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [一文详解 Spring Cloud 负载均衡!](https://blog.csdn.net/m0_71777195/article/details/128913837)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [SpringCloud之负载均衡详解](https://blog.csdn.net/weixin_45717638/article/details/120111957)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xdpcxq1029

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

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

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

打赏作者

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

抵扣说明:

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

余额充值