上篇文章讲解了负载均衡的方案,本文主要讲解下负载均衡有哪些算法
轮询(Round Robin)
轮询是最简单的算法,请求按照顺序轮流分配到服务器上。
轮询主要有两个缺点:
1、是不会关心服务器的状态的,如果某个服务器负载已经很高,响应也非常缓慢,请求还是会发给他。
2、如果服务器配置是不一样的,比如说内存是16G和32G的机器接收的请求还是会一样多
随机
随机选择将请求发送到一台服务器,这个实现也简单。但是也会存在和轮询相同的缺点,而且还会导致请求分配不均匀。
加权轮询
加权轮询是可以针对不同服务器配置不同的权重,解决了轮询中第二个问题,但是还是没有根据服务器实时状态进行调配请求的分发
性能最优
将请求分发给性能最优的服务器,这个就解决了轮询中第一个问题,可以根据服务器状态来进行请求的分发。
怎么判断该服务器性能是否最优了,可以从服务端和客户端两个角度来考虑。
服务端:根据服务端的最小连接数,CPU、内存和IO使用情况判断
客户端:在客户端进行统计服务端的响应时间,哪个服务器响应快,就把请求多分一些
这种算法固然可以根据服务器端状态进行分发请求,但是算法复杂度会上升很多。
Hash类
根据某些信息进行Hash算法,将相同Hash值的请求分配到同一台服务器。一般在请求是有状态的场景下可以使用。比如说源地址Hash,可以把同一个IP地址的任务分配到同一服务器上,来维持同一IP在服务器上的状态(会话)。
总结
上面就是几种负载均衡算法了,这里所说的无法感知服务器状态,是指的服务器性能好不好,而不是服务器能不能正常工作。不管是哪种负载均衡算法能应该保证能判断服务器是否能正常工作,把故障的服务器从负载均衡列表里删除掉。