摘要
关于“负载均衡”的解释,百度词条里:负载均衡,英文叫Load Balance,意思就是将请求或者数据分摊到多个操作单元上进行执行,共同完成工作任务。负载均衡(Load Balance)建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽、增加吞吐量、加强网络数据处理能力、提高网络的灵活性和可用性。
负载均衡有两方面的含义:
- 首先,大量的并发访问或数据流量分担到多台节点设备上分别处理,减少用户等待响应的时间;
- 其次,单个重负载的运算分担到多台节点设备上做并行处理,每个节点设备处理结束后,将结果汇总,返回给用户,系统处理能力得到大幅度提高。
目前负载均衡技术大多数是用于提高诸如在Web服务器、FTP服务器和其它关键任务服务器上的Internet服务器程序的可用性和可伸缩性。总之,它的目的就通过调度集群,达到最佳化资源使用,最大化吞吐率,最小化响应时间,避免单点过载的问题。
一、负载均衡分类
二、二层负载均衡
三、三层负载均衡
四、四层负载均衡
五、七层负载均衡
六、四层负载均衡和七层负载均衡的区别
七、负载均衡技术的常见具体应用方案
八、常用的负载均衡算法
常用的负载均衡算法分为两类:
- 一种是静态负载均衡。
- 一种是动态负载均衡。
8.1 轮询算法
将请求按顺序轮流地分配到每个节点上,不关心每个节点实际的连接数和当前的系统负载。
- 优点:简单高效,易于水平扩展,每个节点满足字面意义上的均衡;
- 缺点:没有考虑机器的性能问题,根据木桶最短木板理论,集群性能瓶颈更多的会受性能差的服务器影响。
8.2 随机算法
将请求随机分配到各个节点。由概率统计理论得知,随着客户端调用服务端的次数增多,其实际效果越来越接近于平均分配,也就是轮询的结果。
优缺点和轮询相似。
8.3 Hash源地址算法
源地址哈希的思想是根据客户端的IP地址,通过哈希函数计算得到一个数值,用该数值对服务器节点数进行取模,得到的结果便是要访问节点序号。采用源地址哈希法进行负载均衡,同一IP地址的客户端,当后端服务器列表不变时,它每次都会落到到同一台服务器进行访问。
- 优点:相同的IP每次落在同一个节点,可以人为干预客户端请求方向,例如灰度发布;
- 缺点:如果某个节点出现故障,会导致这个节点上的客户端无法使用,无法保证高可用。当某一用户成为热点用户,那么会有巨大的流量涌向这个节点,导致冷热分布不均衡,无法有效利用起集群的性能。所以当热点事件出现时,一般会将源地址哈希法切换成轮询法。
8.4 加权轮询算法
不同的后端服务器可能机器的配置和当前系统的负载并不相同,因此它们的抗压能力也不相同。给配置高、负载低的机器配置更高的权重,让其处理更多的请;而配置低、负载高的机器,给其分配较低的权重,降低其系统负载,加权轮询能很好地处理这一问题,并将请求顺序且按照权重分配到后端。
加权轮询算法要生成一个服务器序列,该序列中包含n个服务器。n是所有服务器的权重之和。在该序列中,每个服务器的出现的次数,等于其权重值。并且,生成的序列中,服务器的分布应该尽可能的均匀。比如序列{a, a, a, a, a, b, c}中,前五个请求都会分配给服务器a,这就是一种不均匀的分配方法,更好的序列应该是:{a, a, b, a, c, a, a}。
- 优点:可以将不同机器的性能问题纳入到考量范围,集群性能最优最大化;
- 缺点:生产环境复杂多变,服务器抗压能力也无法精确估算,静态算法导致无法实时动态调整节点权重,只能粗糙优化。
8.5 加权随机算法
与加权轮询法一样,加权随机法也根据后端机器的配置,系统的负载分配不同的权重。不同的是,它是按照权重随机请求后端服务器,而非顺序。
8.6 键值范围算法
根据键的范围进行负债,比如0到10万的用户请求走第一个节点服务器,10万到20万的用户请求走第二个节点服务器……以此类推。
- 优点:容易水平扩展,随着用户量增加,可以增加节点而不影响旧数据;
- 缺点:容易负债不均衡,比如新注册的用户活跃度高,旧用户活跃度低,那么压力就全在新增的服务节点上,旧服务节点性能浪费。而且也容易单点故障,无法满足高可用。
8.7 最小连接数
根据每个节点当前的连接情况,动态地选取其中当前积压连接数最少的一个节点处理当前请求,尽可能地提高后端服务的利用效率,将请求合理地分流到每一台服务器。俗称闲的人不能闲着,大家一起动起来。
- 优点:动态,根据节点状况实时变化;
- 缺点:提高了复杂度,每次连接断开需要进行计数;
- 实现:将连接数的倒数当权重值。
8.8 快速响应算法
根据请求的响应时间,来动态调整每个节点的权重,将响应速度快的服务节点分配更多的请求,响应速度慢的服务节点分配更少的请求,俗称能者多劳,扶贫救弱。
- 优点:动态,实时变化,控制的粒度更细,跟灵敏;
- 缺点:复杂度更高,每次需要计算请求的响应速度;
- 实现:可以根据响应时间进行打分,计算权重。
8.9 观察者模式算法
观察者模式是综合了最小连接数和最快响应度,同时考量这两个指标数,进行一个权重的分配。
博文参考
- 《网络编程懒人入门(一):快速理解网络通信协议(上篇)》
- 《网络编程懒人入门(二):快速理解网络通信协议(下篇)》
- 《网络编程懒人入门(三):快速理解TCP协议一篇就够》
- 《高性能网络编程(七):到底什么是高并发?一文即懂!》
- 《腾讯资深架构师干货总结:一文读懂大型分布式系统设计的方方面面》
- 《快速理解高性能HTTP服务端的负载均衡技术原理》
- 《新手入门:零基础理解大型分布式架构的演进历史、技术原理、最佳实践》
- 《通俗易懂:基于集群的移动端IM接入层负载均衡方案分享》
- 《IM开发基础知识补课:正确理解前置HTTP SSO单点登陆接口的原理》
一篇读懂分布式架构下的负载均衡技术:分类、原理、算法、常见方案等-其它分享/专项技术区 - 即时通讯开发者社区!