历史潮流浩浩荡荡,顺之则昌,逆之则亡。——孙中山

使用Java实现负载均衡算法

JAVA 徐 承恩 53℃

说到负载均衡我们首先会想到Nginx负载均衡策略,在Nginx中支持5种负载均衡策略他们分别是:轮询、加权轮询、ip_hash、fair、url_hash。

概念

负载均衡是将客户端请求访问,通过提前约定好的规则转发给各个server。其中有好几个种经典的算法,下面我们用Java实现这几种算法。

轮询算法

轮询算法按顺序把每个新的连接请求分配给下一个服务器,最终把所有请求平分给所有的服务器。

优点:绝对公平

缺点:无法根据服务器性能去分配,无法合理利用服务器资源。

输出结果:

加权轮询法

每个机器接受的连接数量按权重比例进行分配。

该算法是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器,轮询可以将请求顺序按照权重分配到后端。

输出结果:

加权随机法

获取带有权重的随机数字,随机这种东西,不能看绝对,只能看相对,我们不用index 控制下标进行轮询,只用random 进行随机取ip,即实现算法。

输出结果:

随机法

负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器,这种实现算法最简单,随之调用次数增大,这种算法可以达到没台服务器的请求量接近于平均。

输出结果:

IP_Hash算法

hash(ip)%N算法,通过一种散列算法把客户端来源IP根据散列取模算法将请求分配到不同的服务器上。

优点:保证了相同客户端IP地址将会被哈希到同一台后端服务器,直到后端服务器列表变更。根据此特性可以在服务消费者与服务提供者之间建立有状态的session会话。

缺点: 如果服务器进行了下线操作,源IP路由的服务器IP就会变成另外一台,如果服务器没有做session 共享话,会造成session丢失。

输出结果:

 

 

转载请注明:思码老徐 » 使用Java实现负载均衡算法

喜欢 (15)