负载均衡算法可以分为下面几类:
任务平分类:可以按照平均分配或者加权平均分配的算法。
负载均衡类:按照服务器的负载,比如CPU负载,IO负载等进行分配(站在服务器的角度)。
性能最优类:客户端按照服务器的响应时间来分配请求(站在客户端的角度)。
Hash类:按照特定的信息进行hash值,然后分配给特定的服务器,比如按照IP hash算法,Session ID Hash算法,或者按照用户的ID hash等等。
一、任务平分类
轮询算法
该算法实现简单,即轮询每个服务器,分别将强求发送到不同的服务器中,不过对于某些场景,比如购物车业务会造成分布式session一致性问题。 而且该算法对于服务器的新旧,好坏程度无感知,如64核和32核的服务器的负载应当不同。
加权轮询
该算法解决上面的问题,可以按照服务器的核数等情况分配不同数量的请求 ,比如64核的服务器请求数应当多于32核的服务器。 但是该算也不能避免分布式session一致性的问题,也无法感知服务器的运行状态。(运行状态即服务器正在运行时的CPU负载以及IO负载)。
二、负载均衡类
负载最低优先算法
该算法解决了轮询无法感知服务器的运行状态的问题。
对于LVS负载均衡设备,可以通过“连接数”来衡量服务器的负载,连接数越多,负载越高。
对于Nginx负载均衡设备,可以通过“HTTP请求数”来衡量服务器负载等。 缺点:
使用最少连接数算法,需要负载均衡器和服务器之间建立连接,时刻感知服务器的连接状态,如果服务器使用的是连接池这种方式则不适合使用该算法,比如使用 Mysql的连接池。
CPU负载算法要求服务器每隔一段时间收集服务器的信息,而这个时间间隔不好控制,间隔太长,导致单个时间间隔内服务器的负载过高,性能下降;间隔太短,需要 频繁的收集服务器的信息。
三、性能最优类
性能最优优先算法
按照服务器的响应时间,将请求优先转发给响应时间短的服务器。
四、Hash类
IP地址Hash算法
将来自同一个IP地址的请求发送到同一台服务器中响应,解决了某些场景下分布式session一致性的问题。
URL hash算法
将同一个URL的请求发送到同一个服务器中响应。比如将访问图片的URL请求发送到静态服务器或者发送到缓存服务器。
来源:CSDN
作者:mtAsnow
链接:https://blog.csdn.net/pyl88429/article/details/103672820