负载均衡,是分布式架构的必备技术,也是进阶的 必学技术,需要重点掌握。
本文我会重点详解负载均衡的 5 大核心算法 @mikechen
我们先来看一张典型的集群和负载均衡架构图:
当一台机器不能承受访问压力时,我们大多会通过横向增加两台、或者多台服务器,来共同承担访问压力,来极大的降低后端的访问压力,提升用户的访问性能。
但是,从一台扩展到多台服务器后,如何将客户端的流量、分发到具体的服务器呢?是通过服务器 1 、还是服务器 3 ?
这就涉及到了具体的负载均衡算法。
目录
1. 轮循
轮询很容易实现,将请求按顺序轮流分配到后台服务器上,均衡的对待每一台服务器,而不关心服务器实际的连接数和当前的系统负载。
适合场景:适合于应用服务器硬件都相同的情况。
2. 加权轮循
在轮询的基础上根据硬件配置不同,按权重分发到不同的服务器。
适合场景:跟配置高、负载低的机器分配更高的权重,使其能处理更多的请求,而性能低、负载高的机器,配置较低的权重,让其处理较少的请求。
3. 随机
通过系统随机函数,根据后台服务器列表的大小值来随机选取其中一台进行访问。
随着调用量的增大,客户端的请求可以被均匀地分派到所有的后端服务器上,其实际效果越来越接近于平均分配流量到后台的每一台服务器,也就是轮询法的效果。
4. 最少连接
记录每个服务器正在处理的请求数,把新的请求分发到最少连接的服务器上,因为要维护内部状态不推荐。
5. 源地址散列
根据服务消费者请求客户端的IP地址,通过哈希函数计算得到一个哈希值,将此哈希值和服务器列表的大小进行取模运算,得到的结果便是要访问的服务器地址的序号。
适合场景:根据请求的来源IP进行hash计算,同一IP地址的客户端,当后端服务器列表不变时,它每次都会映射到同一台后端服务器进行访问。
以上,是 5 大负载均衡算法及其原理的解析,对掌握及使用负载均衡,具有一定的参考价值,建议收藏、经常温顾。
如果觉得有用,请 点赞 + 转发 支持下,谢谢。
作者简介
陈睿 | mikechen , 10年+大厂架构经验,「mikechen 的互联网架构」系列文章作者,专注互联网架构技术。
「mikechen 的互联网架构」的 40W 字技术文章合集:
Java并发 | JVM | MySQL | Spring | Redis | 分布式 | 高并发
👇 关注「 mikechen 的互联网架构 」公众号 👇,回复 【架构】 ,即可获得。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。