java轮训算法_负载均衡算法-java实现

本文介绍了负载均衡的概念和几种经典算法,并提供了Java代码实现,包括轮询法、加权轮询法、随机法、加权随机法和IP_Hash算法,旨在解决并发请求的分配问题,以优化服务器资源利用率。

前言:

负载均衡是为了解决并发情况下,多个请求访问,把请求通过提前约定好的规则转发给各个server。其中有好几个种经典的算法。在用java代码编写这几种算法之前,先来了解一下负载均衡这个概念。

1.概念

负载,从字面意思可以分析,是指后端server可以承受的压力。这个一方面是服务器的性能,另一方面就是代码的质量了。

均衡,就是说把服务部署在多态server,如何调度这些资源。根据服务器性能不同,进行一个权衡。

当web访问量增加,服务器性能不同,更好的去利用服务器,我们需要负载均衡算法。

2.几种负载均衡算法简介

主要的负载均衡算法是图中这些,在代码实现之前,我们先简单回顾一下他们的概念。

轮询法:

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

优点:绝对公平

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

加权轮询法:

该算法中,每个机器接受的连接数量是按权重比例分配的。这是对普通轮询算法的改进,比如你可以设定:第三台机器的处理能力是第一台机器的两倍,那么负载均衡器会把两倍的连接数量分配给第3台机器。加权轮询分为:简单的轮询、平滑的轮询。

什么是平滑的轮询,就是把每个不同的服务,平均分布。在Nginx源码中,实现了一种叫做平滑的加权轮询(smooth weighted round-robin balancing)的算法,它生成的序列更加均匀。5个请求现在分散开来,不再是连续的。

随机法:

负载均衡方法随机的把负载分配到各个可用的服务器上,通过随机数生成算法选取一个服务器。毕竟随机,,有效性受到了质疑。

加权随机法:

获取带有权重的随机数字,随机这种东西,不能看绝对,只能看相对。

IP_Hash算法:

hash(object)%N算法,通过一种散列算法把请求分配到不同的服务器上。

3.Java代码实现负载均衡五种算法

1.轮询法:

import java.util.*;importjava.util.concurrent.ConcurrentHashMap;public classTestRoundRobin {//1.定义map, key-ip,value-weight

static Map ipMap=new HashMap<>();static{

ipMap.put("192.168.13.1",1);

ipMap.put("192.168.13.2",1);

ipMap.put("192.168.13.3",1);

}//Integer sum=0;

Integer pos = 0

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值