负载均衡
分布式系统解决了业务拆分和分布式部署的问题,为了解决单点故障,可以采取冗余的方式,将相同的应用部署到多台机器上,为了多台机器统一访问入口,可以在集群前面增加负载均衡设备,实现流量分发。
负载均衡意思是将负载(工作任务、访问请求)进行平衡、分摊到多个操作单元上进行执行,是解决高性能、高可用、扩展性的终极解决方案。
一、负载均衡原理
系统的扩展可以分为纵向扩展和水平扩展,前者是从单机角度增加硬件处理能力来实现服务能力提升,后者是通过添加机器来满足大型网站服务的处理能力。
二、负载均衡分类
根据实现技术不同,可分为DNS负载均衡、HTTP负载均衡、IP负载均衡、链路层负载均衡(常用)、混合型负载均衡等。一些大型网站可以采用多层负载均衡的方式。
三、负载均衡算法
- 轮询:将所有请求依次分发到每台服务器上,适合服务器硬件相近的场景。
- 随机:随机分发,适合硬件条件相近的场景。
- 量少链接:将请求分配到目前最空闲的服务器,根据服务器当前请求的处理情况动态分配,需要监控服务器请求连接数。
- 源地址散列:根据IP地址进行hash计算。(会话粘滞)
- 加权:在轮询、量少链接、hash等算法的基础上通过加权的方式进行负载服务器分配。加权的方式也可以用于在服务器性能不同的情况下进行合理的轮询分配。
- 不用主动负载均衡:使用消息队列将请求处理过程转化为异步模型,所有请求存放在消息队列,下游空闲服务器在队列中主动领取任务,有点类似于mapreduce的过程,这样将不再存在负载不均衡的问题,还引入了消息队列,获得了消息队列的排序、缓冲、异步等额外功能。
四、补充
负载均衡算法决定了一条请求分配给哪台服务器,当需要分配的请求不止一条的时候,多条请求可以都分给选定的机器直到该机器的权值降低到比其他机器更低,或者对每条请求依次调用负载均衡算法选择分配机器。
负载均衡算法一般部署在多个服务器集群的入口处的设备上,在分布式系统中,有可能发生单点故障或者面临高并发的考验,为此可以采用负载均衡设备集群的方式。如图所示:

常用的负载均衡软件有Nginx、LVS、HaProxy等。
【参考】
https://www.jianshu.com/p/8f7242cbf469
https://zhuanlan.zhihu.com/p/32841479
https://juejin.cn/post/6844903854958460942